Linux中國

使用 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),而另外兩個樹莓派作為工作節點,分別命名為 knode1knode2,也分別分配 192.168.0.51192.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

獲取 連接令牌 join token

之後我們需要部署工作節點。在工作節點上安裝 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 上使用。首先,在主節點上獲取一些必要的配置信息,sshkmaster 上執行:

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 有更新,我們將會通過 標準軟體更新機制 standard software update mechanism 收到通知。

現在在 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

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國