Kubedge部署

该教程详细介绍了如何使用阿里云ECS服务器和树莓派4B搭建Kubernetes集群,以及进一步部署KubeEdge。首先,通过阿里云ECS创建Ubuntu实例,安装Docker和Kubernetes组件,配置cgroupdriver为systemd。然后,使用keadm初始化KubeEdge,在Master节点获取密钥。在树莓派上,同样安装Docker和keadm,设置网络规则,加入集群。最后,配置并部署metricserver以监控节点资源。整个过程包括环境配置、网络设置、服务安装和故障排查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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/121733376https://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, 便会看到以下的输出
在这里插入图片描述

完结,撒花!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值