官术网_书友最值得收藏!

1.3 邊緣計算系統的部署與管理

本節對邊緣計算系統的部署采用兩個節點的形式,即將邊緣計算系統的云部分Kubernetes部署在云控制節點,邊緣部分KubeEdge和端部分EdgeX Foundry部署在邊緣計算節點。這樣做的目的是讓讀者能夠快速部署邊緣計算系統。通過操作已運行的系統,讀者可對本書要講的邊緣計算系統有一個感性認識。

1.3.1 系統部署

本節將對邊緣計算系統部署所需要的主機環境和部署Docker、Kubernetes、KubeEdge和EdgeX Foundry的相關步驟進行說明。

1. 主機環境

表1-4是部署邊緣計算系統的兩臺主機的詳細配置,該環境包含兩個節點,即云控制節點和邊緣計算節點。

表1-4 部署邊緣計算系統主機配置

022-01

2. 部署Docker

本節Docker的安裝步驟適合CentOS 7.7 64位操作系統,具體安裝步驟如下。其他操作系統請讀者參考Docker官網相關安裝文檔。

1)卸載之前安裝的老版本Docker(可選),命令如下:

# yum remove docker docker-client docker-client-latest docker-common
docker-latest docker-latest-logrotate docker-logrotate docker-engine

2)安裝Docker Repository,命令如下:

# yum install -y yum-utils device-Mapper-persistent-data lvm2

配置安裝Docker時需要的倉庫鏈接,命令如下:

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

3)安裝Docker Engine-Community(最新版本),命令如下:

# yum install docker-ce docker-ce-cli containerd.io

4)查看已安裝的Docker相關包,命令如下:

# yum list docker-ce --showduplicates | sort -r

5)啟動Docker,命令如下:

# systemctl start docker

6)查看Docker運行狀態,確認Docker已經正常運行,命令如下:

# systemctl status docker

如果輸出類似圖1-12的信息,說明Docker已經正常運行。

023-01

圖1-12 Docker運行狀態

3. 部署Kubernetes

下面介紹Kubernetes16.5的部署。本書的邊緣計算系統中只需要部署Kubernetes Master節點,并將其作為邊緣計算系統的云控制中心。為了讓Kubernetes的部署得更完整,下面將部署Kubernetes Node節點的步驟包含了進來。

(1)安裝Kubernetes Master節點

1)在需要運行Kubelet的節點上關閉Swap分區,命令如下:

# swapoff -a

2)關閉防火墻,命令如下:

# systemctl disable firewalld && systemctl stop firwalld

3)關閉SELinux,命令如下:

# setenforce 0

4)下載所需的二進制文件和鏡像壓縮包并解壓。

服務二進制文件是Kubernetes GitHub上發布的編譯好的Kubernetes版本,包括各組件的二進制和鏡像。進入Kubernetes發布(release)頁面,點擊某個已發布版本的changelog,如CHANGELOG-1.16.5.md,下載其中的服務二進制壓縮包。下載完成的安裝包如下所示:

[root@all-in-one~]# ls
kubernetes-server-linux-amd64.tar.gz

解壓安裝包命令:

# tar -zxvf Kubernetes-server-linux-amd64.tar.gz

通過上述命令解壓后,我們會看到類似圖1-13的內容。

024-01

圖1-13 Kubernetes服務二進制壓縮包解壓

通過圖1-13可知,壓縮包Kubernetes-server-linux-amd64.tar.gz解壓成文件夾kubernetes,所需的二進制文件和鏡像都在kubernetes/server/bin目錄下。

5)把kubernetes/server/bin里的kubeadm、kubelet、kubectl三個二進制文件復制到/usr/bin下,命令如下:

#cp kubernetes/server/bin/kubectl kubernetes/server/bin/kubeadm kubernetes/server/bin/kubelet /usr/bin

6)提前加載控制平面鏡像。

根據官方文檔中“Running kubeadm without an internet connection”小節內容,Kubeadm在執行kubeadm init過程中需要啟動控制平面,因此需要在此之前將控制平面對應版本的鏡像準備好,包括Apiserver、Controller Manager、Scheduler和Kube-proxy組件鏡像,然后將kubernetes/server/bin中包含的鏡像壓縮包加載到Master節點,命令如下:

#docker load -i kube-scheduler.tar

但是,Etcd和Pause鏡像需要通過其他途徑(如Docker Hub)來獲得。

7)下載Kubelet的systemd unit定義文件,命令如下:

# export RELEASE=v1.16.5
#curl -sSL "https://raw.GitHubusercontent.com/kubernetes/kubernetes/${RELEASE}/build/debs/kubelet.service" > /etc/systemd/system/kubelet.service

其中,RELEASE變量需要提前導出,如v1.16.5。

8)下載Kubeadm配置文件,命令如下:

#mkdir -p /etc/systemd/system/Kubelet.service.d
#curl -sSL 

9)設置Kubelet開機自啟動,命令如下:

#systemctl enable Kubelet

10)初始化Master節點,命令如下:

#kubeadm init --kubernetes-version=v1.16.5  --pod-network-cidr=10.244.0.0/16

其中,kubernetes-version告訴Kubeadm具體需要安裝什么版本的Kubernetes;“pod-network-cidr=192.168.0.0/16 flflag”的值與具體網絡方案有關,這個值對應后面的Calico網絡方案。如果安裝的是Flannel,則pod-network-cidr的值應該是10.244.0.0/16。

注意

如果所有鏡像就緒,則kubeadm init步驟執行時間只需幾分鐘。如果安裝過程中遇到錯誤需要重試,則重試之前運行kubeadm reset。

11)配置Kubectl。

由于下面安裝Pod網絡時使用了Kubectl,因此需要在此之前執行如下配置。

  • 如果后續流程使用root賬戶,則執行:
#export KUBECONFIG=/etc/kubernetes/admin.conf

注意

為了方便,我們可以將該命令寫到<home>/.profifile下。

  • 如果后續流程使用非root賬戶,則執行:
# mkdir -p $HOME/.kube
# cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
# chown $(id -u):$(id -g) $HOME/.kube/config

12)安裝pod。

這里選擇Calico,按照Kubernetes官方安裝文檔操作即可,命令如下:

#kubectl apply -f 

Calico的yaml文件鏈接為:

https://docs.projectCalico.org/v3.7/manifests/Calico.yaml

13)設置Trait允許Pod調度到Master節點上,否則Master節點的狀態是不可用(not ready)。(該步驟為可選項,如果是單節點集群則執行此步。)

默認在執行kubeadm init過程中,通過執行以下命令使Pod調度到Master節點上:

#kubectl taint nodes --all node-role.Kubernetes.io/master-

14)執行到這一步,我們已經有了一個單節點Kubernetes集群,可以運行Pod。如果需要更多節點加入,可以把其他節點集合到集群。安裝就緒的單節點集群如圖1-14所示。

026-01

圖1-14 單節點集群負載

(2)安裝Kubernetes Node節點(可選)

1)關閉內存Swap分區:swapoff -a

2)安裝Docker。

3)安裝Kubeadm、Kubelet。

詳細內容讀者可參考官網安裝Kubernetes Master節點的步驟。

將安裝Kubernetes Master節點時下載的服務二進制壓縮包里包含的kubeadm、kubelet兩個二進制文件復制到/usr/bin下。

4)準備鏡像。

把安裝Kubernetes Master節點時下載的Kube-proxy、Pause鏡像轉移到該節點并加載。

5)為Kubelet和Kubeadm準備配置文件,命令如下:

