僅需60秒,使用k3sup快速部署高可用K3s叢集
阿新 • • 發佈:2020-05-18
> 作者簡介
>
> Dmitriy
> Akulov,連續創業者,16歲時搭建了開源CDN公共服務jsDelivr的v1版本。目前是邊緣託管平臺appfleet創始人。
>原文連結:
>
>https://ma.ttias.be/deploying-highly-available-k3s-k3sup/
## 前 言
雲原生領域正在嘗試尋找一種方法來解決在資源受限的環境中執行時Kubernetes資源消耗過多的問題。這一嘗試的結果是建立了一個輕量級Kubernetes發行版K3s,該發行版精簡了K8S的功能,可以滿足在邊緣計算環境中、在小型裝置上執行Kubernetes叢集的需求。釋出之後,K3s在社群中迅速流行,**短短几個月內Github Star已經達到10,000(目前已經超過12,000)。** 這種受歡迎程度為這一專案帶來了很大的優勢,一些社群使用者主動為K3s貢獻了周邊工具。本文中,我將介紹由Alex Ellis建立的k3sup(發音為“ketchup”),它將幫助你在基礎架構中啟動K3s。
## 什麼是k3sup?
儘管安裝K3s已經十分簡單,並且你也可以使用bash輕鬆啟動類似的程式,但是K3s的開發就是為了讓原本需要手動操作以及令人困惑的流程自動化,以節省開發人員本來就不多的時間。
當你使用你喜歡的工具配置好一個VM之後,k3sup意味著你只需要60秒即可在自己的計算機上執行kubectl get pod。在0.2.0版本中,你甚至可以將其他節點加入任何現有的K3s叢集中。
以下是在README中提到的k3sup用例:
- 將K3s的Kubernetes引導(bootstrap)到任何VM——在CI期間或通過`cloudinit`手動進行
- 在Raspberry Pi(RPi)、VM、AWS EC2、Packet裸機、DigitalOcean、Civo、Scaleway等上使用K3s直接與kubectl連線
- 從現有的K3s叢集中獲取可用的KUBECONFIG
- 使用`k3sup join`,將節點加入現有K3s叢集
## 安裝k3sup
k3sup Github:https://github.com/alexellis/k3sup
k3sup作為靜態Go二進位制檔案分發,你可以在MacOS和Linux上使用安裝程式,也可以訪問Release頁面下載適用於Windows的可執行檔案。你還能夠通過k3sup README檔案找到詳細的安裝說明。
```
$ curl -sLS https://get.k3sup.dev | sh
$ sudo install k3sup /usr/local/bin/
$ k3sup --help
```
Windows使用者請注意:你可以通過Windows Command Prompt(cmd)使用`k3sup install`和`k3sup join`命令。
## 用 法
k3sup主要在臺式機/膝上型電腦上執行,但是也提供了針對MacOS、Windows和Linux(包括ARM)的二進位制檔案。
## 使用k3sup設定K8S server
你可以設定一個server並在此處停止,或者繼續使用join命令將一些agent,或者稱為節點或worker新增到叢集中以擴充套件其計算能力。
配置一個執行在相容作業系統(如Ubuntu、Debian、Raspbian等)上的新VM,確保你選擇了將要註冊的SSH金鑰自動複製到新的VM或主機上。
> 注意:你可以使用`ssh-copy-id user@IP`將ssh金鑰遠端複製到VM上。
假設IP是`192.168.0.1`並且使用者名稱是ubuntu,然後你可以執行以下命令:
執行k3sup:
```
$ export IP=192.168.0.1
$ k3sup install --ip $IP --user ubuntu
```
現在嘗試訪問:
```
$ export KUBECONFIG=`pwd`/kubeconfig
$ kubectl get node
```
## 加入一些agent到K8S server
假設你有一臺server,並且已經執行以下內容:
```
$ export SERVER_IP=192.168.0.100
$ export USER=root
$ k3sup install --ip $SERVER_IP --user $USER
```
接下來,加入一個或更多的agent到叢集中:
```
$ export AGENT_IP=192.168.0.101
$ export SERVER_IP=192.168.0.100
$ export USER=root
$ k3sup join --ip $AGENT_IP --server-ip $SERVER_IP --user $USER
```
大功告成!因此,無論使用的是本地VM、Raspberry Pi、64位ARM還是EC2上的Cloud VM,使用以上命令你都可以啟動並執行兩個節點的叢集。
## 建立multi-master(HA)設定
從k3s 1.0開始,可通過sqlite獲得HA multi-master配置,這將需要quorum的master,這意味著至少具有三個節點。
用第一臺server初始化叢集,請注意`--cluster`標誌:
```
$ export SERVER_IP=192.168.0.100
$ export USER=root
$ k3sup install \
--ip $SERVER_IP \
--user $USER \
--cluster
```
加入額外的server,注意新的`--server`標誌:
```
$ export USER=root
$ export SERVER_IP=192.168.0.100
$ export NEXT_SERVER_IP=192.168.0.101
$ k3sup join \
--ip $NEXT_SERVER_IP \
--user $USER \
--server-user $USER \
--server-ip $SERVER_IP \
--server
```
現在檢查`kubectl get node`:
```
$ kubectl get node
NAME STATUS ROLES AGE VERSION
paprika-gregory Ready master 8m27s v1.16.3-k3s.2
cave-sensor Ready master 27m v1.16.3-k3s.2
```
## 在樹莓派上部署K8S(2、3或4版本均適用)
完成以下步驟後,你將在樹莓派2、3或4上啟動一個Kubernetes,並且安裝迅速。最後,你將在本地計算機上擁有一個KUBECONFIG檔案,可用於遠端訪問叢集。
![圖片來源:k3sup README](https://img-blog.csdnimg.cn/20200518110112291.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JhbmNoZXJMYWJz,size_16,color_FFFFFF,t_70#pic_center)
具體步驟:
- 為你的作業系統下載etcher.io
- 使用Raspbian Lite flash你的SD卡
- 在啟動分割槽中通過建立一個名為ssh的空檔案啟動SSH
- 如果你還沒有ssh-keygen,請生成一個ssh-key
- 使用ping -c raspberrypi.local尋找RPi IP,然後使用IP設定`export SERVER_IP=""`
- 使用`ssh-copy-id [email protected]`複製你的ssh金鑰
- 執行命令`k3sup install --ip $SERVER_IP --user pi`
- 指向配置檔案並獲取節點的狀態:
```
$ export KUBECONFIG=`pwd`/kubeconfig
$ kubectl get node -o wide
```
現在,你可以從你的膝上型電腦使用kubectl訪問執行K3s的樹莓派。如果你想加入一些節點,為每個附加的RPi執行`export IP=""`,如下:
```
$ k3sup join --ip $IP --server-ip $SERVER_IP --user pi
```
## 下一步
現在下一步呢?這完全取決於你。這是一個快速發展的專案,每天都有更多更新的內容問世。你可以嘗試檢視可以將哪些標誌和配置合併到叢集中以demo該工具,甚至嘗試在Github repo中貢獻內容。