使用K3s在樹莓派上運行Kubernetes集群
跟隨接下來的介紹,自己搭建一個三節點的 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.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 的樹莓派上重復這個安裝過程。
通過 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-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 集群。
K3s 的彩蛋
如果執行 kubectl get pods --all-namespaces,就會看到其它服務的一些 Pod,比如 Traefik。Traefik 在這里起到是反向代理和負載均衡器的作用,它可以讓流量從單個入口進入集群后引導到集群中的各個服務。Kubernetes 支持這種機制,但 Kubernetes 本身不提供這個功能,因此 Traefik 是一個不錯的選擇,K3s 安裝后立即可用的優點也得益于此。



