# export RELEASE=v1.16.5
#curl -sSL "https://raw.GitHubusercontent.com/Kubernetes/Kubernetes/ ${RELEASE}/build/debs/Kubelet.service" > /etc/systemd/system/Kubelet.service
#mkdir -p /etc/systemd/system/Kubelet.service.d
#curl -sSL "https://raw.GitHubusercontent.com/Kubernetes/Kubernetes/ ${RELEASE}/build/debs/10-kubeadm.conf" > /etc/systemd/system/Kubelet.service.d/10-kubeadm.conf

6)設置Kubelet開機自動啟動,命令如下:

# systemctl enable Kubelet

7)將Node節點加入集群,命令如下:

# kubeadm join --token : --discovery-token-ca-cert-hash sha256:

注意

這條命令在Master節點執行kubeadm init結束時會在Console上顯示。

4. 部署KubeEdge

在Kubernetes已經安裝成功的基礎上安裝KubeEdge 1.1.0,將Kubernetes Master節點作為云控制節點。

(1)安裝Cloud部分

1)修改Kubernetes Master節點配置。

Cloud端是KubeEdge中與Kube-apiserver交互的組件,在本書中Cloud端與Kube-apiserver交互使用的是非安全端口,需要在Kubernetes Master節點上做如下修改:

#vi /etc/Kubernetes/manifests/kube-apiserver.yaml
- --insecure-port=8080
- --insecure-bind-address=0.0.0.0

2)下載安裝包。可以通過兩種方式下載安裝包:通過cURL直接下載;在KubeEdge的已發布版本的倉庫中下載。

  • 第一種方式:通過cURL直接下載。
VERSION="v1.0.0"
OS="linux"
ARCH="amd64"
curl -L "https://GitHub.com/KubeEdge/KubeEdge/releases/download/ ${VERSION}/KubeEdge-${VERSION}-${OS}-${ARCH}.tar.gz" --output KubeEdge-${VERSION}-${OS}-${ARCH}.tar.gz && tar -xf KubeEdge-${VERSION}-${OS}-${ARCH}.tar.gz  -C /etc

注意

通過cURL直接下載,由于網速問題,一般需要的時間比較久,失敗的可能性較大。

  • 第二種方式:在KubeEdge的已發布版本的倉庫中下載。

進入KubeEdge的GitHub倉庫的KubeEdge v1.0.0發布頁面,下載kubeEdge-v1.0.0-linux-amd64.tar.gz,將下載的安裝包上傳到Kubernetes Master節點的/root目錄,命令如下:

#tar -zxvf kubeEdge-v1.0.0-linux-amd64.tar.gz
# mv kubeEdge-v1.0.0-linux-amd64 /etc/KubeEdge

3)在Kubernetes Master節點上生成證書。

生成的證書用于KubeEdge的Edge與Cloud端加密通信。證書生成命令如下:

#wget -L https://raw.GitHubusercontent.com/kubeEdge/kubeEdge/master/build/tools/certgen.sh
#chmod +x certgen.sh bash -x ./certgen.sh genCertAndKey edge

注意

上述步驟執行成功之后,會在/etc/kubeEdge下生成ca和certs兩個目錄。

4)創建Device Model和Device CRD。

在Kubernetes Master節點上創建KubeEdge所需的Device Model和Device CRD。創建步驟如下:

#wget -L https://raw.GitHubusercontent.com/KubeEdge/KubeEdge/master/build/crds/devices/devices_v1alpha1_devicemodel.yaml
#chmod +x devices_v1alpha1_devicemodel.yaml
#kubectl create -f devices_v1alpha1_devicemodel.yaml
#wget -L https://raw.GitHubusercontent.com/KubeEdge/KubeEdge/master/build/crds/devices/devices_v1alpha1_device.yaml
#chmod +x devices_v1alpha1_device.yaml
#kubectl create -f devices_v1alpha1_device.yaml

5)運行Cloud端。

在Kubernetes Master節點上運行KubeEdge的Cloud端,命令如下:

#cd /etc/KubeEdge/cloud
#./CloudCore

注意

