跟隨接下來的介紹,自己搭建一個三節點的 Kubernetes 叢集。
我對在樹莓派上搭建 Kubernetes 叢集已經感興趣很長時間了,只要照著網上的教學,我可以在由三個樹莓派組成的叢集中搭建一套 Kubernetes 並正常執行。但在這種情況下,主節點上的記憶體和 CPU 資源捉襟見肘,執行 Kubernetes 任務的時候往往效能不佳,想要升級 Kubernetes 就更不可能了。
這個時候,我非常激動地發現了 K3s 這個專案。K3s 被譽為在可用於資源受限環境下的輕量級 Kubernetes,它還針對 ARM 處理器做出了優化,這讓 Kubernetes 叢集可以在樹莓派上執行得更好。在下文中,我們將會使用 K3s 來建立一個 Kubernetes 叢集。
要按照本文介紹的方式建立 Kubernetes 叢集,首先需要準備:
我們會通過線上安裝的方式安裝 K3s,因此還需要可以連線到網際網路。
在這個叢集裡,我們會使用三個樹莓派。其中一個樹莓派作為主節點,我們將它命名為 kmaster
,並為其分配一個靜態 IP 192.168.0.50
(註:假設使用的私有網段是 192.168.0.0/24),而另外兩個樹莓派作為工作節點,分別命名為 knode1
和 knode2
,也分別分配 192.168.0.51
和 192.168.0.52
兩個 IP 地址。
當然,如果你實際的網路布局和上面不同,只要將文中所提及到的 IP 替換成你實際可用的 IP 就可以了。
為了不需要通過 IP 來參照某一個節點,我們將每個節點的主機名記錄到 PC 的 /etc/hosts
檔案當中:
echo -e "192.168.0.50\tkmaster" | sudo tee -a /etc/hostsecho -e "192.168.0.51\tknode1" | sudo tee -a /etc/hostsecho -e "192.168.0.52\tknode2" | sudo tee -a /etc/hosts
我們首先部署主節點。最開始的步驟當然是使用映象安裝最新的 Raspbian,這個步驟可以參考我的另一篇文章,在這裡就不展開介紹了。在安裝完成之後,啟動 SSH 服務,將主機名設定為 kmaster
,然後分配靜態 IP 192.168.0.50
。
在主節點上安裝 Raspbian 完成後,啟動樹莓派並通過 ssh
連線上去:
ssh pi@kmaster
在主節點上執行以下命令安裝 K3s:
curl -sfL https://get.k3s.io | sh -
等到命令跑完以後,一個單節點叢集就已經執行起來了。讓我們檢查一下,還在這個樹莓派上執行:
sudo kubectl get nodes
就會看到這樣的輸出:
NAME STATUS ROLES AGE VERSIONkmaster Ready master 2m13s v1.14.3-k3s.1
之後我們需要部署工作節點。在工作節點上安裝 K3s 的時候,會需要用到連線令牌,它放置在主節點的檔案系統上。首先把連線令牌儲存出來以便後續使用:
sudo cat /var/lib/rancher/k3s/server/node-token
通過 SD 卡在每個作為工作節點的樹莓派上安裝 Raspbian。在這裡,我們把其中一個樹莓派的主機名設定為 knode1
,為其分配 IP 地址 192.168.0.51
,另一個樹莓派的主機名設定為 knode2
,分配 IP 地址 192.168.0.52
。接下來就可以安裝 K3s 了。
啟動主機名為 knode1
的樹莓派,通過 ssh
連線上去:
ssh pi@knode1
在這個樹莓派上,安裝 K3s 的過程和之前差不多,但需要另外加上一些引數,表示它是一個工作節點,需要連線到一個已有的叢集上:
curl -sfL http://get.k3s.io | K3S_URL=https://192.168.0.50:6443 \K3S_TOKEN=剛才儲存下來的連線令牌 sh -
K3S_TOKEN
的值需要替換成剛才儲存下來的實際的連線令牌。完成之後,在主機名為 knode2
的樹莓派上重複這個安裝過程。
現在如果我們想要檢視或者更改叢集,都必須 ssh
到叢集的主節點才能使用 kubectl
,這是比較麻煩的。因此我們會將 kubectl
放到 PC 上使用。首先,在主節點上獲取一些必要的設定資訊,ssh
到 kmaster
上執行:
sudo cat /etc/rancher/k3s/k3s.yaml
複製上面命令的輸出,然後在你的 PC 上建立一個目錄用來放置組態檔:
mkdir ~/.kube
將複製好的內容寫入到 ~/.kube/config
檔案中,然後編輯該檔案,將
server: https://localhost:6443
改為
server: https://kmaster:6443
出於安全考慮,只對自己保留這個組態檔的讀寫許可權:
chmod 600 ~/.kube/config
如果 PC 上還沒有安裝 kubectl
的話,就可以開始安裝了。Kubernetes 官方網站上有各種平台安裝 kubectl
的方法說明,我使用的是 Ubuntu 的衍生版 Linux Mint,所以我的安裝方法是這樣的:
sudo apt update && sudo apt install -y apt-transport-httpscurl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee -a /etc/apt/sources.list.d/kubernetes.listsudo apt update && sudo apt install kubectl
上面幾個命令的作用是新增了一個包含 Kubernetes 的 Debian 軟體庫,獲取 GPG 金鑰以確保安全,然後更新軟體包列表並安裝 kubectl
。如果 kubectl
有更新,我們將會通過標準軟體更新機制收到通知。
現在在 PC 上就可以檢視 Kubernetes 叢集了:
kubectl get nodes
輸出大概會是這樣:
NAME STATUS ROLES AGE VERSIONkmaster Ready master 12m v1.14.3-k3s.1knode1 Ready worker 103s v1.14.3-k3s.1knode1 Ready worker 103s v1.14.3-k3s.1
至此,我們已經搭建了一個三節點的 Kubernetes 叢集。
如果執行 kubectl get pods --all-namespaces
,就會看到其它服務的一些 Pod,比如 Traefik。Traefik 在這裡起到是反向代理和負載均衡器的作用,它可以讓流量從單個入口進入叢集後引導到叢集中的各個服務。Kubernetes 支援這種機制,但 Kubernetes 本身不提供這個功能,因此 Traefik 是一個不錯的選擇,K3s 安裝後立即可用的優點也得益於此。
在後續的文章中,我們會繼續探討 Traefik 在 Kubernetes ingress 中的應用,以及在叢集中部署其它元件。敬請關注。