使用 K3s 在樹莓派上運行 Kubernetes 集群

我對在樹莓派上搭建 Kubernetes 集群已經感興趣很長時間了,只要照著網上的教程,我可以在由三個樹莓派組成的集群中搭建一套 Kubernetes 並正常運行。但在這種情況下,主節點上的內存和 CPU 資源捉襟見肘,執行 Kubernetes 任務的時候往往性能不佳,想要升級 Kubernetes 就更不可能了。
這個時候,我非常激動地發現了 K3s 這個項目。K3s 被譽為在可用於資源受限環境下的輕量級 Kubernetes,它還針對 ARM 處理器做出了優化,這讓 Kubernetes 集群可以在樹莓派上運行得更好。在下文中,我們將會使用 K3s 來創建一個 Kubernetes 集群。
準備
要按照本文介紹的方式創建 Kubernetes 集群,首先需要準備:
- 至少一個樹莓派(包括 SD 卡和電源)
- 網線
- 將所有樹莓派連接到一起的交換機或路由器
我們會通過在線安裝的方式安裝 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.50tkmaster" | sudo tee -a /etc/hosts
echo -e "192.168.0.51tknode1" | sudo tee -a /etc/hosts
echo -e "192.168.0.52tknode2" | 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 VERSION
kmaster 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
的樹莓派上重複這個安裝過程。
通過 PC 訪問集群
現在如果我們想要查看或者更改集群,都必須 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-https
curl -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.list
sudo apt update && sudo apt install kubectl
上面幾個命令的作用是添加了一個包含 Kubernetes 的 Debian 軟體庫,獲取 GPG 密鑰以確保安全,然後更新軟體包列表並安裝 kubectl
。如果 kubectl
有更新,我們將會通過 標準軟體更新機制 收到通知。
現在在 PC 上就可以查看 Kubernetes 集群了:
kubectl get nodes
輸出大概會是這樣:
NAME STATUS ROLES AGE VERSION
kmaster Ready master 12m v1.14.3-k3s.1
knode1 Ready worker 103s v1.14.3-k3s.1
knode1 Ready worker 103s v1.14.3-k3s.1
至此,我們已經搭建了一個三節點的 Kubernetes 集群。
K3s 的彩蛋
如果執行 kubectl get pods --all-namespaces
,就會看到其它服務的一些 Pod,比如 Traefik。Traefik 在這裡起到是反向代理和負載均衡器的作用,它可以讓流量從單個入口進入集群後引導到集群中的各個服務。Kubernetes 支持這種機制,但 Kubernetes 本身不提供這個功能,因此 Traefik 是一個不錯的選擇,K3s 安裝後立即可用的優點也得益於此。
在後續的文章中,我們會繼續探討 Traefik 在 Kubernetes ingress 中的應用,以及在集群中部署其它組件。敬請關注。
via: https://opensource.com/article/20/3/kubernetes-raspberry-pi-k3s
作者:Lee Carpenter 選題:lujun9972 譯者:HankChow 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive