使用K3s在樹莓派上運(yùn)行Kubernetes集群
跟隨接下來的介紹,自己搭建一個三節(jié)點(diǎn)的 Kubernetes 集群。
我對在樹莓派上搭建 Kubernetes 集群已經(jīng)感興趣很長時間了,只要照著網(wǎng)上的教程,我可以在由三個樹莓派組成的集群中搭建一套 Kubernetes 并正常運(yùn)行。但在這種情況下,主節(jié)點(diǎn)上的內(nèi)存和 CPU 資源捉襟見肘,執(zhí)行 Kubernetes 任務(wù)的時候往往性能不佳,想要升級 Kubernetes 就更不可能了。
這個時候,我非常激動地發(fā)現(xiàn)了 K3s 這個項目。K3s 被譽(yù)為在可用于資源受限環(huán)境下的輕量級 Kubernetes,它還針對 ARM 處理器做出了優(yōu)化,這讓 Kubernetes 集群可以在樹莓派上運(yùn)行得更好。在下文中,我們將會使用 K3s 來創(chuàng)建一個 Kubernetes 集群。
準(zhǔn)備
要按照本文介紹的方式創(chuàng)建 Kubernetes 集群,首先需要準(zhǔn)備:
- 至少一個樹莓派(包括 SD 卡和電源)
- 網(wǎng)線
- 將所有樹莓派連接到一起的交換機(jī)或路由器
我們會通過在線安裝的方式安裝 K3s,因此還需要可以連接到互聯(lián)網(wǎng)。
集群概覽
在這個集群里,我們會使用三個樹莓派。其中一個樹莓派作為主節(jié)點(diǎn),我們將它命名為 kmaster
,并為其分配一個靜態(tài) IP 192.168.0.50
(注:假設(shè)使用的私有網(wǎng)段是 192.168.0.0/24),而另外兩個樹莓派作為工作節(jié)點(diǎn),分別命名為 knode1
和 knode2
,也分別分配 192.168.0.51
和 192.168.0.52
兩個 IP 地址。
當(dāng)然,如果你實(shí)際的網(wǎng)絡(luò)布局和上面不同,只要將文中所提及到的 IP 替換成你實(shí)際可用的 IP 就可以了。
為了不需要通過 IP 來引用某一個節(jié)點(diǎn),我們將每個節(jié)點(diǎn)的主機(jī)名記錄到 PC 的 /etc/hosts
文件當(dāng)中:
echo -e "192.168.0.50\tkmaster" | sudo tee -a /etc/hosts
echo -e "192.168.0.51\tknode1" | sudo tee -a /etc/hosts
echo -e "192.168.0.52\tknode2" | sudo tee -a /etc/hosts
部署主節(jié)點(diǎn)
我們首先部署主節(jié)點(diǎn)。最開始的步驟當(dāng)然是使用鏡像安裝最新的 Raspbian,這個步驟可以參考我的另一篇文章,在這里就不展開介紹了。在安裝完成之后,啟動 SSH 服務(wù),將主機(jī)名設(shè)置為 kmaster
,然后分配靜態(tài) IP 192.168.0.50
。
在主節(jié)點(diǎn)上安裝 Raspbian 完成后,啟動樹莓派并通過 ssh
連接上去:
ssh pi@kmaster
在主節(jié)點(diǎn)上執(zhí)行以下命令安裝 K3s:
curl -sfL https://get.k3s.io | sh -
等到命令跑完以后,一個單節(jié)點(diǎn)集群就已經(jīng)運(yùn)行起來了。讓我們檢查一下,還在這個樹莓派上執(zhí)行:
sudo kubectl get nodes
就會看到這樣的輸出:
NAME STATUS ROLES AGE VERSION
kmaster Ready master 2m13s v1.14.3-k3s.1
獲取連接令牌
之后我們需要部署工作節(jié)點(diǎn)。在工作節(jié)點(diǎn)上安裝 K3s 的時候,會需要用到連接令牌,它放置在主節(jié)點(diǎn)的文件系統(tǒng)上。首先把連接令牌保存出來以便后續(xù)使用:
sudo cat /var/lib/rancher/k3s/server/node-token
部署工作節(jié)點(diǎn)
通過 SD 卡在每個作為工作節(jié)點(diǎn)的樹莓派上安裝 Raspbian。在這里,我們把其中一個樹莓派的主機(jī)名設(shè)置為 knode1
,為其分配 IP 地址 192.168.0.51
,另一個樹莓派的主機(jī)名設(shè)置為 knode2
,分配 IP 地址 192.168.0.52
。接下來就可以安裝 K3s 了。
啟動主機(jī)名為 knode1
的樹莓派,通過 ssh
連接上去:
ssh pi@knode1
在這個樹莓派上,安裝 K3s 的過程和之前差不多,但需要另外加上一些參數(shù),表示它是一個工作節(jié)點(diǎn),需要連接到一個已有的集群上:
curl -sfL http://get.k3s.io | K3S_URL=https://192.168.0.50:6443 \
K3S_TOKEN=剛才保存下來的連接令牌 sh -
K3S_TOKEN
的值需要替換成剛才保存下來的實(shí)際的連接令牌。完成之后,在主機(jī)名為 knode2
的樹莓派上重復(fù)這個安裝過程。
通過 PC 訪問集群
現(xiàn)在如果我們想要查看或者更改集群,都必須 ssh
到集群的主節(jié)點(diǎn)才能使用 kubectl
,這是比較麻煩的。因此我們會將 kubectl
放到 PC 上使用。首先,在主節(jié)點(diǎn)上獲取一些必要的配置信息,ssh
到 kmaster
上執(zhí)行:
sudo cat /etc/rancher/k3s/k3s.yaml
復(fù)制上面命令的輸出,然后在你的 PC 上創(chuàng)建一個目錄用來放置配置文件:
mkdir ~/.kube
將復(fù)制好的內(nèi)容寫入到 ~/.kube/config
文件中,然后編輯該文件,將
server: https://localhost:6443
改為
server: https://kmaster:6443
出于安全考慮,只對自己保留這個配置文件的讀寫權(quán)限:
chmod 600 ~/.kube/config
如果 PC 上還沒有安裝 kubectl
的話,就可以開始安裝了。Kubernetes 官方網(wǎng)站上有各種平臺安裝 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
有更新,我們將會通過標(biāo)準(zhǔn)軟件更新機(jī)制收到通知。
現(xiàn)在在 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
至此,我們已經(jīng)搭建了一個三節(jié)點(diǎn)的 Kubernetes 集群。
K3s 的彩蛋
如果執(zhí)行 kubectl get pods --all-namespaces
,就會看到其它服務(wù)的一些 Pod,比如 Traefik。Traefik 在這里起到是反向代理和負(fù)載均衡器的作用,它可以讓流量從單個入口進(jìn)入集群后引導(dǎo)到集群中的各個服務(wù)。Kubernetes 支持這種機(jī)制,但 Kubernetes 本身不提供這個功能,因此 Traefik 是一個不錯的選擇,K3s 安裝后立即可用的優(yōu)點(diǎn)也得益于此。