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中國

    Linux中國

    捐贈 Let's Encrypt,共建安全的互聯網

    隨著 Mozilla、蘋果和谷歌對沃通和 StartCom 這兩家 CA 公司處罰落定,很多使用這兩家 CA 所簽發證書的網站紛紛尋求新的證書籤發商。有一個非盈利組織可以為大家提供了免費、可靠和安全的 SSL 證書服務,這就是 Let's Encrypt 項目。現在,它需要您的幫助
    Linux中國

    關於Linux防火牆iptables的面試問答

    Nishita Agarwal是Tecmint的用戶,她將分享關於她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,因此她想分享這些關於iptables的問題和相應的答案給那些以後可能會進行相關面試的人。 所有的問題和相應的答案都基於Nishita Agarwal的記憶並經過了重寫。 嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,並將供職於印度的P
    Linux中國

    Lets Encrypt 已被所有主流瀏覽器所信任

    旨在讓每個網站都能使用 HTTPS 加密的非贏利組織 Lets Encrypt 已經得了 IdenTrust的交叉簽名,這意味著其證書現在已經可以被所有主流的瀏覽器所信任。從這個裡程碑事件開始,訪問者訪問使用了Lets Encrypt 證書的網站不再需要特別配置就可以得到 HTTPS 安全保護了。 Lets Encrypt 的兩個中級證書 ...