今天要提到的是KubeEdge的安裝,下面表格是測試環境。
Kubernetes | KubeEdge | docker | go | |
---|---|---|---|---|
Cloud | v1.15.3 | v1.4.0 | 19.03.6 | 1.13.12 |
Edge | X | v1.4.0 | 19.03.12 | 1.13.12 |
在cloud端要有一個Kubernetes環境,edge端不需要加入Kubernetes叢集中;KubeEdge版本我們選擇1.4.0版本,go版本是1.13.12。 | ||||
我的硬體環境如下: |
節點名稱 | 作業系統 | 角色 | IP |
---|---|---|---|
k8s-node01 | ubuntu 18.04 | cloud | 192.168.0.3 |
raspberrypi | Raspbian GNU/Linux 10 (buster) | edge | 192.168.0.7 |
Docker以及Kubernetes的安裝在第三天的文章中有提過,這裡說明的是Kubeedge的安裝。
相比於KubeEdge前幾版本的安裝,在1.4版本簡化了很多程序,包含設定檔案的修改以及鑰匙複製步驟都有省略。
# 下載go
wget https://golang.org/dl/go1.13.12.linux-amd64.tar.gz
# 解壓縮go後,會產生一個go資料夾。執行檔會在go/bin底下(可以參考下圖)
tar xzvf go1.13.12.linux-amd64.tar.gz
# 將執行檔路徑加入系統路徑中
vim ~/.bashrc
將go路徑加入系統路徑中
# ~/.bashrc
# 以上圖中的路徑為例
export PATH=/home/alan/go/bin:$PATH
退出後重新source一下
source ~/.bashrc
# 測試
go version
下載keadm
# 下載keadm
wget https://github.com/kubeedge/kubeedge/releases/download/v1.4.0/keadm-v1.4.0-linux-amd64.tar.gz
# 解壓縮
tar xzvf keadm-v1.4.0-linux-amd64.tar.gz
裡面的資料夾內容很單純,解壓縮後資料夾底部有一個keadm執行檔。
接著初始化KubeEdge。
sudo ./keadm init --advertise-address=192.168.0.3 --kube-config=/home/alan/.kube/config
上面那串是我執行時的使用參數。
# cloud_core log
/var/log/kubeedge/cloudcore.log
相比於前幾個版本的KubeEdge而言,1.4版本的憑證取得方式相當親民,透過下面指令可以取得一組token,我們在edgecore註冊時會用到
sudo ./keadm gettoken --kube-config=/home/alan/.kube/config
--kube-config同樣填上kubernetes config檔案位置
樹梅派版本的Docker安裝非常簡單:
curl -sSL https://get.docker.com | sh
只要一行就完成了,可以將pi這個使用者加入使用docker權限的群組:
sudo usermod -aG docker pi
以後使用docker的時候就不需要再利用super user權限(sudo)
這部分和在cloud端安裝go幾乎一樣,但因為我是使用樹梅派所以必須選擇對應系統架構(ARM)的go
wget https://golang.org/dl/go1.13.12.linux-armv6l.tar.gz
tar xzvf go1.13.12.linux-armv6l.tar.gz
解壓縮後加入系統路徑(可以參考下面兩張圖)
下載keadm,要注意的是需要下載符合ARM架構的安裝包
wget https://github.com/kubeedge/kubeedge/releases/download/v1.4.0/keadm-v1.4.0-linux-arm.tar.gz
解壓縮之後,裡面的目錄結構和在cloud安裝時一模一樣,所以直接到目錄底部執行:
sudo ./keadm join --cloudcore-ipport=<Cloud節點IP>:10000 --edgenode-name=<你要註冊在Cloud節點上的名字> --token=<在cloud安裝時最後一步驟取得的一大串token>
這裡需要幾個參數:
參考圖片
完成後會看到類似這樣的畫面
如果要查看edgecore的log或是服務狀態可以透過service查看:
最後回到cloud端查看所有節點:
kubectl get nodes
就會看到節點已經部屬完成了。裡面的raspberrypi就是忘記給edgenode-name時系統命名的。
因為之前有用過kubeedge v1.2版本,在kubeedge中存放公私鑰的地方都都是固定的(/etc/kuebedge/ca, /etc/kubeedge/certs),所以改安裝1.4版本的時候cloudcore生成鑰匙時就遇到這個問題:
E0911 17:09:15.562992 9428 server.go:297] failed to sign a certificate, error: failed to parse ECPrivateKey, err: x509: failed to parse EC private key: asn1: structure error: tags don't match (16 vs {class:0 tag:4 length:76 isCompound:true}) {optional:false explicit:false application:false private:false defaultValue:<nil> tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false} ecPrivateKey @2
F0911 17:09:15.563016 9428 cloudhub.go:72] failed to parse ECPrivateKey, err: x509: failed to parse EC private key: asn1: structure error: tags don't match (16 vs {class:0 tag:4 length:76 isCompound:true}) {optional:false explicit:false application:false private:false defaultValue:<nil> tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false} ecPrivateKey @2
後來參考了這個issue解決了這個問題,節錄這個issue裡面提到的解決方法:
I think you use x509 files generated in kubeedge-v1.2.
you can try to remove /etc/kubeedge/ca and /etc/kubeedge/certs both cloud and edge side, delete all secreat in kubeedge ns of K8S.
Then, restart cloudcore, configure edgecore's token and restart edgecore
簡單來說就是把cloud跟edge上面/etc/kubeedge/ca跟/etc/kubeedge/certs目錄刪掉;在cloud清理掉所有的secrets(kubectl delete secrets --all)之後重新依序在cloud和edge初始化KubeEdge(keadm init),記得要先停止原本的核心服務(keadm reset)