配置环境变量

kubeadm 内部集群

vim ~/.bashrc
export ETCDCTL_API=3
export ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt
export ETCDCTL_CERT=/etc/kubernetes/pki/etcd/peer.crt
export ETCDCTL_KEY=/etc/kubernetes/pki/etcd/peer.key
source ~/.bashrc

外部集群

export ETCDCTL_API=3
export ETCDCTL_CACERT=/data/etcd/ssl/ca.pem
export ETCDCTL_CERT=/data/etcd/ssl/peer.pem
export ETCDCTL_KEY=/data/etcd/ssl/peer-key.pem
source ~/.bashrc

查看 etcd 中 kubernetes 数据

查询所有key

etcdctl get /registry --prefix --keys-only=true

ETCD中key值的规律

通过观察可以简单得出下面几个规律:

  • k8s主要把自己的数据注册在/registry/前缀下面(在ETCD-v3版本后没有了目录的概念,只能一切皆前缀了)。
  • 通过观察k8s中deployment、namespace、pod等在ETCD中的表示,可以知道这部分资源的key的格式为/registry/#{k8s对象}/#{命名空间}/#{具体实例名}。
  • 存在一个与众不同的key值compact_rev_key,搜索可以知道这是apiserver/compact.go中用来记录无效数据版本使用的;运行etcdctl get compact_rev_key可以发现,输出的是一个整形数值。

有了上面的规律,可以初步得出一个结论:在研究k8s时重点关注/registry/前缀的key及其value即可。

# etcdctl get /registry/services/endpoints/default/kubernetes
etcdctl get /registry/ranges/serviceips
/registry/ranges/serviceips

# 查看 default 命令空间 kubernetes service 
etcdctl get /registry/services/endpoints/default/kubernetes

# 查看网络插件相关信息
etcdctl get "" --prefix --keys-only |grep -Ev "^$" |grep "canal\|flannel\|calico"

# 查看 flannel 网络插件 IP
etcdctl get /registry/configmaps/kube-system/kube-flannel-cfg