在openEuler 22.03 LTS SP1上使用docker搭建kubeedge

一. 准备工作

1. 先配置好各自的主机名

# 在云节点执行

hostnamectl set-hostname cloud.kubeedge

# 在边节点执行

hostnamectl set-hostname edge.kubeedge

2. 接下来进行准备工作,在云端和边端都进行基础系统配置,进行安装前准备

# 停止并禁用firewalld systemctl stop firewalld systemctl disable firewalld # 如果使用的是iptables,也需要停止 systemctl stop iptables systemctl disable iptables # 临时关闭selinux setenforce 0 # 永久关闭,编辑/etc/selinux/config,将SELINUX=enforcing改为SELINUX=disabled sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 临时关闭交换分区 swapoff -a # 永久关闭,注释掉/etc/fstab中swap相关的行 sed -i '/swap/s/^/#/' /etc/fstab #配置主机名解析工作 vi /etc/hosts #添加以下两行 192.168.116.100 cloud.kubeedge 192.168.116.200 edge.kubeedge # 安装chrony dnf install -y chrony systemctl start chronyd systemctl enable chronyd # 查看时间同步状态 chronyc sources -v

二. 搭建k8s集群

1. 由于没有本地离线包,先安装docker服务

yum -y install docker #启动docker并设置为开机启动 systemctl enable docker systemctl start docker

2. 修改镜像源,添加加速器,并尝试拉取hello-world

cat > /etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://12d3a42a61bd4bbcbd2578ec4cb58f1e.mirror.swr.myhuaweicloud.com"] } EOF 重新加载服务 systemctl daemon-reload systemctl restart docker docker version docker run hello-world

3. 安装K8S

所有节点修改配置文件

cat > /etc/docker/daemon.json <<EOF { "registry-mirrors": ["https://12d3a42a61bd4bbcbd2578ec4cb58f1e.mirror.swr.myhuaweicloud.com"], "exec-opts": ["native.cgroupdriver=systemd"] } EOF

所有节点重启Docker

systemctl daemon-reload systemctl restart docker

所有节点配置,将桥接的IPv4流量传递到iptables的链

modprobe br_netfilter cat > /etc/sysctl.d/k8s.conf << EOF net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 EOF

所有节点配置生效

sysctl -p /etc/sysctl.d/k8s.conf

所有节点添加阿里云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

仅需master节点安装k8s组件
kubelet 运行在 Cluster 所有节点上,负责启动 Pod 和容器。kubectl 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。

yum install -y kubelet-1.23.1 kubeadm-1.23.1 kubectl-1.23.1 systemctl enable kubelet systemctl start kubelet

安装k8s时会联网下载很多镜像,建议使用离线方式,在所有节点将提前下载的镜像包导入

docker load -i k8s-v1.23.tar.gz docker load -i flannel.tar.gz

初始化集群

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

仅master节点操作,根据提示执行如下命令:

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

随后部署flannel插件,若联网无法正常下载,先将kube-flannel.yml文件上传到master的/root目录

kubectl apply -f kube-flannel.yml

再安装一个CNI网络插件

kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.24.5/manifests/calico.yaml

自此,master节点成功加入集群

Kubectl get nodes


四. 欧拉系统搭建cloudcore

1. 第一步先进行cloudcore的安装

首先在一台能访问外网的机器上,下载所需的 Docker 镜像。

需要下载 KubeEdge 1.15.0 版本 cloudcore的镜像及其可能依赖的基础镜像(bash

# 在可联网的机器上执行 docker pull kubeedge/cloudcore:v1.15.0 docker pull registry.aliyuncs.com/google_containers/pause:3.9

2. 使用keadm初始化cloudcore

keadm init --advertise-address="192.168.116.100" \ --kubeedge-version=1.15.0 \ --kube-config=/root/.kube/config

3. 添加污点容忍

为 cloudcore的 Deployment 添加容忍规则,即修改 cloudcore的 Deployment 配置,使其包含对 Master 节点污点的容忍。

#编辑 cloudcore的 Deployment: kubectl edit deployment -n kubeedge cloudcore #在编辑器中找到 spec.template.spec部分,在其中添加 tolerations字段,内容如下: spec: template: spec: tolerations: - key: node-role.kubernetes.io/master operator: Exists effect: NoSchedule

# ... 以下是原有的 containers, volumes 等其他配置

保存并退出编辑器 (在 vi 中按 Esc,然后输入 :wq并回车)。

Kubernetes 会自动应用更新,并重新创建 cloudcorePod。新的 Pod 将能够容忍 Master 节点的污点并被成功调度。稍等片刻,再次检查 Pod 状态:

kubectl get pods -n kubeedge -w

4. 给出token,将token留在后续任务

keadm gettoken


五. 欧拉系统搭建edgecore

1. 安装docker全套服务

sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo sudo sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo sudo dnf install -y docker-ce docker-ce-cli containerd.io sudo systemctl start docker sudo systemctl enable docker

2. 安装并配置cri-dockerd

# 下载(请替换为实际的版本号和架构) wget https://github.com/Mirantis/cri-dockerd/releases/tag/v0.3.13/cri-dockerd-0.3.13-3.el8.x86_64.rpm # 安装 sudo rpm -ivh cri-dockerd-0.3.13-3.el8.x86_64.rpm # 启动服务 sudo systemctl daemon-reload sudo systemctl enable cri-docker sudo systemctl start cri-docker #验证服务,确保运行状态 sudo systemctl status cri-docker ls -la /var/run/cri-dockerd.sock

3. 在可联网的机器上拉取三个镜像,可能要做代理

docker pull kubeedge/installation-package:v1.15.0 docker pull kubeedge/pause:3.6 docker pull registry.aliyuncs.com/google_containers/pause:3.9 docker tag registry.aliyuncs.com/google_containers/pause:3.9 registry.k8s.io/pause:3.9

4.安装cni网络服务

wget https://github.com/containernetworking/plugins/releases/download/v1.4.0/cni-plugins-linux-amd64-v1.4.0.tgz #解压并且安装 mkdir -p /opt/cni/bin tar -zxvf cni-plugins-linux-amd64-v1.4.0.tgz -C /opt/cni/bin #配置CNI网络 mkdir -p /etc/cni/net.d #创建bridge网络 #将以下内容保存为 /etc/cni/net.d/10-containerd-net.conflist: { "cniVersion": "0.4.0", "name": "containerd-net", "plugins": [ { "type": "bridge", "bridge": "cni0", "isGateway": true, "ipMasq": true, "ipam": { "type": "host-local", "ranges": [ [{ "subnet": "10.88.0.0/16" }] ], "routes": [ { "dst": "0.0.0.0/0" } ] } } ]}

5. 最后edgecore加入集群

keadm join --cloudcore-ipport=192.168.116.100:10000 \ --token=6a9950f0bdb9c8fd6b476768cdce2e9e583171182a262910ebc6b5290328db9e.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NzMzNjYzMTl9.ZSJ1O9Df9Dz1eF80KJL7iqPR_v2zb9hZZ5XwNRCKeq8 \ --kubeedge-version=1.15.0 \ --with-mqtt=false \ --edgenode-name=edge.kubeedge \ --remote-runtime-endpoint=unix:///var/run/cri-dockerd.sock