kubeEdge安装


1. 安装要求
1.1 服务器节点要求
部署Kubernetes集群机器需要满足以下几个条件:

  • 一台或多台机器,操作系统 CentOS7.x-86_x64
  • 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多
  • 可以访问外网,需要拉取镜像,如果服务器不能上网,需要提前下载镜像并导入节点
  • 禁止swap分区

1.2对于kubeEdge
KubeEdge由云和边缘组成。它建立在Kubernetes之上,为联网、应用部署和云与边缘之间的元数据同步提供核心基础设施支持。所以如果我们想要设置KubeEdge,我们需要设置Kubernetes集群(可以使用现有的集群),云端和边缘端。

在cloud side, 我们需要安装:

  • Docker,
  • Kubernetes cluster
  • cloudcore

在 edge side, 我们需要安装:

  • Docker,
  • MQTT (We can also use internal MQTT broker) (配置可以选用,不是一定需要)
  • edgecore

2.准备环境

角色IP
master 192.168.16.100
node 192.168.16.x

1) 关闭防火墙:

systemctl stop firewalld

设置开机禁用防火墙:

systemctl disable firewalld

2) 关闭selinux:

临时禁用:setenforce 0

永久禁用: 

vi /etc/selinux/config    # 或者修改/etc/sysconfig/selinux

SELINUX=disabled

查看:getenforce

3) 关闭swap:(K8S 1.8版本后必须关闭)

临时关闭:swapoff -a

永久关闭:vi /etc/fstab,注释掉swap行

通过free查看swap开关情况:

4)根据规划设置主机名

hostnamectl set-hostname

5) 在master添加hosts

cat >> /etc/hosts << EOF 192.168.16.100 master EOF

6) 时区配置和时间同步

查看:date +"%Z %z" 查看当前时区信息

 设置:tzselect根据提示进行设置

时间同步:

yum install ntpdate -y ntpdate

time.windows.com

7)将桥接的IPV4流量传递到iptables 的链

cat > /etc/sysctl.d/k8s.conf << EOF

net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

EOF

# 生效

[root@master-node kubeedge]# sysctl --system

3.kubeedge框架部署

所有节点安装Docker/kubeadm/kubelet,Kubernetes默认CRI(容器运行时)为Docker,因此先安装Docker

3.1安装Docker

1) 更新yum

yum update

2) 安装 yum-utils,它提供了 yum-config-manager,可用来管理yum源

yum install -y yum-utils  wget

3)添加yum源

方式一:

sudo yum-config-manager \

--add-repo \

http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

 方式二:

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

3) 安装docker

sudo yum install -y docker-ce

yum -y install docker-ce-18.06.1.ce-3.el7

4) 启动docker

设置开机启动:systemctl enable docker

立即启动服务:systemctl start docker

查看docker状态:

systemctl status docker

[root@master-node kubeedge]cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://b9pmyelo.mirror.aliyuncs.com"]
}
EOF
[root@master-node kubeedge]systemctl restart docker

3.2  K8s安装

1)添加阿里云YUM软件源

cat > /etc/yum.repos.d/kubernetes.repo << EOF
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF

2)安装kubeadm,kubelet和kubectl

 由于版本更新频繁,这里指定版本号部署:

yum install -y kubelet-1.19.10 kubeadm-1.19.10 kubectl-1.19.10

systemctl enable kubelet

3)部署Kubernetes Master

在192.168.16.100(Master)执行

kubeadm init \
  --apiserver-advertise-address=192.168.16.100 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.19.10 \
  --service-cidr=10.96.0.0/20 \
  --pod-network-cidr=10.244.0.0/16

由于默认拉取镜像地址k8s.gcr.io国内无法访问,这里指定阿里云镜像仓库地址

使用kubectl工具:

配置kubectl命令执行环境

a.未配置环境前,执行kubectl get nodes指令,会显示如下结果

b.配置kubectl执行环境:

mkdir -p $HOME/.kube
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config

此时再执行kubectl get nodes会得到如下结果:

 问题1:kubeadm resetkubeadm init出现的问题