為了方便查看進程輸出,本節采用了前臺駐留進程的方式。除了上述方式外,我們還可以通過Systemd來查看。

(2)安裝Edge部分

Edge端是KubeEdge運行在邊緣設備上的部分。在Edge端運行之前,我們需要安裝合適的容器運行時,包括Docker、Containerd和Cri-o。本節采用的容器運行時是Docker。

1)準備Edge端安裝包。

因為證書問題,可以將Kubernetes Master節點上的/etc/kubeEdge直接復制到Edge節點的/etc下,命令如下:

#scp -r /etc/kubeEdge root@{ edge節點ip }:/etc

2)在Kubernetes Master節點上創建Edge節點的Node資源對象,命令如下:

# vi node.json

{
    "kind": "Node",
    "apiVersion": "v1",
    "metadata": {
    "name": "edge-node",
    "labels": {
    "name": "edge-node",
     "node-role.kubernetes.io/edge": ""
    }
    }
}

# kubectl create -f node.json

3)Edge部分的配置。

配置內容包括Edge端連接Cloud端的IP;Edge端的Name與在Kubernetes Master上創建的Node的名稱相對應。

①Edge端連接Cloud端的IP。

edgehub.websocket.url:IP修改成Kubernetes Master IP端口名。

edgehub.quic.url:IP修改成Kubernetes Master IP端口名。

②Edge端的Name與在Kubernetes Master上創建的Node的名稱相對應。

controller:node-id與在Kubernetes Master上創建的Node的名稱相對應。

edged:hostname-override與在Kubernetes Master上創建的Node的名稱相對應。

4)運行Edge端,命令如下:

#cd /etc/kubeEdge/edge
#./edgecore

(3)驗證KubeEdge是否正常運行

KubeEdge部署成功后,在Kubernetes Master節點通過Kubectl工具查看其運行狀態,具體如圖1-15所示。

031-01

圖1-15 集群節點運行狀態

5. 部署EdgeX Foundry

EdgeX Foundry是一套可以用KubeEdge部署到邊緣的IoT SaaS平臺。它可以采集、存儲IoT設備的數據并將其導出到云數據中心,同時通過向終端設備下發指令對終端設備進行控制。

(1)準備鏡像

本節以容器的形式部署EdgeX Foundry,需要在KubeEdge管理的邊緣計算節點上準備edgex-ui-go、edgex-vault、edgex-mongo、support-scheduler-go、support-notifications-go、support-logging-go、core-command-go、core-metadata-go、core-data-go、export-distro-go、export-client-go、edgex-vault-worker-go、edgex-vault和edgex-volume共14個鏡像。

有兩種方法獲取這些鏡像。

1)直接在DockerHub上下載這些鏡像。

2)根據EdgeX Foundry源碼倉庫中的makefile文件構建這些鏡像。

(2)準備部署EdgeX Foundry組件所需的yaml文件

需要在前面部署的Kubernetes Master節點上準備與每個鏡像對應的yaml文件,對其進行部署。絕大多數鏡像需要通過Deployment進行部署,少數鏡像需要通過Job進行部署,有些鏡像還需要通過Service對外暴露服務,這些yaml文件沒有固定的標準。目前,EdgeX Foundry官方還沒有提供相關yaml文件,建議根據具體場景進行編寫。

(3)通過yaml文件部署EdgeX Foundry

至此,我們已經擁有Kubernetes Master節點,并將Master節點作為云端控制節點,將KubeEdge管理的節點作為邊緣計算節點的云、邊協同的集群。同時,在KubeEdge管理的節點上已準備好部署EdgeX Foundry所需的鏡像,在Kubernetes Master節點上準備好運行EdgeX Foundry鏡像所需的yaml文件。接下來,只需在Kubernetes Master節點上通過kubectl命令創建yaml文件中描述的資源對象即可,具體命令如下:

#kubectl create -f {文件名}.yaml

