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