On this page
無額外部署機器之安裝流程
透過交互安裝方式進行叢集建置
本章節說明在沒有額外部署主機 (即所有機器皆為 Kubernetes 叢集節點) 的特殊情境下,如何透過交互安裝的方式完成叢集建置。在此範例中,我們將以 3 節點 (1 Master, 2 Worker) 的架構進行說明。
重要注意事項
部署限制
此方式無法部署三節點控制平面高可用架構。原因在於初始安裝時僅有 2 台主機 (偶數),無法滿足 etcd 叢集需為奇數節點的要求。若需要三節點控制平面,仍需準備額外獨立的部署主機。
Image Registry
在此交互安裝的架構下,強烈建議使用外部 Image Registry (如 Harbor)。
若使用 Koffline Container 內建的 Built-in Registry,會遇到 Image IP 更換 的問題:
- 當部署來源從 Worker 2 轉移至 Master 1 時,Registry 的 IP 位址也會隨之改變。
- 這將導致在部署 Worker 2 時,系統仍嘗試連線舊的 IP (原 Worker 2) 抓取鏡像,造成抓不到鏡像 (Image Pull Error) 的錯誤。
因此, 正式環境安裝時為避免因 Image 拉取 URL 變換導致的部署失敗,請務必使用外部 Image Registry。
階段一:由 Worker 2 發起安裝
首先,請在 Worker 2 上依照標準程序進行操作,將 Master 1 (master1) 與 Worker 1 (worker1) 加入叢集。
- 先將 Master 1 與 Worker 1 加入到 hosts.yml,並執行安裝指令
all:
vars:
ansible_user: <部署專用帳號>
hosts:
master1:
ansible_host: <Master Node IP>
ip: <Master Node IP>
access_ip: <Master Node IP>
worker1:
ansible_host: <Worker Node 1 IP>
ip: <Worker Node 1 IP>
access_ip: <Worker Node 1 IP>
children:
kube_control_plane:
hosts:
master1:
kube_node:
hosts:
worker1:
etcd:
hosts:
master1:
k8s_cluster:
children:
kube_control_plane:
kube_node:
calico_rr:
hosts: {}
- 參考 安裝 & 建置 文件,在
Worker 2上執行安裝指令。
cd /kubespray && ansible-playbook \
-e "unsafe_show_logs=true" -e "update_repo_cache=false" -i /inventory/hosts.yml \
--private-key /root/.ssh/id_rsa cluster.yml -v -b -K
階段二:驗證與清理
待安裝完成後,請進行以下驗證與清理步驟:
- 驗證 Master 1:確認 Master 1 已安裝成功且 Kubernetes 服務正常運作。
- 清理 Worker 2:回到 Worker 2,刪除相關的 Image 與 Koffline Container,避免安裝過程中異常。
# 範例指令 (請依實際狀況調整)
sudo /usr/local/bin/nerdctl rm -f koffline
sudo /usr/local/bin/nerdctl rmi <koffline-image-name>
階段三:由 Master 1 反向安裝 Worker 2
接著我們將操作轉移至 Master 1,將 Worker 2 安裝回叢集中。
在此步驟中,務必在 Master 1 上重新執行 gen-inventory.sh。這是為了確保能正確抓取並更新 Package 與 Image 的下載 URL,使其指向新的拉取來源(Master 1)。
- 關於生成設定檔的詳細說明,請參考 部署參數調整。
# 在Master 1 的 Koffline Container 內執行
/outputs/gen-inventory.sh
將 worker2 加入到 hosts.yml
all:
vars:
ansible_user: <部署專用帳號>
hosts:
master1:
ansible_host: <Master Node IP>
ip: <Master Node IP>
access_ip: <Master Node IP>
worker1:
ansible_host: <Worker Node 1 IP>
ip: <Worker Node 1 IP>
access_ip: <Worker Node 1 IP>
worker2:
ansible_host: <Worker Node 2 IP>
ip: <Worker Node 2 IP>
access_ip: <Worker Node 2 IP>
children:
kube_control_plane:
hosts:
master1:
kube_node:
hosts:
worker1:
worker2:
etcd:
hosts:
master1:
k8s_cluster:
children:
kube_control_plane:
kube_node:
calico_rr:
hosts: {}
接著執行安裝指令,請務必加上 --limit 參數以限制僅部署 Worker 2 (worker2),避免影響已運作的節點。
cd /kubespray && ansible-playbook \
-e "unsafe_show_logs=true" -e "update_repo_cache=false" -i /inventory/hosts.yml \
--private-key /root/.ssh/id_rsa cluster.yml -v -b -K --limit "worker2"
Was this page helpful?