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 reset
后kubeadm 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