K8S集群部署·CentOS Stream release 10 (Coughlan)
一、本地离线部署 Calico 网络插件
1.导入 Calico 镜像(加载 tar 包)
首先确认容器运行时是 containerd 还是 docker(kubeadm 1.24+ 默认 containerd):
kubectl get node -o wide
# 输出中 CONTAINER-RUNTIME 会显示 docker://... 或 containerd://...
-
如果运行时是 containerd(最常见):
-
cd /root/calico-v3.29.1
ctr -n k8s.io images import calico-v3.29.1.tar -
如果运行时是 docker:
-
cd /root/calico-v3.29.1
docker load -i calico-v3.29.1.tar -
导入后可以验证镜像是否存在:
-
# containerd
crictl images | grep calico
# 或
ctr -n k8s.io images ls | grep calico# docker
docker images | grep calico -
2. 修改 calico.yaml 中的 Pod 网络 CIDR
- vim calico.yaml
- 找到
calico-nodeDaemonSet 中容器calico-node的env部分,修改/添加以下环境变量: - - name: CALICO_IPV4POOL_CIDR
value: "10.244.0.0/16" -
常见位置提示:
搜索CALICO_IPV4POOL_CIDR,如果已存在但被注释,取消注释并改值;
若完全不存在,就在- name: IP或- name: CALICO_IPV4POOL_IPIP等附近自行添加上述两行。
一般不需要改动CALICO_IPV4POOL_IPIP、CALICO_IPV4POOL_VXLAN等选项,保持默认即可。保存退出。
-
3. 部署 Calico 网络插件
- kubectl apply -f calico.yaml
- Calico 资源会创建在
kube-system或calico-system命名空间(取决于你的 YAML 版本)。等待所有 Calico Pod 就绪: - kubectl get pods -n kube-system -l k8s-app=calico-node -w
# 如果没有输出,则可能在其他命名空间,尝试:
kubectl get pods -A | grep calico - 确保每个节点的
calico-node都是Running状态,READY为1/1或2/2(取决于是否包含 flexvol 等)。 -
4. 验证 Pod 网络通信
-
# 查看节点状态(应全部为 Ready)
kubectl get nodes# 查看默认 IP 池是否已更新为 10.244.0.0/16
kubectl get ippools -o yaml | grep cidr
# 或者
calicoctl get ippools -o wide 2>/dev/null || kubectl get ippools default-ipv4-ippool -o yaml | grep cidr -
预期看到
cidr: 10.244.0.0/16。 -
接下来部署两个测试 Pod 验证跨节点通信:
-
# 创建测试命名空间和 Pod
kubectl create ns test
kubectl run test1 --image=busybox:1.28 --restart=Never --namespace=test -- sleep 3600
kubectl run test2 --image=busybox:1.28 --restart=Never --namespace=test -- sleep 3600# 确保两个 Pod 都 Running
kubectl get pods -n test -o wide# 从 test1 ping test2 的 IP(假设 test2 IP 为 10.244.x.y)
kubectl exec -n test test1 -- ping -c 3 <test2-IP> -
若 ping 通,则 Calico 网络已正常工作。
-
常见问题排查
-
Calico-node 一直 CrashLoopBackOff:
检查节点网卡名是否特殊,若有多网卡需要设置IP_AUTODETECTION_METHOD。可在calico-node的 env 中添加: -
- name: IP_AUTODETECTION_METHOD
value: "interface=eth0" # 替换为实际网卡名 -
镜像拉取失败:确认
calico-v3.29.1.tar已正确导入且命名空间正确(containerd 必须用-n k8s.io)。 -
Pod 分配不到 IP:检查
kube-controller-manager的--cluster-cidr=10.244.0.0/16是否存在,以及calico.yaml中CALICO_IPV4POOL_CIDR是否一致。 -
完成以上步骤后,你的 Kubernetes 集群就成功安装了 Calico CNI,所有 Pod 应当能正常获取 IP 并跨节点通信。
更多推荐
所有评论(0)