探索 ETCD 操作:來自日常操作和故障排除經驗分享

更新於 發佈於 閱讀時間約 12 分鐘

接續上一篇文章,本文再深入一點關於ETCD基本操作以及在其他文章中關於ETCD節點資料不一致情況的除錯內容分享,還沒看過上一篇文章的話,可以到以下連結:

接下來將分成下列幾項來分享,先是一些關於實作的記錄,再來分享在別篇文章看到關於節點資料不一致的處理過程,個人覺得任何經驗都是非常有價值的,除了自已不斷進步之外,透過多看不同的情境下所出現的問題與處理方式還可以讓自已的學習更為有效。

日常?

日常?

以下為本文章節:

  1. CLI工具安裝與Alias設定
  2. 基本操作
  3. 資料量不一致怎麼辦
  4. 結論

那就開始吧!!


1. CLI工具安裝與Alias設定

首先先進行操作ETCD的命令工具安裝,我們將利用這個工具進行許多ETCD的操作任務。

### 安裝ETCDCTL

[root]# ETCD_RELEASE=$(curl -s https://api.github.com/repos/etcd-io/etcd/releases/latest|grep tag_name | cut -d '"' -f 4)

[root]# echo $ETCD_RELEASE

v3.5.9[root]# wget https://github.com/etcd-io/etcd/releases/download/${ETCD_RELEASE}/etcd-${ETCD_RELEASE}-linux-amd64.tar.gz

[root]# tar zxvf etcd-v3.5.9-linux-amd64.tar.gz

[root]# cd etcd-v3.5.9-linux-amd64

[root]# ls -al

[root]# cp -rp etcdctl
### Alias設定 (之後就不用帶一堆參數)

[root]# vim /root/.bash_profile

alias etcdctl="ETCDCTL_API=3 /usr/local/bin/etcdctl \

--endpoints=10.107.88.15:2379,10.107.88.16:2379,10.107.88.17:2379 \--cacert=/etc/kubernetes/pki/etcd/ca.crt \--cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \--key=/etc/kubernetes/pki/apiserver-etcd-client.key"

[root]# source /root/.bash
  • endpoints : 指向外部3台ETCD nodes的2379port
  • cacert, cert, key : 指向ETCD建置時所產生的憑證

2. 基本操作

### member list

[root]# etcdctl member list

4fc005cb2e00078b, started, etcd03, https://10.107.88.17:2380, https://10.107.88.17:2379, false

db6cb663afc3dec9, started, etcd02, https://10.107.88.16:2380, https://10.107.88.16:2379, false

e8107c88a85d3042, started, etcd01, https://10.107.88.15:2380, https://10.107.88.15:237
### member list (以表格呈現)

[root]# etcdctl member list -w tab
raw-image
### show endpoint status (此處可看到88.16被選為Leader)

[root]# etcdctl endpoint status -w tab### show endpoint status
raw-image
### 移動leader

[root]# etcdctl endpoint --cluster=true status -w table

[root]# etcdctl --endpoints 10.107.88.16:2379 move-leader 4fc005cb2e00
### 查看所有的key (以路徑的方式呈現)

[root]# ETCDCTL_API=3 etcdctl get / --prefix --keys-on
raw-image
### 查看特定的key

[root]# etcdctl get /registry/clusterrolebindings/calico-kube-controlle

3. 資料量不一致怎麼辦

執行endpoint status之後發現DB size有差異,但3個節點狀態正常,RAFT INDEX 數量一致,可是DB size看到member之間的資料不同步。同時出現有些建立出來的Pod消失了,使用以下指令確認:

# kubectl get pod -n test

※ 大致上的處理流程為以下5個步驟:

S1. 備份正常的ETCD 節點與資料目錄

S2. 清除member/, wal/目錄下的資料(異常的ETCD)

S3. 從正常的ETCD節點,刪除異常的ETCD member

S4. 將異常節點重新加入cluster

S5. 啟動ETCD service


接下來分別演示這5個步驟的內容:

### S1. 備份ETCD 節點與資料目錄

