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

使用 K3s 在樹莓派上運行 Kubernetes 集群 | Linux 中國

跟隨接下來的介紹,自己搭建一個三節點的 Kubernetes 集群。-- Lee Carpenter(作者)

我對在樹莓派上搭建 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 文件當中:

<code>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/<code>

部署主節點

我們首先部署主節點。最開始的步驟當然是使用鏡像安裝最新的 Raspbian,這個步驟可以參考我的 另一篇文章 ,在這裡就不展開介紹了。在安裝完成之後,啟動 SSH 服務,將主機名設置為 kmaster,然後分配靜態 IP 192.168.0.50。

在主節點上安裝 Raspbian 完成後,啟動樹莓派並通過 ssh 連接上去:

<code>ssh pi@kmaster/<code>

在主節點上執行以下命令安裝 K3s:

<code>curl -sfL https://get.k3s.io | sh -/<code>

等到命令跑完以後,一個單節點集群就已經運行起來了。讓我們檢查一下,還在這個樹莓派上執行:

<code>sudo kubectl get nodes/<code>

就會看到這樣的輸出:

<code>NAME     STATUS   ROLES    AGE    VERSION
kmaster  Ready    master   2m13s  v1.14.3-k3s.1/<code>

獲取 連接令牌(join token)

之後我們需要部署工作節點。在工作節點上安裝 K3s 的時候,會需要用到連接令牌,它放置在主節點的文件系統上。首先把連接令牌保存出來以便後續使用:

<code>sudo cat /var/lib/rancher/k3s/server/node-token/<code>

部署工作節點

通過 SD 卡在每個作為工作節點的樹莓派上安裝 Raspbian。在這裡,我們把其中一個樹莓派的主機名設置為 knode1,為其分配 IP 地址 192.168.0.51,另一個樹莓派的主機名設置為 knode2,分配 IP 地址 192.168.0.52。接下來就可以安裝 K3s 了。

啟動主機名為 knode1 的樹莓派,通過 ssh 連接上去:

<code>ssh pi@knode1/<code>

在這個樹莓派上,安裝 K3s 的過程和之前差不多,但需要另外加上一些參數,表示它是一個工作節點,需要連接到一個已有的集群上:

<code>curl -sfL http://get.k3s.io | K3S_URL=https://192.168.0.50:6443 \\
K3S_TOKEN=剛才保存下來的連接令牌 sh -/<code>

K3S_TOKEN 的值需要替換成剛才保存下來的實際的連接令牌。完成之後,在主機名為 knode2 的樹莓派上重複這個安裝過程。

通過 PC 訪問集群

現在如果我們想要查看或者更改集群,都必須 ssh 到集群的主節點才能使用 kubectl,這是比較麻煩的。因此我們會將 kubectl 放到 PC 上使用。首先,在主節點上獲取一些必要的配置信息,ssh 到 kmaster 上執行:

<code>sudo cat /etc/rancher/k3s/k3s.yaml/<code>

複製上面命令的輸出,然後在你的 PC 上創建一個目錄用來放置配置文件:

<code>mkdir ~/.kube/<code>

將複製好的內容寫入到 ~/.kube/config 文件中,然後編輯該文件,將

<code>server: https://localhost:6443/<code>

改為

<code>server: https://kmaster:6443/<code>

出於安全考慮,只對自己保留這個配置文件的讀寫權限:

<code>chmod 600 ~/.kube/config/<code>

如果 PC 上還沒有安裝 kubectl 的話,就可以開始安裝了。Kubernetes 官方網站上有各種平臺安裝 kubectl 的 方法說明 ,我使用的是 Ubuntu 的衍生版 Linux Mint,所以我的安裝方法是這樣的:

<code>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/<code>

上面幾個命令的作用是添加了一個包含 Kubernetes 的 Debian 軟件庫,獲取 GPG 密鑰以確保安全,然後更新軟件包列表並安裝 kubectl。如果 kubectl 有更新,我們將會通過 標準軟件更新機制(standard software update mechanism)收到通知。

現在在 PC 上就可以查看 Kubernetes 集群了:

<code>kubectl get nodes/<code>

輸出大概會是這樣:

<code>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/<code>

至此,我們已經搭建了一個三節點的 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中國 榮譽推出


分享到:


相關文章: