KubeEdge 1.2.0 部署

本文介紹瞭如何在兩臺 ubuntu 16.04 64 bit 雙核 CPU 虛擬機上從源碼開始部署 KubeEdge 1.2.0 集羣的過程,雲端 Kubernetes 版本爲 1.17.3,Golang 版本爲1.12.4。本文基於 KubeEdge 1.1.0 部署文章,具有一定實踐參考意義。

一、概述

1.1 環境

雲端:ubuntu 16.04 64 bit,用戶名爲 ubuntu。IP 爲 192.168.0.102。
邊緣端:同上,IP 爲 192.168.0.140。
KubeEdge部署涉及兩端:

  • 雲端
    docker, kubernetes 集羣和 KubeEdge 雲端核心模塊。
  • 邊緣端
    docker, mqtt 和 KubeEdge 邊緣端核心模塊。

1.2 依賴

依賴組件(含工具、編譯器)及版本:

  • golang
    版本 1.12.14,到 https://studygolang.com/dl 下載。編譯源碼需要,如果不編譯,則無須安裝。需要指出的是,KubeEdge 對 golang 版本有兼容性,當前官方源碼的 master 分支已經支持 1.13 版本 golang,但本文依舊使用 1.12。
  • k8s 版本
    1.17,具體部署參考其它文章。根據當前官方文檔,已經支持 1.17 版本了。
  • mosquitto
    1.6.8, 到 https://mosquitto.org/download/ 下載。
  • KubeEdge 相關的(雲端、邊緣端)
    最新發布版本爲 v1.2.0, 到 https://github.com/kubeedge/kubeedge/releases/tag/v1.2.0 下載。代碼倉庫爲 https://github.com/kubeedge/kubeedge/ 。
    注意,github並不是一直都十分穩定,所以下載可能會較耗時。

本文部署時間約爲2020年2月中下旬。需注意時間有效性。僅針對 KubeEdge 1.2.0 有效。

1.3 方法論

最權威的莫過於 KubeEdge 官方安裝文檔:https://docs.kubeedge.io/en/latest/setup/setup.html 。該文檔從源碼編譯到安裝,均有涉及。然作爲初學者,個人認爲官方的文檔還不夠細緻。網上也有很多安裝部署教程,雖然方法不同,但目的是一樣的。這裏根據筆者經驗簡述如下:

  • 步步爲營
    根據官方文檔安裝,先產生證書,再編譯源碼得到雲端和邊緣端核心程序。再修改配置文件,最後運行。

  • 事預則立
    下載官方編譯好的二進制文件(cloudcore、edgecore),或者自行編譯源碼得到這兩個二進制文件。準備好配置文件(並做適應性修改)。然後再運行。本文采用此方式。先準備好所有的文件,並統一放置到部署工程目錄。

需要注意的是,KubeEdge 官方文檔只涉及 KubeEdge 有關的部署,KubeEdge 還要依賴 docker 和 kubernetes(邊緣端還要依賴 mosquitto)。而這些需要實踐者額外進行,爲減少篇幅,本文不過多涉及,但給出部署文章鏈接。

1.4 新版本主要變化

1.2.0 版本的雲邊端配置由各自的程序生成默認的配置,再手動修改,相比 1.1.0 版本方便很多。
新版本的邊緣端默認自動註冊雲端(需在配置文件中指定雲端IP)。
新版本加強了異步通信。

二、準備

2.1 創建部署文件目錄

官方文檔建議創建單獨的目錄存儲二進制文件,如~/cmd/,在部署 1.1.0 版本時筆者也創建目錄,但新版本做了優化,筆者認爲無須部署目錄,故省略。

2.2 KubeEdge 二進制

本文使用的 KubeEdge 是從源碼編譯得到。

2.2.1 官方編譯好的文件

到 https://github.com/kubeedge/kubeedge/releases 下載官方編譯好的二進制。壓縮包名稱爲 kubeedge-v1.2.0-linux-amd64.tar.gz 。
也可以通過編譯源碼得到,方法參考文後。
另外,除了編譯好的二進制外,還需要下載源碼,地址爲: https://github.com/kubeedge/kubeedge 。因爲部分配置文件只在倉庫源碼中才可找到(當然,也可以直接在 github 倉庫上找到對應的文件下載)。

2.2.2 KubeEdge 源碼編譯

1、Golang 環境搭建
下載好 golang,並解壓:

# mkdir ~/tools
# tar xf go1.12.14.linux-amd64.tar.gz -C ~/tools

在 ~/.bashrc 文件最後添加:

export PATH=$PATH:/home/ubuntu/tools/go/bin
export GOROOT=/home/ubuntu/kubeedge
export GOPATH=/home/ubuntu/kubeedge

執行 source ~/.bashrc 生效。驗證:

# ubuntu@ubuntu:~/kubeedge$ go version
go version go1.12.14 linux/amd64

2、克隆倉庫:

# git clone https://github.com/kubeedge/kubeedge.git $GOPATH/src/github.com/kubeedge/kubeedge

如果克隆速度慢,可以直接下載zip包,並解壓源碼到 $GOPATH/src/github.com/kubeedge/kubeedge,注意,這個目錄一定是源碼所在目錄。
切換 1.2.0 分支:

# git checkout -b release-1.2 remotes/origin/release-1.2

3、檢測 gcc 版本:

# gcc --version
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609
Copyright (C) 2015 Free Software Foundation, Inc.

如果沒有安裝 gcc,則自行安裝。

編譯雲端:

# cd $GOPATH/src/github.com/kubeedge/kubeedge/
# make all WHAT=cloudcore  (注:進行coloud目錄,執行make cloudcore 也可以,下類似)

編譯邊緣端:

# cd $GOPATH/src/github.com/kubeedge/kubeedge
# make all WHAT=edgecore

2.3 生成證書

# $GOPATH/src/github.com/kubeedge/kubeedge/build/tools/certgen.sh genCertAndKey edge

ca 和 certs 分別位於 /etc/kubeedge/ca 和 /etc/kubeedge/certs 目錄。

2.4 創建設備模塊和設備CRD yaml 文件

# cd $GOPATH/src/github.com/kubeedge/kubeedge/build/crds/devices
# kubectl create -f devices_v1alpha1_devicemodel.yaml
# kubectl create -f devices_v1alpha1_device.yaml

# cd $GOPATH/src/github.com/kubeedge/kubeedge/build/crds/reliablesyncs
# kubectl create -f cluster_objectsync_v1alpha1.yaml
# kubectl create -f objectsync_v1alpha1.yaml

注:新版本的 yaml 文件有兩類,在 devices 和 reliablesyncs 目錄。

2.6 配置雲端節點

新版本配置文件由 cloudcore 程序生成,執行:

# cd $GOPATH/src/github.com/kubeedge/kubeedge/
# mkdir -p /etc/kubeedge/config/ 
# ./cloudcore --minconfig > /etc/kubeedge/config/cloudcore.yaml 

注1:cloudcore --minconfig生成最小配置,類似有cloudcore --defaultconfig
注2:cloudcore 默認使用的配置文件爲/etc/kubeedge/config/cloudcore.yaml
邊緣端類似,下省略。

接着修改配置文件:

# vim /etc/kubeedge/config/cloudcore.yaml 

官方默認爲kubeconfig: "/root/.kube/config",本文改爲 kubeconfig: "/home/ubuntu/.kube/config"。其它保持默認。

2.7 配置邊緣節點

新版本配置文件由 edgecore 程序生成,因此,需要在邊緣端機器上執行。具體參考下文。

2.8 mqtt

mqtt 只有邊緣端需要
如果邊緣端爲 ubuntu 系統,直接使用源安裝:

# add-apt-repository ppa:mosquitto-dev/mosquitto-ppa // 添加源
# apt-get update // 更新
# apt-get install mosquitto // 安裝

也可以使用源碼編譯。

2.9 Docker 和 kubernetes

Docker 安裝可參考這裏,kubernetes 安裝可參考這裏。需要指出的是,kubernetes 只部署 master 即可,node 無須部署。但必須安裝網絡插件(此處存疑,如果不安裝,狀態不是 Ready)。

三、部署

