一、软硬件需求
硬件:
树莓派4B一台
HDMI连接线一根(后续用于树莓派连接显示屏):
显示屏一台、鼠标一个、键盘一个(皆接入树莓派用于后续操作)
软件:
SD卡格式化工具:SD Card Formatter
镜像:
openEuler 22.03 LTS SP4 和 openEuler-22.03-LTS-SP4-raspi-aarch64.img
烧录工具:
SSH客户端:
二、树莓派的初始化
1、烧录镜像
2、启动系统并连接WiFi
烧录好之后将SD卡或者U盘插入到树莓派,将显示屏、鼠标就、键盘接入树莓派,并给树莓派插入电源。
开启笔记本电脑的移动热点,方便后续查看树莓派的ip(非必要步骤,但建议):
安装了openeuler操作系统的树莓派默认用户名为:root,密码为:openeuler,接下来连接WiFi。
查看WiFi的SSID:
nmcli dev wifi
连接WiFi:
nmcli dev wifi connect huang password xxxxxxx
3、SSH连接树莓派
4、虚拟机安装操作系统时需要知道的(踩了好久的坑)
master节点我是使用虚拟机在笔记本上部署的,每次在边缘节点加入集群的时候都会发现边缘节点加入不了集群,检查发现是ping不通master节点而master节点是可以ping通边缘节点的。经过查阅资料和多次实践,发现我们在新建虚拟机的时候网络连接需要采用桥接网络。
三、部署k8s(默认在云侧操作)
1、准备工作
需要用到的组件版本
组件 | 版本 |
---|---|
OS | openEuler 22.03 LTS SP4 |
Kubernetes | 1.20.2-16 |
iSulad | 2.1.2 |
KubeEdge | v1.8.0 |
节点规划
节点名 | 位置 | 组件 |
---|---|---|
cloud.kubeedge | 云侧(cloud) | k8s(master)、isulad、cloudcore |
edge.kubeedge | 边缘侧(edge) | isulad、edgecore |
建议:我们可以提前使用hostnamectl set-hostname命令来修改节点名
云侧:
hostnamectl set-hostname cloud.kubeedge
边缘侧:
hostnamectl set-hostname edge.kubeedge
前往/etc/hosts添加主机(云侧和边缘侧):
vi /etc/hosts
安装一些所需要的工具(云侧和边缘侧)
边缘侧得先下载yum工具才能使用下面的命令:
yum install -y socat conntrack-tools tar ntpdate patch
安装iSulad(云侧和边缘侧)
yum install -y iSulad
systemctl start isulad
2、部署k8s
下载kubeedge-tools 工具包(这里云侧和边缘侧都进行):
wget -O kubeedge-tools.zip https://gitee.com/Poorunga/kubeedge-tools/repository/archive/master.zip
unzip kubeedge-tools.zip
#进入 kubeedge-tools 工具包目录(我们后续所有操作基于此目录)
cd kubeedge-tools-master
初始化云侧环境:
./setup-cloud.sh
修改iSulad配置文件:
将registry-mirrors项添加镜像库"hub.oepkgs.net"和"https://docker.1ms.run",并将pod-sandbox-image改为
"pod-sandbox-image": "registry.aliyuncs.com/google_containers/pause:3.2",如下:
"registry-mirrors": [
"hub.oepkgs.net",
"https://docker.1ms.run"
],
"pod-sandbox-image": "registry.aliyuncs.com/google_containers/pause:3.2"
然后使用下面命令重启isulad:
systemctl restart isulad
接着查看isulad的运行状态(isulad的正常运行非常重要影响后续能否部署成功):
systemctl status isulad
可能会出现的错误:
说明我们缺失了目录,因此需要手动创建:
sudo mkdir -p /var/lib/isulad/engines
sudo chown -R root:root /var/lib/isulad/engines
sudo chmod 755 /var/lib/isulad/engines
k8s集群初始化(apiserver-advertise-address=云侧IP,请根据自己的ip进行更改)
kubeadm init --apiserver-advertise-address=192.168.xx.xx --kubernetes-version v1.20.15 --pod-network-cidr=10.244.0.0/16 --upload-certs --cri-socket=/var/run/isulad.sock --image-repository=registry.aliyuncs.com/google_containers
成功效果图(记得保存好最下面这两行指令):
接下来将指定文件复制到指定目录:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
3、安装网络插件
./install-flannel-cloud.sh
查看是否安装完成:
# 查看节点状态(Ready 即正常)
kubectl get nodes
NAME STATUS ROLES AGE VERSION
cloud.kubeedge Ready control-plane,master 12m v1.20.2
# 查看所有 k8s 组件运行状态(Running 即正常)
$ kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-74ff55c5b-4ptkh 1/1 Running 0 15m
coredns-74ff55c5b-zqx5n 1/1 Running 0 15m
etcd-cloud.kubeedge 1/1 Running 0 15m
kube-apiserver-cloud.kubeedge 1/1 Running 0 15m
kube-controller-manager-cloud.kubeedge 1/1 Running 0 15m
kube-flannel-cloud-ds-lvh4n 1/1 Running 0 13m
kube-proxy-2tcnn 1/1 Running 0 15m
kube-scheduler-cloud.kubeedge 1/1 Running 0 15m
四、部署cloudcore和edgecore
1、云侧部署cloudcore
初始化:
keadm init --advertise-address="云侧IP" --kubeedge-version=1.8.0
调整cloudcore配置:
./patch-cloud.sh
检查是否正常部署
# active (running)即正常
systemctl status cloudcore | grep running
Active: active (running) since Fri 2023-05-20 10:54:30 CST; 5min ago(显示这行即为正常)
2、边缘侧部署edgecore
2.1、准备工作
禁用selinux
setenforce 0
开启相应转发机制:
cat >> /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
生效规则:
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
关闭系统swap:
swapoff -a
前往/boot/cmdline.txt修改启动参数:
vi /boot/cmdline.txt
在最后面添加
cgroup_enable=memory cgroup_memory=1 swapaccount=1
重启:
reboot
2.2、初始化边缘侧环境
提前拉取镜像:
isula pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubeedge/pause:3.1
isula tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/kubeedge/pause:3.1 docker.io/kubeedge/pause:3.1
初始化:
./setup-edge.sh
检查isulad的日志情况(isulad的正常运行非常重要影响后续能否部署成功):
systemctl status isulad
可能会出现的错误:
这里是因为缺少了目录,手动创建就好了。
sudo mkdir -p /var/lib/isulad/engines
sudo chown -R root:root /var/lib/isulad
sudo chmod -R 750 /var/lib/isulad
sudo systemctl daemon-reload
sudo systemctl restart isulad
再次检查isulad的日志:
journalctl -u isulad -f
完美解决:
2.3、加入k8s集群
由于树莓派的openeuler操作系统是不自带yum工具的,我们得先下载yum工具。
dnf install yum
安装k8s工具:
yum install kubernetes-master kubernetes-kubeadm kubernetes-client kubernetes-kubelet
加入集群(这里的指令是之前保存的指令后面再加上--cri-socket=unix:///var/run/isulad.sock):
kubeadm join 192.168.xx.xx:6443 --token qg05h9.fjiwa9fqcj01u3te --discovery-token-ca-cert-hash sha256:b03c4e0f32ecc8e795cfd1a84069438c06366f46abc0030083895d29e5d96e2b --cri-socket=unix:///var/run/isulad.sock
成功效果图:
2.4、加入kubeedge集群
先在云端获取token:
keadm gettoken
将刚刚得到的token替换到命令里:
keadm join --cloudcore-ipport=云侧IP:10000 --kubeedge-version=1.8.0 --token=96058ab80ffbeb87fe58a79bfb19ea13f9a5a6c3076a17c00f80f01b406b4f7c.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDY0NDg4NzF9.1mJegWB7SUVjgf-OvAqILgbZXeMHR9eOzMxpNFc42SI
成功效果图:
调整 edgecore 配置 :
./patch-edge.sh
检查边缘节点是否加入集群成功(在云侧执行):
kubectl get nodes
自此整个kubeedge的部署皆已完成!
五、测试部署
1、创建一个简单的Pod(在云侧)
在云端创建一个简单的测试Pod让其在边缘节点运行:
kubectl apply -f yamls/nginx-deployment.yaml
2、检查是否在边缘侧运行(Running即为正常):
$ kubectl get pod -owide | grep nginx
nginx-deployment-84b99f4bf-jb6sz 1/1 Running 0 30s 10.244.1.2 edge.kubeedge <none> <none>
附件:
参考文档:
1.KubeEdge部署指南 | openEuler文档 | openEuler社区 | v22.03_LTS_SP4