yaml文件中描述的資源對象都創建好了,意味著EdgeX Foundry的部署結束。至于EdgeX Foundry是否部署成功,我們可以通過如下命令進行驗證:

#kubectl get pods –all-namespace

從圖1-16可知,部署的EdgeX Foundry相關組件都已正常運行。

032-01

圖1-16 EdgeX Foundry組件運行狀態

最后,通過在瀏覽器里訪問edgex-ui-go(即在瀏覽器訪問http://{EdgeX Foundry所運行主機的IP}:4000)進入EdgeX Foundry的登錄頁面,具體如圖1-17所示。

032-02

圖1-17 EdgeX Foundry的登錄頁面

在圖1-17中輸入EdgeX Foundry對應的Name/Password,就可以成功進入EdgeX Foundry的控制臺,具體如圖1-18所示。

033-01

圖1-18 EdgeX Foundry控制臺

至此,我們已經擁有由兩個節點組成的,包含云、邊、端的完整邊緣計算系統。接下來介紹邊緣計算系統的管理,以及在該邊緣計算系統上部署應用。

1.3.2 系統管理

通過以上對云、邊、端三部分的梳理,我們了解到邊緣計算系統的管理可分為集群管理和應用管理。

1. 集群管理

集群管理是對集群級別的資源進行管理,這些資源主要包括Node、NameSpace。下面通過對上述對象的增、刪、改、查進行說明。

(1)對Node的操作

1)創建Node,命令如下:

# kubectl create -f {node定義文件}.ymal

2)刪除Node,命令如下:

# kubectl delete -f {node定義文件}.ymal
#kubectl delete node {node名字}

3)修改Node,命令如下:

#kubectl apply -f {修改過的node定義文件}.yaml
#kubectl edit node {node名字}

4)查看Node,命令如下:

  • 查看集群的Node列表:
#kubectl get nodes
  • 查看指定Node的具體定義:
#kubectl describe node {node名字}

(2)對NameSpace的操作

1)創建NameSpace,命令如下:

# kubectl create -f {namespace定義文件}.ymal
# kubectl create namespace {namespace名字}

2)刪除NameSpace,命令如下:

# kubectl delete -f {namespace定義文件}.ymal
#kubectl delete namespace {namespace名字}

3)修改NameSpace,命令如下:

#kubectl apply -f {修改過的namespace定義文件}.yaml
#kubectl edit namespace {namespace名字}

4)查看NameSpace。

  • 查看集群的NameSpace列表,命令如下:
#kubectl get namespace
  • 查看指定NameSpace的具體定義,命令如下:
#kubectl describe namespace {namespace名字}

集群級別的資源一般不需要用戶對其進行創建、修改或者刪除,只是在用戶需要時對其進行查看。

2. 應用管理

應用管理主要是對應用相關的資源進行管理,這些資源包括Deployment、ReplicaSet、Pod、Service Endpoint、Service Acount、Secret、Persistent Volume、Persistent Volume Claim。對這些應用相關資源的操作,與集群相關資源的操作比較相似,我們可以參考集群管理對指定資源進行增、刪、改、查。

需要說明一點,應用相關的資源一般需要用戶創建和管理,也就是說掌握對應用相關的資源的增、刪、改、查是有必要的。

主站蜘蛛池模板: 龙里县| 虞城县| 广灵县| 玉门市| 五大连池市| 湛江市| 彰化市| 鹤峰县| 凌云县| 古蔺县| 格尔木市| 建始县| 霍山县| 平湖市| 原阳县| 榆中县| 广丰县| 喀喇沁旗| 彭水| 唐河县| 万州区| 延吉市| 越西县| 太仆寺旗| 三原县| 武乡县| 双鸭山市| 汕头市| 银川市| 广宁县| 饶平县| 梁平县| 长葛市| 金溪县| 甘洛县| 陆河县| 方正县| 沽源县| 宁强县| 利川市| 铁力市|