前面已經準備好了文件,直接部署就方便很多。注意,需要將證書和邊緣端和文件拷貝到邊緣機器上。方式多種,建議使用 scp 命令。前提是安裝了 SSH 協議。在邊緣端機器上執行拷貝(也稱爲分發)示例

# mkdir -p /etc/kubeedge ~/kubeedge/edge
# scp -r 192.168.0.102:/etc/kubeedge/* /etc/kubeedge
# scp -r 192.168.0.102:/home/ubuntu/kubeedge/src/github.com/kubeedge/kubeedge/edge/edgecore ~/kubeedge/edge/

注1:此操作在邊緣端機器上,非雲端。
注2:此處直接將雲端位於/etc目錄的證書拷貝到邊緣端機器的 /etc/kubeedge 目錄。將邊緣端文件拷貝到 ~/kubeedge/edge/ 目錄。
筆者配置了 SSH 允許 root 登陸,並添加了公鑰。所以無須輸入密碼。如無此方式,可手動拷貝。

3.1 雲端

3.1.1 部署 k8s 集羣

查看節點狀態:

# kubectl get node
NAME            STATUS     ROLES    AGE   VERSION
latelee-master  Ready      master   2m   v1.17.0

此刻只有雲端節點就緒。

3.1.3 運行雲端核心

# cd $GOPATH/src/github.com/kubeedge/kubeedge/
# ./cloudcore   // 建議先如此,方便觀察日誌

3.2 邊緣端

進入邊緣端機器的部署工程目錄:

# cd ~/kubeedge/edge

運行邊緣端核心:

# ./edgecore // 建議先如此,方便觀察日誌

運行 mqtt :

# mosquitto -d -p 1883

3.3 驗證

在雲端查看狀態:

# kubectl get nodes
NAME           STATUS   ROLES    AGE   VERSION
latelee-master Ready    master   49m   v1.17.3
latelee-node   Ready    edge     4m8s  v1.17.1-kubeedge-v0.0.0-master+$Format:%h$

雲端和邊緣端均爲 Ready 狀態。

四、ARM部署

ARM的部署十分簡單,將 edgecore 交叉編譯即可,其它方法與 X86 上一致。
安裝交叉編譯器:

sudo apt-get install gcc-arm-linux-gnueabihf

設置環境變量並編譯:

export GOARCH=arm
export GOOS="linux"
export GOARM=7 
export CGO_ENABLED=1
export CC=arm-linux-gnueabihf-gcc
export GO111MODULE=off // 禁止 go module
make all WHAT=edgecore

五、問題

在測試時發現的問題及解決方法:

# ./cloudcore 
[address: Invalid value: "unix:///var/lib/kubeedge/kubeedge.sock": unixSocketAddress unix:///var/lib/kubeedge/kubeedge.sock dir /var/lib/kubeedge not exist , need create it]

解決:手動創建目錄

mkdir -p /var/lib/kubeedge

六、小結

KubeEdge 在2020年2月10日(即本文發表前9天)發佈了1.2.0。筆者在春節期間看了幾天源碼,略有所得,還用 visio 畫了流程圖並記錄結構體參數,不料通網後更新代碼,發現代碼大變樣,又得重新閱讀一次。CHANGELOG 還沒有細看,爲了繼續研究代碼,於是先部署運行,再通過打印信息來跟蹤,此爲筆者研讀代碼習慣之一。
KubeEdge 的 beehive 框架目錄使用了符號鏈接方式,不能在 Windows 文件系統存儲。

參考

  • 官方源碼倉庫: https://github.com/kubeedge/kubeedge
  • 官方鏡像: https://hub.docker.com/u/kubeedge
  • 壓縮包: https://github.com/kubeedge/kubeedge/releases
  • 官方安裝文檔:https://docs.kubeedge.io/en/latest/setup/setup.html
  • KubeEdge環境を構築してみた by AWS EC2: https://qiita.com/S-dwinter/items/f1e92f21d4b23fbbba80
  • KubeEdge 部署: https://www.latelee.org/kubeedge/kubeedge-deploy.html
發佈了483 篇原創文章 · 獲贊 250 · 訪問量 110萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章