註:筆者居住於韓國,部分內容包含韓國特有的背景。
最近 Kubernetes 似乎是一項很熱門但也很困難的技術。
我從學生時代起就運行家庭伺服器有相當一段時間了(?),在營運過程中遇到了不少麻煩事。
有時候搬家要重新規劃網路,有時候一顆硬碟壞了,每當這種情況發生,我都得翻找 Git 和其他電腦來把網站救回來,實在是……很麻煩的事情。
「要是能把我的伺服器是怎麼運行的記下來,並且隨時能夠自由地新增電腦、新增硬碟那該多好?」在這種想法下,K8S 是非常有吸引力的選擇。
於是我學習了 K8S,通常是用 Vagrant 等工具,在一台效能強勁的電腦上放一個虛擬節點,啟動虛擬機來做實習。
但問題在那之後。
不可能買好幾台桌面級家庭伺服器來跑 K8S,所以會去找便宜 && 低功耗的 PC,通常歸結到樹莓派上。
但是用慣了講師老師漂亮地準備好的安裝腳本,要在 ARM 上直接裝 K8S 真的會讓腦袋炸開。(事實上我就炸了。別人就不知道了…)
我在嘗試 KubeAdm 、MicroK8S 經歷幾次折騰後都安裝失敗了,但 K3S 安裝得相當簡便,因此想分享一下這次經驗。

以下環境基於 Raspberry pi 4B + Ubuntu Server 22.04 進行。
1. 安裝 Master Node
- 查看 K3S 官方文件
會發現,只要執行
curl -sfL https://get.k3s.io | sh -就能搞定一切的安裝! - 在 bash 中輸入
curl -sfL https://get.k3s.io | sh -進行安裝。 - 哇!安裝成功了。
- 據說 kubectl 也會一併安裝。試著輸入
kubectl get nodes。 - 哇!節點也正常顯示了。
但其實這是個陷阱。
- 把
kubectl get nodes - 咦?回應突然變慢了。
- 遇到了
The connection to the server 127.0.0.1:6443 was refused - did you specify the right host or port?這個問題。 - 啊……這也是陷阱嗎?開始不安。
- 萬幸的是,這是 Known Issue,並且有解決方法。(相關 Github Issue )
- 輸入
sudo apt install linux-modules-extra-raspi && reboot安裝額外需要的相依套件,重新啟動後再kubectl get nodes就正常了。(官方文件 Link )
2. 新增節點
既然 Master Node 已經設定好了,那就來掛上 Worker Node 吧。
輸入
kubectl get nodes,確認 Master Node 的名稱(Name)。輸入
sudo kubectl get node <master node 名稱> -ojsonpath="{.status.addresses[0].address}",確認輸出的 IP 值。(1)輸入
sudo cat /var/lib/rancher/k3s/server/node-token,確認輸出的 Token 值。(2)連線到新的 Worker Node,執行
sudo apt install linux-modules-extra-raspi && reboot來安裝相關相依套件。然後執行
curl -sfL https://get.k3s.io | K3S_URL=https://<(1)中確認的 ip>:6443 K3S_TOKEN=<(2)中確認的 token> sh -。之後在 Master Node 上輸入
kubectl get nodes,確認是否正常加入叢集。補充:Worker Node 狀態卡在 NotReady 不動的情況,讓我們來應對這種情況。
- 輸入
kubectl get nodes記下 Worker Node 的名稱。 - 輸入
sudo kubectl describe node <worker node 名稱> -n=kube-system查看目前節點的狀態。 - 我的情況是一直出現
invalid capacity 0 on image filesystem錯誤,導致 Worker Node 無法加入,重新啟動後解決了 (..)
- 輸入
結束!

Comments