「连载」边缘计算(二)01-16:边缘计算系统(基础篇)

141 阅读5分钟

(接上篇)

边缘计算的意义

随着移动互联网技术的发展,智能终端设备和各种物联网设备的数量急剧增加。在5G和万物互联时代,传统云计算中心集中存储、计算的模式已经无法满足终端设备对低时延、高带宽、强算力的需求。将云数据中心的计算能力下沉到边缘,甚至终端设备,并通过云数据中心进行统一交付、运维、管理,是云计算的趋势,从而催生了边缘计算。

边缘计算为终端用户提供实时、动态和智能的服务计算。边缘计算会将计算推向更接近用户的实际现场,这与需要在云端进行计算的传统云计算有着本质的区别,而这些区别主要表现在带宽负载、资源浪费、安全隐私保护以及异构多源数据处理上。

1.3边缘计算系统的部署与管理

本节对边缘计算系统的部署采用两个节点的形式,将边缘计算系统的云部分Kubernetes部署在云控制节点,边缘部分KubeEdge和端部分EdgeX Foundry部署在边缘计算上。这样做的目的是让读者能够快速部署边缘计算系统。通过操作已运行的系统对本书要讲的边缘计算系统有一个感性的认识。

1.3.1系统部署

本节将对边缘计算系统部署所需要的主机环境和部署docker、Kubernetes、KubeEdge和EdgeX Foundry的相关步骤进行说明。

1.主机环境

表4是部署边缘计算系统的两台主机的详细配置,该环境包含两个节点,即云控制节点和边缘节点。 

表1-4 部署边缘计算系统主机配置

 操作系统CPU/内存磁盘带宽
云控制节点CentOS 7.7 64位2vCPU/8GiB100GiB2Mbit/s
边缘节点CentOS 7.7 64位4vCPU/16GiB40GiB2Mbit/s
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 download.docker.com/linux/cento…

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

安装docker:# 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运行状态,确认docker已经正常运行,命令如下:

# systemctl status docker

如果输出类似图1-12的信息,说明docker已经正常运行。

1-12.png

图1-12 docker运行状态

3.部署 K ubernetes

下面介绍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)下载所需的binary和images压缩包并解压,命令如下:

server binary是Kubernetes GitHub上release的编译好的Kubernetes版本,包括各组件的二进制和镜像。进⼊Kubernetes release⻚⾯,点击某个release的changelog,如CHANGELOG-1.16.5.md ,下载其中的server binary压缩包。下载完成的安装包如下所示:

解压安装包命令:# tar -zxvf Kubernetes-server-linux-amd64.tar.gz

通过上述命令解压后,我们会看到类似图1-13的内容。

1-13.png

图1-13 Kubernetes server binary压缩包解压

  通过图1-13可知,压缩包Kubernetes-server-linux-amd64.tar.gz解压成文件夹Kubernetes,所需的binary和image都在kuernetes/server/bin目录下。

5)把Kubernetes/server/bin ⾥的kubeadm、 Kubelet、kubectl三个binary复制到 /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在执行init过程中需要启动控制平面,因此需要在此之前将控制平面的对应版本的镜像准备好,包括apiserver、 controller manager、scheduler和kubeproxy组件镜像,然后将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 "raw.GitHubusercontent.com/Kubernetes/…" > /etc/systemd/system/Kubelet.service

其中,RELEASE变量需要提前export出来,如 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⽹络⽅案。如果安装的是flflannel,则pod-network-cidr的值应该是10.244.0.0/16。

注意:如果所有镜像就绪,则kubeadm init步骤执⾏时间只需几分钟。如果安装过程遇到错误需要重试,则重试之前运⾏ kubeadm reset 。

11)配置kubectl。

由于下面安装pod⽹络时使⽤了kubectl,因此需要在此之前执⾏如下配置。

l 如果后续流程使⽤root账户,则执⾏:

#export KUBECONFIG=/etc/Kubernetes/admin.conf

注意:为了方便,我们可以将该命令写到/.profifile下。

l 如果后续流程使⽤⾮root账户,则执⾏:

mkdir -p $HOME/.kube

cp -i /etc/Kubernetes/admin.conf $HOME/.kube/config

chown (idu):(id -u):(id -g) $HOME/.kube/config

12)安装 pod网络。

这⾥选择Calico,按照Kubernetes官⽅安装⽂档操作即可,命令如下:

#kubectl apply -f

Calico的yaml文件链接为:docs.projectCalico.org/v3.7/manife…

13)允许pod调度到master节点上,否则master节点的状态会是not ready(可选,如果⽤来做单节点集群则执⾏此步)。

默认会在执行kubeadm init过程中,通过执⾏以下命令使pod调度到master节点上:

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

14)执⾏到这步,我们已经有了⼀个单节点Kubernetes集群,可以运⾏pod。如果需要更多节点加⼊,可以把其他节点集合到集群。安装就绪的单节点集群如图1-14所示。

1-14.png

图1-14 单节点集群负载

(2)安装 Kubernetes node节点(可选)

1)swapoff -a //关闭内存swap分区

2)安装docker。

3)安装kubeadm、Kubelet。

详细参考安装 Kubernetes master节点的步骤。

将安装Kubernetes master时下载的server binary里包含的kubeadm、 Kubelet两个binary复制到 /usr/bin 下。

4)准备镜像。

把安装Kubernetes master时下载的kube-proxy、pause镜像转移到该节点并加载。

5)为Kubelet和kubeadm准备配置文件,命令如下:

# export RELEASE=v1.16.5

#curl -sSL "raw.GitHubusercontent.com/Kubernetes/…" > /etc/systemd/system/Kubelet.service

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

#curl -sSL "raw.GitHubusercontent.com/Kubernetes/…" > /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上显⽰。

未完待续……」 点击下方标题可阅读技术文章

「连载」边缘计算(一)01-16:边缘计算系统(基础篇) juejin.cn/post/732453…