KubeEdge v1.20.0 集群部署与配置指南

作者:Administrator 发布时间: 2025-11-22 阅读量:14 评论数:0

本指南详细说明了从安装工具、初始化云端、配置边缘端网络到最终接入集群的全过程。

1. 下载与安装 keadm

执行范围: 所有节点(云端 Master 和 边缘端 Edge)

下载 KubeEdge 的官方管理工具 keadm 并安装到系统路径。

# 下载 v1.20.0 版本
wget https://github.com/kubeedge/kubeedge/releases/download/v1.20.0/keadm-v1.20.0-linux-amd64.tar.gz

# 解压
tar -vxzf keadm-v1.20.0-linux-amd64.tar.gz

# 移动二进制文件并赋予执行权限
mv keadm-v1.20.0-linux-amd64/keadm/keadm /usr/local/bin/
chmod +x /usr/local/bin/keadm

# 验证安装
keadm version

2. 初始化云节点 (CloudCore)

执行范围: 云端 Master 节点

2.1 初始化 CloudCore

--advertise-address 参数必须包含边缘节点能够访问到的所有云端监听 IP。

keadm init \
  --advertise-address="192.168.6.112,192.168.6.102,192.168.6.126,192.168.6.234,192.168.6.180" \
  --kubeedge-version=v1.20.0 \
  --kube-config=$HOME/.kube/config

2.2 获取加入令牌 (Token)

边缘节点加入集群时需要此凭证。

keadm gettoken

输出示例:

4894e314e5dcf724eeafeec29e2df7dc46e0cdc79a764b24114e38b09e564fee.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NjM3OTYwODV9.dWpP5dpkUw--BCB4gVLHy7IASmp0BtC1ndnQp_5SpAQ


3. 边缘节点环境配置 (EdgeNode)

执行范围: 边缘端 Edge 节点

3.1 初始化 Containerd 配置

# 备份原有配置
mv /etc/containerd/config.toml /etc/containerd/config.toml.bak

# 生成默认配置
containerd config default > /etc/containerd/config.toml

# 重启服务
systemctl restart containerd

3.2 安装 CNI 插件

wget https://github.com/containernetworking/plugins/releases/download/v1.3.0/cni-plugins-linux-amd64-v1.3.0.tgz
mkdir -p /opt/cni/bin
tar -zxvf cni-plugins-linux-amd64-v1.3.0.tgz -C /opt/cni/bin/

3.3 配置 CNI 网络 (关键步骤)

⚠️ 警告:网段规划至关重要

由于 KubeEdge 边缘节点通常采用 host-local 的 IPAM 模式,每一台边缘节点必须配置唯一的网段,严禁重复,否则会导致不同节点间的 Pod IP 冲突。

  • 可用范围: 100.6.0.0/24 ~ 100.6.254.0/24
  • 规划示例:
    • Edge节点 A: 使用 100.6.1.0/24
    • Edge节点 B: 使用 100.6.2.0/24
    • Edge节点 C: 使用 100.6.3.0/24

请根据当前节点的规划,修改下方配置文件中 subnet 的值:

mkdir -p /etc/cni/net.d

# 下面的 subnet "100.6.1.0/24" 仅为示例,请根据实际节点规划修改!
cat <<EOF > /etc/cni/net.d/10-containerd-net.conflist
{
  "cniVersion": "1.0.0",
  "name": "containerd-net",
  "plugins": [
    {
      "type": "bridge",
      "bridge": "cni0",
      "isGateway": true,
      "ipMasq": true,
      "promiscMode": true,
      "ipam": {
        "type": "host-local",
        "ranges": [
          [{
            "subnet": "100.6.1.0/24" 
          }]
        ],
        "routes": [
          { "dst": "0.0.0.0/0" }
        ]
      }
    },
    {
      "type": "portmap",
      "capabilities": {"portMappings": true}
    },
    {
      "type": "loopback"
    }
  ]
}
EOF

