1. Etcd
Etcd是Kubernetes集群中的一個十分重要的組件,用於保存集群所有的網絡配置和對象的狀態信息。在后面具體的安裝環境中,我們安裝的etcd的版本是v3.1.5,整個kubernetes系統中一共有兩個服務需要用到etcd用來協同和存儲配置,分別是:
- 網絡插件flannel、對於其它網絡插件也需要用到etcd存儲網絡的配置信息
- kubernetes本身,包括各種對象的狀態和元信息配置
注意:flannel操作etcd使用的是v2的API,而kubernetes操作etcd使用的v3的API,所以在下面我們執行etcdctl
的時候需要設置ETCDCTL_API
環境變量,該變量默認值為2
2. 使用Etcd存儲Kubernetes對象信息
Kubernetes使用etcd v3的API操作etcd中的數據。所有的資源對象都保存在/registry
路徑下,如下:
Kubernetes使用etcd v3的API操作etcd中的數據。所有的資源對象都保存在/registry
路徑下,如下:
ThirdPartyResourceData apiextensions.k8s.io apiregistration.k8s.io certificatesigningrequests clusterrolebindings clusterroles configmaps controllerrevisions controllers daemonsets deployments events horizontalpodautoscalers ingress limitranges minions monitoring.coreos.com namespaces persistentvolumeclaims persistentvolumes poddisruptionbudgets pods ranges replicasets resourcequotas rolebindings roles secrets serviceaccounts services statefulsets storageclasses thirdpartyresources
如果你還創建了CRD(自定義資源定義),則在此會出現CRD的API。
3. etcd
Kubenretes1.6中使用etcd V3版本的API,使用etcdctl
直接ls
的話只能看到/kube-centos
一個路徑。需要在命令前加上ETCDCTL_API=3
這個環境變量才能看到kuberentes在etcd中保存的數據。
ETCDCTL_API=3 etcdctl get /registry/namespaces/default -w=json|python -m json.tool
如果是使用 kubeadm 創建的集群,在 Kubenretes 1.11 中,etcd 默認使用 tls ,這時你可以在 master 節點上使用以下命令來訪問 etcd :
ETCDCTL_API=3 etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \ --cert=/etc/kubernetes/pki/etcd/peer.crt \ --key=/etc/kubernetes/pki/etcd/peer.key \ get /registry/namespaces/default -w=json | jq .
打印方法:
我們使用kubectl命令獲取的kubernetes的對象狀態實際上是保存在etcd中的,使用下面的腳本可以獲取etcd中的所有kubernetes對象的key:
注意,我們使用了ETCD v3版本的客戶端命令來訪問etcd。
#!/bin/bash # Get kubernetes keys from etcd export ETCDCTL_API=3 keys=`etcdctl get /registry --prefix -w json|python -m json.tool|grep key|cut -d ":" -f2|tr -d '"'|tr -d ","` for x in $keys;do echo $x|base64 -d|sort done