1 k8s如何使用etcd
在k8s中所有對(duì)象的manifest都需要保存到某個(gè)地方,這樣他們的manifest在api server重啟和失敗的時(shí)候才不會(huì)丟失。
只有api server能訪問(wèn)etcd,其它組件只能間接訪問(wèn)etcd的好處是
-
增強(qiáng)樂(lè)觀鎖系統(tǒng)及驗(yàn)證系統(tǒng)的健壯性
-
方便后續(xù)存儲(chǔ)的替換,只需修改api server組件的相關(guān)接口。
etcd是一個(gè)響應(yīng)快、分布式、一致的K-V存儲(chǔ),也是k8s存儲(chǔ)集群狀態(tài)和元數(shù)據(jù)的唯一地方。
2 如何更方便地使用etcdctl命令
https://github.com/etcd-io/etcd/tree/main/etcdctl#readme
etcd接口有V2和V3兩個(gè)版本,從Kubernetes1.6開始默認(rèn)etcd版本都為v3,v2和v3接口不兼容,因此使用etcdctl操作我們要確認(rèn)好api版本。
[root@k8s-master01 ~]# yum install etcd -y ##安裝etcd服務(wù),下載后會(huì)自帶客戶端工具etcdctl
[root@k8s-master01 ~]# etcdctl --version
etcdctl version:?3.3.11
API version:?2
[root@k8s-master01 ~]# export ETCDCTL_API=3 ##設(shè)置api版本為v3
[root@k8s-master01 ~]# etcdctl version ##不同接口使用的命令也有差異
etcdctl version:?3.3.11
API version:?3.3
另外在k8s中使用etcdctl連接etcd中要用到ca證書進(jìn)行認(rèn)證,而且還需要指定etcd節(jié)點(diǎn)ip和端口信息,這就使得整個(gè)命令執(zhí)行起來(lái)非常的冗長(zhǎng)。
我們可以把相應(yīng)的信息通過(guò)變量定義,這樣在etcdctl命令在執(zhí)行時(shí)可以根據(jù)相關(guān)的變量獲取需要的信息。
[root@k8s-master01 ~]# cat /etc/profile.d/etcd export?ETCDCTL_API=3 export?ETCDCTL_CACERT=/etc/kubernetes/pki/etcd/ca.crt export?ETCDCTL_CERT=/etc/kubernetes/pki/etcd/server.crt export?ETCDCTL_KEY=/etc/kubernetes/pki/etcd/server.key export?ETCDCTL_ENDPOINTS=https://10.0.107.77:2379,https://10.0.113.204:2379,https://10.0.87.66:2379 [root@k8s-master01 ~]# source /etc/profile.d/etcd [root@k8s-master01 ~]# etcdctl member list 15c808b23512a31a, started, k8s-master02, https://10.0.107.77:2380, https://10.0.107.77:2379 5ca9692dbcd57e55, started, k8s-master03, https://10.0.113.204:2380, https://10.0.113.204:2379 f8b45063ae1a7dfa, started, k8s-master01, https://10.0.87.66:2380, https://10.0.87.66:2379
3 查看k8s儲(chǔ)存在etcd中的數(shù)據(jù)
資源都存儲(chǔ)在/registry下
[root@k8s-master01 ~]# etcdctl get --prefix / --keys-only|head -10 ##--keys-only表示只看key,相對(duì)應(yīng)的--print-value-only表示只看value
查看/registry/pods下的內(nèi)容,通過(guò)輸出結(jié)果可以看出。key的命名規(guī)則為/registry/pods/namespace_name/pod_name
[root@k8s-master01 ~]# etcdctl get --prefix /registry/pods --keys-only|head -10
查看kube-system命名空間下的條目
[root@k8s-master01 ~]# etcdctl get --prefix /registry/pods/kube-system --keys-only|head -10
4 查看某個(gè)pod的值
在k8s中,pod等資源的value是以protobuf格式存儲(chǔ)的,因此我們無(wú)法直接使用etcdctl命令去查詢,會(huì)出現(xiàn)亂碼現(xiàn)象。
對(duì)此OpenShift提供了一個(gè)工具etcdhelper來(lái)解碼proto格式的內(nèi)容。下面鏈接提供了OpenShift官方的go源碼文件,需要編譯成可執(zhí)行文件,放到/usr/local/bin目錄后就可以直接使用。
您也可以直接微信公眾號(hào)后臺(tái)回復(fù) etcd,下載我已編譯好的etcdhelper命令文件。
https://github.com/openshift/origin/tree/master/tools/etcdhelper
etcdhelper編譯
[root@k8s-master01 ~]# wget https://github.com/openshift/origin/archive/refs/heads/master.zip [root@k8s-master01 ~]# unzip master.zip [root@k8s-master01 ~]# cd origin-master/tools/etcdhelper/ [root@k8s-master01 etcdhelper]# ls etcdhelper.go OWNERS README.md [root@k8s-master01 etcdhelper]# go build etcdhelper.go [root@k8s-master01 etcdhelper]# ls etcdhelper etcdhelper.go OWNERS README.md [root@k8s-master01 etcdhelper]# cp etcdhelper /usr/local/bin/
etcdhelper使用方法與etcdctl類似,也需要指定k8s的ca文件路徑,默認(rèn)直接連接本機(jī)的2789端口進(jìn)行查詢。
另外要注意具體的get查詢命令要放到最后,否則命令無(wú)法正常執(zhí)行
[root@k8s-master01 ~]# etcdhelper -cacert /etc/kubernetes/pki/etcd/ca.crt -cert /etc/kubernetes/pki/etcd/server.crt -key /etc/kubernetes/pki/etcd/server.key get /registry/pods/kube-system/etcd-k8s-master01
通過(guò)查詢結(jié)果我們可以看到,etcd中存儲(chǔ)了pod etcd-k8s-master01的元數(shù)據(jù)信息,包括類型、api版本、名字、命名空間等信息。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-657512.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-657512.html
到了這里,關(guān)于K8S核心組件etcd詳解(下)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!