3.5 dns 配置

如果在edge端的容器无法访问外网则可以查看本地的dns
如果dns配置为127.0.0.53,容器会继承这个配置,但是容器本身没有启用dns,所以无法解析域名,修复的方法如下。

在宿主机上,将 /etc/resolv.conf 的软链接指向 systemd 维护的真实文件(包含真实上游 DNS IP 的文件),而不是 stub 文件。

# 1. 备份原来的
mv /etc/resolv.conf /etc/resolv.conf.bak

# 2. 重新建立软链接,指向由 systemd-resolved 维护的真实 DNS 文件
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf

# 3. 检查内容,现在应该能看到真实的 nameserver (如 8.8.8.8 或运营商 IP),而不是 127.0.0.53
cat /etc/resolv.conf

效果: 做完这一步后,如果你在 YAML 中设置 dnsPolicy: Default,Kubelet 会将这个真实的 resolv.conf 复制进 Pod,Pod 就能正常上网了。

3.5 应用网络配置

# 1. 停止旧网桥
ip link set cni0 down

# 2. 删除旧网桥 (重启 containerd 后会自动重建)
ip link delete cni0

# 3. 检查是否清理干净 (应提示 "Device does not exist")
ip addr show cni0

# 4. 重启 Containerd 加载新配置
systemctl restart containerd

# 5. 重启 EdgeCore (如果已运行)
systemctl restart edgecore

4. 加入集群

执行范围: 边缘端 Edge 节点

使用步骤 2.2 获取的 Token 加入。

keadm join \
  --cloudcore-ipport=192.168.6.180:10000 \
  --token=4894e314e5dcf724eeafeec29e2df7dc46e0cdc79a764b24114e38b09e564fee.eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3NjM3OTYwODV9.dWpP5dpkUw--BCB4gVLHy7IASmp0BtC1ndnQp_5SpAQ \
  --kubeedge-version=v1.20.0

5. 调度策略优化:排除边缘节点 DaemonSet

执行范围: 云端 Master 节点

边缘节点通常不需要云端的网络插件(如 Flannel/Calico 的 DaemonSet),需要设置亲和性策略将其排除。

方法:使用 Patch 命令修改

以下命令会给 kube-flannel-ds 增加 nodeAffinity 规则:若节点存在 node-role.kubernetes.io/edge 标签,则不调度。

kubectl patch daemonset kube-flannel-ds -n kube-flannel --type='json' -p='[
  {
    "op": "add",
    "path": "/spec/template/spec/affinity/nodeAffinity/requiredDuringSchedulingIgnoredDuringExecution/nodeSelectorTerms/0/matchExpressions/-",
    "value": {
      "key": "node-role.kubernetes.io/edge",
      "operator": "DoesNotExist"
    }
  }
]'

注意:如果上述命令报错(提示路径不存在),请使用下面的全量覆盖方式:

kubectl patch daemonset kube-flannel-ds -n kube-flannel -p '
spec:
  template:
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/os
                operator: In
                values:
                - linux
              - key: node-role.kubernetes.io/edge
                operator: DoesNotExist
'

6. 修正 Edge 节点 InternalIP

执行范围: 边缘端 Edge 节点

默认情况下 KubeEdge 可能会上报错误的网卡 IP。如果需要强制指定节点 IP(如管理网 IP),请按以下步骤操作。

6.1 修改配置文件

vim /etc/kubeedge/config/edgecore.yaml

定位到 modules -> edged 区域,修改或添加 nodeIP

modules:
  # ...
  edged:
    # ...
    nodeIP: "192.168.201.1"  # <--- 修改为你需要的实际节点 IP
    clusterDNS: ""
    clusterDomain: ""
    # ...

6.2 重启服务生效

systemctl restart edgecore

6.3 验证 (云端)

回到 Master 节点执行:

kubectl get node -o wide

确认该节点的 INTERNAL-IP 字段已更新为配置的 IP。

评论