探索 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
15會員
40內容數
記錄IT社畜的自我學習筆記,如同專題名稱,主要是怕自已忘記自已做過什麼、學到什麼。索性就分享我自已在學習Kubernetes這條路上的各種測試、學習心得。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
超健忘閒人的沙龍 的其他內容
建立Kubernetes cluster時,ETCD 是必不可少的元件,事實上Kubernetes所有資料都會存進ETCD store中,如果要讓Kubernetes的運行效能更好,其中一種方法是在部署之前對ETCD的性能進行優化設計。
今天來記錄版本升級的做法(z版號),Kubernetes的版本更新的很快,所以版本升級是每個管理者所必須要會的必備技能,建議版本升級之前要先去確認升級路徑,不是每個版本號都能一次升級到你需要的版本。
知道如何備份與還原ETCD才能確保當環境出現重大問題時,可以將你的環境回復回來,對於系統管理者來說,等於是救人一命。(認真來說其實也是救了你的主管一命)。
本篇說明在Kubernetes平台上的Job資源類型的類型、實務、應用場景
今天來跟大家分享如何建置容器世界的一個非常重要的元件:Image Registry。
今天簡單演示如何在Kubernetes cluster利用local-path provider建構出storage class來提供應用程式進行資料的存放。
建立Kubernetes cluster時,ETCD 是必不可少的元件,事實上Kubernetes所有資料都會存進ETCD store中,如果要讓Kubernetes的運行效能更好,其中一種方法是在部署之前對ETCD的性能進行優化設計。
今天來記錄版本升級的做法(z版號),Kubernetes的版本更新的很快,所以版本升級是每個管理者所必須要會的必備技能,建議版本升級之前要先去確認升級路徑,不是每個版本號都能一次升級到你需要的版本。
知道如何備份與還原ETCD才能確保當環境出現重大問題時,可以將你的環境回復回來,對於系統管理者來說,等於是救人一命。(認真來說其實也是救了你的主管一命)。
本篇說明在Kubernetes平台上的Job資源類型的類型、實務、應用場景
今天來跟大家分享如何建置容器世界的一個非常重要的元件:Image Registry。
今天簡單演示如何在Kubernetes cluster利用local-path provider建構出storage class來提供應用程式進行資料的存放。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇文章將提供一個完整的Kubernetes安裝指南,包括控制平面節點和工作節點的安裝過程。文章中還會提及一些參考資料和解決常見錯誤的方法。
Thumbnail
本文詳細介紹Windows cmd指令的應用,並提供了例說明及追加說明,用戶可以學習如何使用cmd指令對檔案進行處理、選取所需的內容,以及擴展運用到其他類型的檔案,最後還介紹了cmd設計完成後的應用和自動化執行方式。
Thumbnail
本篇文章介紹如何使用Git Bash進行版本控制操作,包括創建repository、查看狀態、歷程以及加入暫存和提交暫存等操作。透過基本的Git指令,您可以更深入地瞭解Git工具的使用方法。
CI 持續整合 CI目的是建立自動化專案打包。 CD 持續發表 將打包完成的專案,自動發布。
Thumbnail
GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
※ 需要做版本備份時: git init:初始化此資料夾,由git 開始追蹤版本控制。 git add:將檔案加入到暫存區。 git commit:把暫存區的內容提交到儲存庫。 git status:查看目前所有檔案的狀態。 git log:查看過去所有commit的記錄。 ※ 需要做修
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
本文將介紹如何在ESXI 8上安裝vCenter Server以及相關設定步驟,包括ISO光碟檔下載、掛載ISO、填入安裝目標、設定網域以及管理者密碼等。
Thumbnail
本文將介紹如何從原廠註冊處獲得更新zip檔案,並透過SSH上傳到esxi主機,以及更新和安裝的方式。
Thumbnail
仍舊是紀錄一下自己的過程,避免真的又找半天 1.準備 Console線 ( RS-232 公母接頭 ) 2.準備 USB-RS232 轉接線 ( 驅動程式 ) 3.putty ( 下載位置 ) 4.Zyxel ES3500 的帳號密碼 ( 我的預設是admin/1234 )
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這篇文章將提供一個完整的Kubernetes安裝指南,包括控制平面節點和工作節點的安裝過程。文章中還會提及一些參考資料和解決常見錯誤的方法。
Thumbnail
本文詳細介紹Windows cmd指令的應用,並提供了例說明及追加說明,用戶可以學習如何使用cmd指令對檔案進行處理、選取所需的內容,以及擴展運用到其他類型的檔案,最後還介紹了cmd設計完成後的應用和自動化執行方式。
Thumbnail
本篇文章介紹如何使用Git Bash進行版本控制操作,包括創建repository、查看狀態、歷程以及加入暫存和提交暫存等操作。透過基本的Git指令,您可以更深入地瞭解Git工具的使用方法。
CI 持續整合 CI目的是建立自動化專案打包。 CD 持續發表 將打包完成的專案,自動發布。
Thumbnail
GitLab為程式碼管理倉庫,且從8.0開始提供CI/CD。 安裝 更新套件索引 sudo apt update 安裝postfix sudo apt install ca-certifi​cates curl openssh-server postfix 切換目錄 cd /t
※ 需要做版本備份時: git init:初始化此資料夾,由git 開始追蹤版本控制。 git add:將檔案加入到暫存區。 git commit:把暫存區的內容提交到儲存庫。 git status:查看目前所有檔案的狀態。 git log:查看過去所有commit的記錄。 ※ 需要做修
Thumbnail
ETL是資料倉儲領域中一個重要的概念,全稱為Extract-Transform-Load,中文可譯為"抽取-轉換-載入"。ETL的作用是將來自不同來源的資料抽取出來,經過清理、轉換、整合等處理後,最終將處理好的資料載入到資料倉儲或其他單一的資料存放區
Thumbnail
本文將介紹如何在ESXI 8上安裝vCenter Server以及相關設定步驟,包括ISO光碟檔下載、掛載ISO、填入安裝目標、設定網域以及管理者密碼等。
Thumbnail
本文將介紹如何從原廠註冊處獲得更新zip檔案,並透過SSH上傳到esxi主機,以及更新和安裝的方式。
Thumbnail
仍舊是紀錄一下自己的過程,避免真的又找半天 1.準備 Console線 ( RS-232 公母接頭 ) 2.準備 USB-RS232 轉接線 ( 驅動程式 ) 3.putty ( 下載位置 ) 4.Zyxel ES3500 的帳號密碼 ( 我的預設是admin/1234 )