Kubedge部署
该部署分为三部分:
- 使用VirtualBoX虚拟机搭建Kubedge的Master和Worker节点
- 使用阿里云ECS服务器和树莓派4B搭建Kubedge的Master和Worker节点
- 使用树莓派4B和树莓派4B搭建Kubeege的Master和Worker节点
本文是针对阿里云ECS和树莓派环境进行的环境搭建
阿里云ECS和树莓派4B搭建Kubedge的Master和Worker节点
阿里云ECS服务器
阿里云ECS服务器租用,网址;https://cn.aliyun.com/。
按照网页要求注册,满足免费试用资格的会出来相应的型号,我租用的是免费试用版本。
型号:2核(vCPU) 4 GiB
地域选择和你距离比较近的地方就行
镜像选择的是Ubuntu 18.04 64位操作系统
设置初始密码
租用成功后,可以从控制台进入自己的租用详情。https://home.console.aliyun.com/home/dashboard/ProductAndService
远程连接有一下几种方式:
- 页面上的远程连接,在线登录
- 利用Xshell远程连接
- 利用MobaXterm远程连接
在控制台(网络与安全)(安全组)打开相关的端口,双击橙色框中的蓝色链接
以下是我添加的端口信息:打开6443, 10000-10004, 10350端口
构建Master节点
需要进入root权限
关闭防火墙
swapoff -a
安装Docker:
官方:https://docs.docker.com/engine/install/ubuntu/
菜鸟 https://www.runoob.com/docker/ubuntu-docker-install.html
curl -sSL https://get.daocloud.io/docker | sh
查看安装的Docker版本的信息
docker version
查看Docker信息
docker info
标注红色方框的Cgroup driver, docker默认是cgroupfs,由于Kubedge中Master节点的安装要基于Kubernetes, Kubernetes支持的cgroup drvier是systemd。要做以下的修改并重启docker。
vim /etc/docekr/damon.json
进入insert模式,输入:
{
"exec-opts":["native.cgroupdriver=systemd"]
}
保存退出,然后重启docker
systemctl restart docker
安装Kubernetes相关依赖组件
官网:https://kubernetes.io/docs/home/
但是官方文档在国内的环境不太适用,用以下代码
# 安装https
sudo apt-get update && sudo apt-get install -y apt-transport-https
# 使用阿里云镜像
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
#运行
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main
EOF
apt-get update
# 可以指定版本,可以在github查看相关的版本
apt install -y kubelet=1.18.5-00
apt install -y kubectl=1.18.5-00
apt install -y kubeadm=1.18.5-00
# 安装完成后可以查看相关的信息
kubelet --version
kubeadm version
kubectl version
正常的话可以得到以下的输出
如果kubectl version中输出,the connection to the server localhost: xxxx,was refused…可以先忽略。
Kubeadm init
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.18.5
成功后输出:
如果出现报错信息:Port 6443 is in use等
查看端口对应的进程,杀掉。
netstat -anp|grep 6443
ps -ef | grep kubelet
kill xxxx
如果自动起来,无法杀掉,可以重置,再init
kubeadm reset
如果报错: Please manually remove this etcd member using etcdctl, 可以手动删除Kubernetes的相关文件
rm -rf /etc/kubernetes/*
rm -rf /root/.kube/
kubeadm reset
提示成功后,再重新init
kubeadm init --image-repository=registry.aliyuncs.com/google_containers --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.18.5
到这里后,可以按照信息提示执行下述命令,然后查看的节点信息
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
kubectl get nodes
得到如下输出
忽略node1节点,此时的输出,master的节点应该是NotReady,需要在集群中部署一个pod newtork, 可以用下列命令,也可以在网页自行选择合适的版本链接:https://kubernetes.io/docs/concepts/cluster-administration/addons/
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
如果提示无法访问Github,可以自行下载文件,再执行
kubectl apply -f kube-flannel.yml
这时再执行kubectl get nodes,会看到master 节点准备好了。
然后部署nginx
docker pull nginx
kubectl create deployment nginx --image=nginx
kubectl expose deployment nginx --port=80 --type=NodePort
部署完上述可以用kubectl get pods进行查看
如果是pending, 用describe查看相关的报错信息,一般是有污点,把相关的污点删除就行,执行下述命令
# 查看报错信息
kubectl describe pod nginx
# node后是主节点的名字
kubectl taint node iz8vbdu24ar7vfltx6veo9z node-role.kubernetes.io/master:NoSchedule-
用Keadm安装Kubedge
官网:https://kubeedge.io/zh/docs/setup/keadm/
Github: https://github.com/kubeedge
也可以参考下述命令
wget https://github.com/kubeedge/kubeedge/releases/download/v1.9.2/keadm-v1.3.1-linux-amd64.tar.gz
解压
tar -zxvf keadm-v1.9.2-linux-amd64.tar.gz
进入文件
cd /keadm-v1.9.2-linux-amd64.tar.gz/keadm
# 此处存在疑问参考:https://blog.lanweihong.com/posts/56314/
sudo iptables -t nat -A OUTPUT -d <X.X.X.X(主节点公网ip)> -j DNAT --to-destination <X.X.X.X(主节点私网ip)>
./keadm init --advertise-address=X.X.X.X(此处填公网ip)
启动成功后,获取密钥
./keadm gettoken
树莓派服务器和树莓派4B节点
开始配置树莓派环境和Kubedge相关节点
安装树莓派系统
官网:https://www.raspberrypi.com/software/
准备一张 32GB SD卡,读卡器, 连接到电脑上
从官网下载相关的镜像,如果你的电脑是Windows系统,就选择相应的环境
这时会下载到电脑上一个image, 点击,运行,选择要烧录的SD卡,安装的系统等基本信息,可以在此处配置好密码,wifi信息等。然后等待下载安装就可以了。
安装完成后,将SD卡插入到树莓派板上,接通电源,第一次连接,可以接到一个显示器上,接通电源。
如果网络信息没有配置成功,可以手动配置wifi信息,并查看ip。
# 配置WiFi
vim /etc/wpa_supplicant/wpa_supplicant.conf
# 查看ip
ipconfig
# 为了以后远程登录方便,可以设置静态ip
设置好上述信息后,可以用Xshell等远程连接树莓派,输入用户名和密码登录即可
配置Kubedge相关环境
进入root权限
swapoff -a
安装docker, 和阿里云ecs安装步骤一样
curl -sSL https://get.daocloud.io/docker | sh
查看docker 相关信息, 出现以下报错
WARNING: No memory limit support
WARNING: No swap limit support
WARNING: No kernel memory limit support
WARNING: No kernel memory TCP limit support
WARNING: No oom kill disable support
划重点,这个不修改,则无法正常加入集群
Ubuntu 20.04版本, 参考:https://zhuanlan.zhihu.com/p/160282268
Ubuntu 18.04版本, 参考:https://blog.youkuaiyun.com/yinjl123456/article/details/118034953
我安装的是20.04版本
cp /boot/firmware/cmdline.txt /boot/firmware/cmdline.txt.bak
vim /boot/firmware/cmdline.txt
# 在后边接着添加下述命令,不要换行不要逗号,添加完重启才能重新加载成功
cgroup_enable=cpuset
cgroup_enable=memory
cgroup_memory=1
swapaccount=1
重启后再查看docker info,便没有了上述警报。
安装keadm, 注意版本,注意自己的树莓派是arm64还是arm版本
wget https://github.com/kubeedge/kubeedge/releases/download/v1.9.2/keadm-v1.3.1-linux-arm64.tar.gz
# 设置网络
iptables -t nat -A OUTPUT -d <X.X.X.X(主节点私网ip)> -j DNAT --to-destination <X.X.X.X(主节点公网ip)>
cd keadm-v1.9.2-linux-arm64/keadm/
./keadm join --cloudcore-ipport=X.X.X.X:10000(公网ip) --edgenode-name=node1 --token=276c7(master节点得到的密钥)
这时在master节点处查看,便可以看到相关的worker节点信息。
到此,基于阿里云ecs服务器和树莓派的Kubedge集群便建立好了。
常用命令
kubectl get nodes
kubectl get pods
kubectl describe
部署metric server
metric server可以再Master节点处获取各个节点或者pod的CPU、Memory信息
部署官网:https://kubeedge.io/en/docs/advanced/metrics/
首先需要部署logs
官网:https://kubeedge.io/en/docs/advanced/debug/
按照官网的部署基本没有问题。
在Master节点设置环境变量
# 设置私网ip就行
export CLOUDCOREIPS="X.X.X.X"
# 查看
echo $CLOUDCOREIPS
在Master节点为CloudStream生成证书,我们从Github上下载一份certgen.sh :
/etc/kubeedge/certgen.sh stream
设置Iptables 规则(Master节点上操作)
iptables -t nat -A OUTPUT -p tcp --dport 10350 -j DNAT --to $CLOUDCOREIPS:10003
更新cloudcore.yaml和edgecore.yaml
cp /etc/kubeedge/config/cloudcore.yaml /etc/kubeedge/config/cloudcore.yaml.bak
vim /etc/kubeedge/config/cloudcore.yaml
做以下修改
cloudStream:
enable: true
streamPort: 10003
tlsStreamCAFile: /etc/kubeedge/ca/streamCA.crt
tlsStreamCertFile: /etc/kubeedge/certs/stream.crt
tlsStreamPrivateKeyFile: /etc/kubeedge/certs/stream.key
tlsTunnelCAFile: /etc/kubeedge/ca/rootCA.crt
tlsTunnelCertFile: /etc/kubeedge/certs/server.crt
tlsTunnelPrivateKeyFile: /etc/kubeedge/certs/server.key
tunnelPort: 10004
重启cloud
pkill cloudcore
nohup cloudcore > cloudcore.log 2>&1 &
在worker节点做以下修改
cp /etc/kubeedge/config/edgecore.yaml /etc/kubeedge/config/edgecore.yaml.bak
vim /etc/kubeedge/config/edgecore.yaml
edgeStream:
enable: true
handshakeTimeout: 30
readDeadline: 15
server: 192.168.0.139:10004 (对应的云的ip地址)
tlsTunnelCAFile: /etc/kubeedge/ca/rootCA.crt
tlsTunnelCertFile: /etc/kubeedge/certs/server.crt
tlsTunnelPrivateKeyFile: /etc/kubeedge/certs/server.key
writeDeadline: 15
重启edgecore
systemctl restart edgecore.service
如果重启失败,可能是因为kube-proxy进程在运行,可以杀掉后再尝试重启
部署metric server
在以上的基础上,部署metric server, 官方给出的教程无法进行下载:https://kubeedge.io/zh/docs/setup/keadm/,
可以尝试使用这个部署步骤:https://kubeedge.io/en/docs/advanced/metrics/
我是用以下的步骤进行部署成功的
在Master节点上,参考这篇:https://www.jianshu.com/p/031e4f71e8a0,
Metrics-server镜像拉取:
docker pull liguoyu3564/metrics-server-kubeedge:latest
修改配置部署文件(deploy_components.yaml, 可以从kubernetes官网下载一份,或者从简书链接复制一份), 修改红色方框的内容。
修改完成后保存
kubectl apply -f deploy_components.yaml
执行下述命令
kubectl top nodes
如果有一下错误
Error from server (ServiceUnavailable): the server is currently unable to handle the request (get nodes.metrics.k8s.io)
可以参考:https://blog.youkuaiyun.com/ivesgg/article/details/121733376,https://blog.youkuaiyun.com/wangchuang227/article/details/105738075
首先,在/etc/kubernetes/manifests/kube-apiserver.yaml, 增加
--enable-aggregator-routing=true
重启kubelet
systemctl restart kubelet
然后,在原来的deploy_components.yaml文件中继续做以下修改
保存后执行
kubectl delete -f deploy_components.yaml
kubectl apply -f deploy_components.yaml
此时再执行kubectl top nodes, 便会看到以下的输出
完结,撒花!