对于一个以后可能要经常面对网络不佳的网边设备的小白来说,云原生的下一步当然就是边缘计算啦~
边缘计算已经有很多现成的框架了,CNCF孵化最早的就是KubeEdge,开源社区,量级很轻,部署简单,通俗易懂,所以小白选择在上面进行边缘部署尝试,过程非常行云流水,推荐入手
KubeEdge与K8S版本兼容
官方文档有描述,见Kubernetes compatibility:
本文选择的是在K8S-1.22.2上部署KubeEdge-1.10.1,想部署最新版本的,将下文命令中一些版本号替换掉就好了。
(一)虚拟机配置
本文在虚拟机环境下进行实验,软件选择Vmare WorkStation,虚拟机镜像采用Centos7.4,具体虚拟机配置见我的上一篇文章第一小节:win11系统+VMare16pro+Centos7虚拟机+kubespray-2.15.0一键部署k8s集群 保姆级教程
同样的,作为三台机器同时操作的辅助工具,MOBAXterm的安装也请参考这篇文章,全部ssh配置好之后就可以愉快地在同一个界面上操作三台虚拟机了。
(二)K8S v1.22.2 (Kubeadm)安装
众所周知K8S有多种部署方式,包括但不限于kubeadm、二进制、kubespray…本文选择kubeadm,主要是因为简单方便,而且Kubeadm的安装过程有助于理解后续keadm的安装和节点加入(对于小白来说相辅相成)。
本文用于配置的虚拟机情况:
IP | hostname |
192.168.214.150 | ke-cloud |
192.168.214.151 | ke-edge1 |
192.168.214.152 | ke-edge2 |
1.前置环境–国内镜像源(三台一起)
这一步如果会科学上网其实就不需要了,如果不能科学上网,就要把yum镜像源换成国内的(比如阿里源),直接修改yum.repos.d下的关于k8s的配置文件就行,这里应该属于重新开文件写入的情况:
打开kubernetes.repo:
cat >> /etc/yum.repos.d/kubernetes.repo << EOF
写入以下内容:
[kubernetes]
name=Kubernetes Repo
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
enabled=1
EOF
2.前置环境–更新Yum源并安装docker(三台一起)
更新yum源:
yum -y update
安装docker(本文直接默认安装最新版,需要指定版本可以在命令里加版本号)
yum install docker-ce
3.前置环境–检查一下Hostname并写入/etc/hosts(三台一起)
查看hostname命令:
hostname
本文三个节点分别名为ke-cloud,ke-edge1,ke-edge2,具体对应IP见上表,确定好hostname对应之后,将其写入hosts文件,这样后续kubeadm自动部署的时候能顺利找到节点:
cat >> /etc/hosts << EOF
192.168.214.150 ke-cloud
192.168.214.151 ke-edge1
192.168.214.152 ke-edge2
EOF
4.前置环境–关闭防火墙、selinux并禁用swap(三台一起)
基本操作了,防止后续节点之间的通讯或者和远端的通讯被安全设施bang掉
#关掉并禁止防火墙
systemctl stop firewalld & systemctl disable firewalld
# 关掉并禁止selinux
sed -i 's/enforcing/disabled/' /etc/selinux/config
setenforce 0
getenforce
# 永久关闭swap分区
vim /etc/fstab
注释掉/dev/mapper/centos-swap swap swap defaults 0 0这一行即可
5.开始安装Kubeadm组件(三台一起)
这里主要依靠yum源安装,命令很简单:
yum -y install kubelet-1.22.2-0 kubeadm-1.22.2-0 kubectl-1.22.2-0 //版本号可以根据需求更改
下载好之后,最好把一些组件连同docker加入开机启动,这样以后挂起关机也不用重新启动:
# docker加入开机启动
systemctl start docker && systemctl enable docker
# kubelet加入开机启动
systemctl enable kubelet
6.主节点初始化k8s-master(只在主节点进行)
kubeadm init --kubernetes-version=1.22.2 \ #该参数指定k8s版本
--apiserver-advertise-address=192.168.214.150 \ #该参数是主节点IP
--image-repository registry.aliyuncs.com/google_containers \ #指定下载部署组件的镜像源
--service-cidr=10.10.0.0/16 --pod-network-cidr=10.122.0.0/16 #一些内网配置,可以直接用这个
配置成功会显示出如何加入节点的代码:
PS:配置过程中可能会出现很多奇奇怪怪的报错,比如unhealthy啦,port:xxxx unreachble啦,这个后续补充,毕竟Bug千千万。
7.其他节点加入集群 & 配置网络插件
复制上面最后那段kubeadm join的命令到其他机子上,可以实现加入节点,但是此时查看节点情况:
kubectl get nodes
可能发现节点状态都是NotReady:
这是因为网络插件还没配好,所以下一步就是下载网络插件,calico和fannel都可以,这里选择calico:
curl https://docs.projectcalico.org/manifests/calico.yaml -O
kubectl apply -f calico.yaml
此时再看节点应该就是Ready了,不行就再刷新几下
至此,k8s集群部分就配置完成了,下一步就是在现有集群上配置KubeEdge了。
(三)KubeEdge v1.10.0部署安装
其实根据前面的版本表不难发现,在k8s 1.22.2上几乎可以装各种版本的KubeEdge,因此不想装v1.10.0的也可以自行替换版本号。
首先,我们要在准备好的所有节点上下载kubeedege相关组件:
# keadm,类似kubeadm的KE部署包
wget https://github.com/kubeedge/kubeedge/releases/download/v1.10.0/keadm-v1.10.0-linux-amd64.tar.gz
# 提前下载kubeedge压缩包和校验文件
wget https://github.com/kubeedge/kubeedge/releases/download/v1.10.0/kubeedge-v1.10.0-linux-amd64.tar.gz
wget https://github.com/kubeedge/kubeedge/releases/download/v1.10.0/checksum_kubeedge-v1.10.0-linux-amd64.tar.gz.txt
1.云节点配置
下载好上述配置文件后,由于云端节点要负责初始化,比较重要,所以先配置云端节点ke-cloud
首先解压keadm压缩包,并将其拷贝到集群主节点目录下(即/usr/bin):
tar -xvf keadm-v1.10.0-linux-amd64.tar.gz
cp keadm-v1.10.0-linux-amd64/keadm/keadm /usr/bin/
这样keadm才能在节点上被查找到并且运行。
而对于下载好的kubeedge压缩包和校验文件,可以先把它们存在/etc/kubeedge目录下:
mkdir /etc/kubeedge/
cp kubeedge-v1.10.0-linux-amd64.tar.gz /etc/kubeedge/
cp checksum_kubeedge-v1.10.0-linux-amd64.tar.gz.txt /etc/kubeedge/
然后即可在云节点进行边缘集群初始化:
keadm init --advertise-address=192.168.214.150 --kubeedge-version=1.10.0
部署过程可能会卡网络,建议此处加大力度科学上网。
可以用下面语句查看cloudcore进程是否已经在进行:
ps -ef|grep cloudcore
为了防止以后挂机重开之后还要再重启服务,将cloudcore相关设施也加入开机自启动:
cp /etc/kubeedge/cloudcore.service /etc/systemd/system/
systemctl daemon-reload
systemctl start cloudcore.service
systemctl enable cloudcore.service
然后可以生成云节点的token,通过Token可以让其他边缘节点加入:
keadm gettoken
2.边缘节点配置
边缘节点在下载好Keadm,kubeedge和check_sum之后,同样也要将其解压缩并复制到工作目录下:
tar -xvf keadm-v1.10.0-linux-amd64.tar.gz
cp keadm-v1.10.0-linux-amd64/keadm/keadm /usr/bin/
然后将上面云节点生成的token复制过来,用下面语句将边缘节点加入云端:
keadm join --cloudcore-ipport=192.168.134.161:10000 --token=上面复制的
如果没有网络问题,那么Kubeedge就顺利安装成功了。