# kubectl get node
Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "kubernetes")`

问题1解决办法:

I got the same error while running $ kubectl get nodes as a root user. I fixed it by exporting kubelet.conf to environment variable.

设置环境变量

export KUBECONFIG=/etc/kubernetes/kubelet.conf kubectl get nodes

4) 部署CNI网络插件(flannel)

a.下载kube-flannel.yml

wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

若出现以下错误:

修改hosts文件vi /etc/hosts

# GitHub Start

199.232.28.133  raw.githubusercontent.com

再执行wget命令,可以得到如下结果:

b.执行kube-flannel部署操作

kubectl apply -f kube-flannel.yml

或

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml

通过命令查看系统pods运行情况,查看kube-flannel是否正常运行

kubectl get pods -n kube-system

 注意:若flannel出现ImagePullBackOff状态,可尝试下面方法:

查看kube-flannel.yml内容

cat kube-flannel.yml |grep image|uniq

根据结果,手动拉取flannel的docker镜像

docker pull quay.io/coreos/flannel:v0.15.1

查看master节点状态

4.kubeedge cloudcore部署

     安装有两种方式,一种源码编译手动安装,还有一种是使用kubeedge提供的工具-keadm。手动安装比较繁琐,主要是编译X509经常是个噩梦,有些编译报错网上搜索不到解决方案。对于新手而言是一种很大的心智负担,所以我还是用keadm这个工具去安装。

但是,这种方式安装最大的问题就是国内的墙的问题会导致很多某些资源无法下载,比如说 CRD的yaml,cloudcore启动的service,所以我会结合两者,采用半手动半工具的安装方式去帮助大家顺利的完成ke的集群搭建
4.1 下载 keadm

wget https://github.com/kubeedge/kubeedge/releases/download/v1.7.0/keadm-v1.7.0-linux-amd64.tar.gz 

下载下来之后执行

tar -zxvf keadm-v1.7.0-linux-amd64.tar.gz # 解压keadm的tar.gz的包
cd keadm-v1.7.0-linux-amd64/keadm/
cp keadm /usr/sbin/ #将其配置进入环境变量,方便使用

4.2 使用keadm安装cloudcore

keadm init --advertise-address=192.168.16.100 --kubeedge-version=1.7.0

注意:

–advertise-address=xxx.xx.xx.xx 这里的xxx.xx.xx.xx换成你master机器的ip,可以是内网地址,也可以是公网ip地址,–kubeedge-version=1.7.0 意思是指定安装的kubeEdge的版本,如果你默认不指定那么keadm会自动去下载最新的版本

4.3 keadm init失败解决方案

网络被墙了,特别是在公有云的虚拟机上,出现这种问题的概率特别大

1)在/etc/hosts下添加如下内容

解决keadm初始化过程中可能无法解析raw.githubusercontent.com的问题

# GitHub Start
52.74.223.119 github.com
192.30.253.119 gist.github.com
54.169.195.247 api.github.com
185.199.111.153 assets-cdn.github.com
151.101.76.133 raw.githubusercontent.com
151.101.108.133 user-images.githubusercontent.com
151.101.76.133 gist.githubusercontent.com
151.101.76.133 cloud.githubusercontent.com
151.101.76.133 camo.githubusercontent.com
151.101.76.133 avatars0.githubusercontent.com
151.101.76.133 avatars1.githubusercontent.com
151.101.76.133 avatars2.githubusercontent.com
151.101.76.133 avatars3.githubusercontent.com
151.101.76.133 avatars4.githubusercontent.com
151.101.76.133 avatars5.githubusercontent.com
151.101.76.133 avatars6.githubusercontent.com
151.101.76.133 avatars7.githubusercontent.com
151.101.76.133 avatars8.githubusercontent.com
# GitHub End

2)半手动安装

错误一:

devices_v1alpha2_device.yaml(用于设备接入的CRD)下载失败,

F0608 11:40:15.689702    5530 keadm.go:27] failed to exec 'bash -c cd /etc/kubeedge/crds/devices && wget -k --no-check-certificate --progress=bar:force https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/devices/devices_v1alpha2_device.yaml', err: --2021-06-08 11:39:54--  https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/devices/devices_v1alpha2_device.yaml

手动下载

wget https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/devices/devices_v1alpha2_device.yaml

mkdir -p /etc/kubeedge/crds/devices && mkdir -p /etc/kubeedge/crds/reliablesyncs

cp devices_v1alpha2_device.yaml /etc/kubeedge/crds/devices/

错误二:

devices_v1alpha2_devicemodel.yaml下载失败,

F0608 14:10:11.700467   42153 keadm.go:27] failed to exec 'bash -c cd /etc/kubeedge/crds/devices && wget -k --no-check-certificate --progress=bar:force https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/devices/devices_v1alpha2_devicemodel.yaml', err: --2021-06-08 14:10:11--  https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/devices/devices_v1alpha2_devicemodel.yaml

手动下载

wget https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/devices/devices_v1alpha2_devicemodel.yaml

cp devices_v1alpha2_devicemodel.yaml /etc/kubeedge/crds/devices/

错误三:

其他xxx..yaml下载失败

将下载文件放到/etc/kubeedge/crds/里面对应的文件夹

https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/reliablesyncs/cluster_objectsync_v1alpha1.yaml#例如,由该网站可知,文件应该共享到reliablesyncs

https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/reliablesyncs/objectsync_v1alpha1.yaml

https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/router/router_v1_rule.yaml

https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/crds/router/router_v1_ruleEndpoint.yaml

错误四:

使用keadm安装cloudcore,关于yaml的配置文件配置完了,现在要配置cloudcore.service,此处提醒文件应该存在/etc/kubeedge里面,不是crds里面

F0608 14:27:07.887553   45073 keadm.go:27] fail to download service file,error:{failed to exec 'bash -c cd /etc/kubeedge/ && sudo -E wget -t 5 -k --no-check-certificate https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/tools/cloudcore.service', err: --2021-06-08 14:27:07--  https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/tools/cloudcore.service

手动下载

下载文件放到/etc/kubeedge

https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/tools/cloudcore.service

https://github.com/kubeedge/kubeedge/releases/download/v1.7.0/kubeedge-v1.7.0-linux-amd64.tar.gz

4.4 初始化成功

keadm init --advertise-address=192.168.107.138 --kubeedge-version=1.7.0

输出:

Kubernetes version verification passed, KubeEdge installation will start...
Expected or Default KubeEdge version 1.7.0 is already downloaded and will checksum for it. 
kubeedge-v1.7.0-linux-amd64.tar.gz checksum: 
checksum_kubeedge-v1.7.0-linux-amd64.tar.gz.txt content: 
kubeedge-v1.7.0-linux-amd64.tar.gz in your path checksum failed and do you want to delete this file and try to download again? 
[y/N]: 

此处输入N,checksum失败不影响配置,不必担心。选择y通过不了。

安装成功:

 4.5获取token

keadm gettoken

 获取的token,在部署edgecore时需要使用

5.edge端的Mosquitto安装

可选,不安装也不影响配置

1)添加EPEL软件库

yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

下载mosquitto

yum -y install mosquitto

 6.kubeedge edgecore部署

下载keadm

wget https://github.com/kubeedge/kubeedge/releases/download/v1.7.0/keadm-v1.7.0-linux-amd64.tar.gz 

解压

tar -zxvf keadm-v1.7.0-linux-amd64.tar.gz 

进入目录

cd keadm-v1.7.0-linux-amd64/keadm

加入cloud

./keadm join --cloudcore-ipport=192.168.107.138:10000 --edgenode-name=node --kubeedge-version=1.7.0 --token=3dc13e89ee6b907f7346786d018d0fa4c1efa7ddb0017607c7512bc1b4926449.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2MjM5OTg0ODd9.hTQMyupZd5d_e5uOVtz3RVsfe9H_BSFnwuLzPRy2ZUg
上面keadm gettoken里面的返回内容

输出:

F0608 15:03:13.805669    3177 keadm.go:27] failed to exec 'bash -c cd /etreleases/download/v1.7.0/kubeedge-v1.7.0-linux-F0608 15:05:37.624302    3197 keadm.go:27] failed to exec 'bash -c cd /etc/kubeedge/ && wget -k --no-check-certificate --progress=bar:force https://github.com/kubeedge/kubeedge/releases/download/v1.7.0/kubeedge-v1.7.0-linux-amd64.tar.gz', err: --2021-06-08 15:05:37--  https://github.com/kubeedge/kubeedge/releases/download/v1.7.0/kubeedge-v1.7.0-linux-amd64.tar.gz
正在解析主机 github.com (github.com)... 13.250.177.223
正在连接 github.com (github.com)|13.250.177.223|:443... 已连接。
无法建立 SSL 连接。
已转换了 0 个文件,用时 0 秒。
amd64.tar.gz', err: --2021md64.tar.gz
正在解析主机 github.com (github.com)... 13.229.188.59
正在连接 github.com (github.com)|13.229.188.59|:443... 已连接。
无法建立 SSL 连接。
已转换了 0 个文件,用时 0 秒。

同样类似于cloudcore,将下面对应文件共享到配置目录/etc/kubeedge

https://github.com/kubeedge/kubeedge/releases/download/v1.7.0/kubeedge-v1.7.0-linux-amd64.tar.gz

https://raw.githubusercontent.com/kubeedge/kubeedge/release-1.7/build/tools/edgecore.service

成功:
在master节点

输入

kubectl get nodes
输出

NAME STATUS ROLES AGE VERSION
master Ready master 4h4m v1.18.0
node Ready agent,edge 9s v1.19.3-kubeedge-v1.7.0