[master]# etcdctl --endpoints=https://192.168.12.15:2379 snapshot save /backup/etcd01-snapshot.db

[master]# etcdctl --endpoints=https://192.168.12.16:2379 snapshot save /backup/etcd02-snapshot.db (異常)

[master]# etcdctl --endpoints=https://192.168.12.17:2379 snapshot save /backup/etcd03-snapshot.db (leader, 目前DB ize最大)
### S2. 清除member/, wal/目錄下的資料(異常的ETCD)

[etcd02]# mv /var/lib/etcd /var/lib/etcd.bak

[etcd02]# tar -czvf etcd-20230308bak.taz.gz /var/lib/etcd
### S3. 從正常的ETCD節點,刪除異常的ETCD (endpoints是正常的leader)

[etcd03]# etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \
--key=/etc/kubernetes/pki/apiserver-etcd-client.key \
--endpoints=10.107.88.17:2379 member list

[etcd03]# etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \
--key=/etc/kubernetes/pki/apiserver-etcd-client.key \
--endpoints=10.107.88.17:2379 member remove db6cb663af
### S4. 將異常節點重新加入cluster 

[etcd02]# mv /etc/kubernetes/manifests/etcd.yaml /etc/kubernetes/manifests-backup/etcd.yaml

[etcd02]# vim /etc/kubernetes/manifests-backup/etcd.yaml
- --initial-cluster=etcd03.test.example.poc=https://10.107.88.17:2380,etcd02.test.example.poc=https://10.107.88.16:2380,etcd01.test.example.poc=https://10.107.88.15:2380- --initial-cluster-state=existing

[etcd02]# etcdctl --cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \
--key=/etc/kubernetes/pki/apiserver-etcd-client.key \
--endpoints=10.107.88.17:2379 member add etcd02.test.example.poc --peer-urls=https://10.107.88.16:2380

Member db6cb663afc3dec9 added to cluster 71d4ff56
### S5. 啟動ETCD service (etcd02)

[etcd02]# mv /etc/kubernetes/manifests-backup/etcd.yaml /etc/kubernetes/manifests/etcd.yaml
### 確認

[master]# for count in {15..17};do ETCDCTL_API=3 etcdctl get \
--prefix --keys-only --endpoints=https://10.107.88.${count}:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \
--key=/etc/kubernetes/pki/apiserver-etcd-client.key \
| wc -l;done

[master]# for count in {15..17};do ETCDCTL_API=3 etcdctl endpoint status --endpoints=https://10.107.88.${count}:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/apiserver-etcd-client.crt \
--key=/etc/kubernetes/pki/apiserver-etcd-client
raw-image

4. 結論

本文說明了基本的ETCD的常用操作,實務上當完成ETCD與K8S的串接後,除非有問題,不然我想最常作的應該就是「確認狀態」、「備份與還原」這二個動作。雖然不需要太過針對ETCD進行直接的操作,但是它是一個非常重要的關鍵物件,當K8S出了什麼問題時,真正能救你的可能就是透過還原ETCD來回復整個cluster的狀態了,所以有基本的認識還是必要的。

未來有機會將繼續分享一些整理過的心得、還原Control-Plane的實際操作。再請大家繼續關注。


Reference:

留言
avatar-img
留言分享你的想法!
avatar-img
超健忘閒人的沙龍
15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
2024/05/08
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
2024/05/08
本文將介紹如何在Gitlab上部署和註冊runner,以進行CI/CD測試。透過Docker-compose方式進行部署,同時注意安裝時的一些注意事項。建議學習者至少掌握一種以上的Pipeline工具,以滿足實務上的需求。
Thumbnail
2024/04/19
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
2024/04/19
上一篇說明了如何在Kubernetes上建立基本的MySQL standalone,並加入phpmyadmin(PMA)來進行圖形化的管理,本篇就再進階一步,實作MySQL replication架構(master-salve),並進行驗證是否成功。
Thumbnail
2024/04/09
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
2024/04/09
本文記錄如何在Kubernetes環境下,部署Standalone架構的MySQL Database,並透過phpmyadmin進行管理。這篇文章將分成MySQL部署在K8S內的優勢、部署MySQL DB standalone、部署PhpMyAdmin (PMA)、結論四個部分進行說明與實作的流程。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
這篇文章將提供一個完整的Kubernetes安裝指南,包括控制平面節點和工作節點的安裝過程。文章中還會提及一些參考資料和解決常見錯誤的方法。
Thumbnail
這篇文章將提供一個完整的Kubernetes安裝指南,包括控制平面節點和工作節點的安裝過程。文章中還會提及一些參考資料和解決常見錯誤的方法。
Thumbnail
本文介紹了在K8S Cluster出現問題時,透過ETCD的備份來還原Cluster的方法。包括ETCD的資料類型、備份、還原以及相關建議,並提出了自動進行ETCD備份作業和備份存放位置的重要性。
Thumbnail
本文介紹了在K8S Cluster出現問題時,透過ETCD的備份來還原Cluster的方法。包括ETCD的資料類型、備份、還原以及相關建議,並提出了自動進行ETCD備份作業和備份存放位置的重要性。
Thumbnail
本文將介紹如何從原廠註冊處獲得更新zip檔案,並透過SSH上傳到esxi主機,以及更新和安裝的方式。
Thumbnail
本文將介紹如何從原廠註冊處獲得更新zip檔案,並透過SSH上傳到esxi主機,以及更新和安裝的方式。
Thumbnail
仍舊是紀錄一下自己的過程,避免真的又找半天 1.準備 Console線 ( RS-232 公母接頭 ) 2.準備 USB-RS232 轉接線 ( 驅動程式 ) 3.putty ( 下載位置 ) 4.Zyxel ES3500 的帳號密碼 ( 我的預設是admin/1234 )
Thumbnail
仍舊是紀錄一下自己的過程,避免真的又找半天 1.準備 Console線 ( RS-232 公母接頭 ) 2.準備 USB-RS232 轉接線 ( 驅動程式 ) 3.putty ( 下載位置 ) 4.Zyxel ES3500 的帳號密碼 ( 我的預設是admin/1234 )
Thumbnail
前言 大家好上次講到在使用 Gitlab CI/CD 自動化佈署前,使用 Docker Compose 撰寫佈署計畫書,今天我們要將目標轉移到 Gitlab 我們要撰寫自動化上線佈署計畫書,我們之後還會講一套更完整的佈署流程,今天只是讓各位體驗,自動化佈署上線的快感 調整 CI/CD 變數 首
Thumbnail
前言 大家好上次講到在使用 Gitlab CI/CD 自動化佈署前,使用 Docker Compose 撰寫佈署計畫書,今天我們要將目標轉移到 Gitlab 我們要撰寫自動化上線佈署計畫書,我們之後還會講一套更完整的佈署流程,今天只是讓各位體驗,自動化佈署上線的快感 調整 CI/CD 變數 首
Thumbnail
前言 上次教到如何使用 scp 與 CI/CD 配合複製檔案至伺服器,今天我們要來教 CI/CD 中的 extends 指令,extends 在有些程式語言叫做繼承的意思,那在 CI/CD 中,叫做繼承工作的意思,妳也可以把它當成,CI/CD 也可以繼承工作,幫助我們在撰寫 CI/CD 腳本更加省
Thumbnail
前言 上次教到如何使用 scp 與 CI/CD 配合複製檔案至伺服器,今天我們要來教 CI/CD 中的 extends 指令,extends 在有些程式語言叫做繼承的意思,那在 CI/CD 中,叫做繼承工作的意思,妳也可以把它當成,CI/CD 也可以繼承工作,幫助我們在撰寫 CI/CD 腳本更加省
Thumbnail
接續上一篇文章,本文再深入一點關於ETCD基本操作以及在其他文章中關於ETCD節點資料不一致情況的除錯內容分享
Thumbnail
接續上一篇文章,本文再深入一點關於ETCD基本操作以及在其他文章中關於ETCD節點資料不一致情況的除錯內容分享
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News