CKA Note Section 10 Design and Install a Kubernetes Cluster
Contents
222. Choosing Kubernetes Infrastructure
這個章節在講如何選擇 K8s 建在哪裡,知道了一個蠻有趣的名詞 Kubernetes Turnkey Cloud Solutions
223. Configure High Availability

▲ api-server 可以是 Active-Active mode,不過 kubectl config 一次只能設定一個 URL,所以建議在前面放一個 load blancer

▲ 但是 Controller Manager 與 Scheduler 就不能是 A-A mode,避免重複動作

▲ controller-manager 預設在啟動時會帶 --leader-elect true 執行搶旗,沒有搶到的節點每兩秒 (--leader-elect-retry-period) 會去看看當選人是不是死了。

▲ 搶旗方式是看誰先去更新 K8s 內的 resource kube-controller-manager(由 --leader-elect-resource-name string 定義 docs)

▲ etcd stacked topology 就是將 ETCD server 置於 master node 裡面。

▲ etcd 作為一個獨立的元件當然可以外掛,反正我們都要在 api-server config 內設定 etcd server 在哪。
224. ETCD in HA
這個章節主要討論 etcd 如何做 HA。

▲ etcd 官方網站的介紹說明 etcd 是一個 分散式且可靠的鍵值資料庫 (A distributed, reliable key-value store)

▲ etcd 每一個 node 都可以 R/W (這句話界於對與不對之間,後面會講到)

▲ 嚴格一點說起來 etcd 每個節點都能受理「寫入任務」,但只有 leader node 會執行寫入、派送的動作。

▲ 其它 follower 節點受理寫入任務後會把 transaction pass 到 leader node 身上。
OK,寫入沒問題了! 真的沒問題了嗎? leader node 要怎麼確保 transaction 合法、有效?

▲ 我們先來講講 leader 如何被選出的,etcd 使用 RAFT 的演算法來執行選舉,每個 node 身上都設有一個 random timer,時間一到就向其他節點發送類似「我可以當 leader 嗎」的請求來獲得選票取得 leader 資格。

▲ 那.. 當其中一個節點死去沒有辦法執行 transaction,這則 transaction 還有效嗎? 答案是: 只要超過 majority (quorum) 執行這則 transaction 就視為成功、合法。
官方 F&Q Why an odd number of cluster members? 提到
An etcd cluster needs a majority of nodes, a quorum, to agree on updates to the cluster state.

▲ etcd quorum 計算方式以及容錯程度 (無條件捨去),通常我們會選擇 3, 5, 7 單數作為 etcd cluster node 的數量。

▲ etcd 安裝的方式。

▲ 在 systemd service conf 設定 peer 資訊。

▲ etcd API 有分 V2 與 V3。
我的 Minikube
一直以來我的練習環境都是使用 minikube,一款由官方維護能快速打造 kubernetes multi node 的工具。本來相關資訊都是放在另外的 MD 筆記裡面,剛好跟這一個章節有關,順便整合一下好了!
minikube dashboard
Minikube 自帶 dashboard add-on 功能 會自動幫你在 host OS 開一個 proxy server 橋接運作在 docker (我 driver 選 docker) 的 control-plane。
|
|
ssh tunnel
2022.07.25 註: 因為我的 minikube VM 本來是放在 remote 某個 office 裡面,沒有在 localhost 所以必須打 tunnel 開 dashboard (或者其他需求) 會比較方便。
office WSL used. 搭配 FireFox portable 使用 (設定 SOCKS 5 proxy),即可直接以 localhost 方式連接 minikube dashboard 或者其他網頁。
|
|
這個部分我也超級久沒碰 (中間還隔了 4 個月 ROC Army = =ゞ) 所以附上科普文章 SSH Tunneling (Port Forwarding) 詳解
使用 minikube 內建的 kubectl
灌好 minikube 後使用 minikube 自帶的 kubectl
|
|
kubectl 自動補齊
2022.10.18 更新 minikube version: 1.27.1
不知道為什麼 minikube 自帶的 kubectl 一直沒辦法自動補齊,後來手動安裝 kubelet 想直接使用 kubelet 的 bash completion 卻也無法使用 (kubectl: /usr/local/bin/kubectl, source <(kubectl completion bash)) @@
變成 minikube kubelet -- completion bash 混搭手動額外安裝的 kubelet 方能使用。
|
|
▲ ~/.bashrc
echoserver 部屬
2022.07.25 註: 這邊應該是在練習 CKAD service 的時候弄的吧~
|
|
Minikube muti node cluster
|
|
Fixed profile not found issue
將現有 minikube cluster 刪除後會遇到這種情況,只需要重新指定 profile 即可。

Author
LastMod 2022-10-18 (931cd0c)