You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS 8部署microk8s coredns/calico组件启动失败解决方法

问题根因

CentOS 8默认的系统安全、网络规则和Ubuntu默认配置差异较大,是该故障的核心诱因,对应报错逻辑链如下:

  • calico-kube-controllers抛出clusterinformations.crd.projectcalico.org "default" not found错误,本质是Calico初始化阶段CRD资源未正确注入,叠加系统防火墙拦截Calico的BGP、VXLAN通信流量,导致网络插件启动流程中断
  • coredns报就绪探针503、8181端口连接拒绝,是CNI网络未就绪的连锁反应:网络插件未正常运行时,Pod无法分配可用集群IP,coredns无法完成集群内服务端点同步,自然无法通过健康检查
  • 日志中的MissingClusterDNS报错同样是calico异常的衍生问题,网络插件恢复后该报错会自动消失
    另外CentOS 8默认使用nftables作为防火墙后端,microk8s 1.2x之前版本内置的Calico v3.13对nftables兼容性较差,也是触发初始化失败的常见原因。
分步修复方案

1. 配置CentOS 8系统前置环境

所有操作使用root权限执行:

  • 调整SELinux策略,避免安全模块拦截容器网络操作
setenforce 0
sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
  • 配置防火墙规则,生产环境可选择放通所需端口,测试/内网环境可直接关闭firewalld
# 测试环境直接关闭firewalld
systemctl stop firewalld
systemctl disable firewalld

# 生产环境保留firewalld则执行以下规则放通
# firewall-cmd --permanent --add-port=179/tcp    # Calico BGP
# firewall-cmd --permanent --add-port=4789/udp   # Calico VXLAN
# firewall-cmd --permanent --add-port=5473/tcp   # Calico Typha
# firewall-cmd --permanent --add-port=6443/tcp   # K8s API
# firewall-cmd --add-masquerade --permanent
# firewall-cmd --reload
  • 关闭交换分区(K8s系列发行版强制要求)
swapoff -a
sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
  • 切换iptables到legacy模式,解决Calico和nftables的兼容性问题
update-alternatives --set iptables /usr/sbin/iptables-legacy
update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
  • 加载容器网络所需内核模块,配置开机自动加载
modprobe br_netfilter
modprobe ip_vs
modprobe ip_vs_rr
modprobe ip_vs_wrr
modprobe ip_vs_sh
modprobe nf_conntrack

cat > /etc/modules-load.d/calico.conf <<EOF
br_netfilter
ip_vs
ip_vs_rr
ip_vs_wrr
ip_vs_sh
nf_conntrack
EOF

# 配置内核网络转发参数
cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-iptables  = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward                 = 1
EOF
sysctl --system

2. 重置异常组件状态

# 停止microk8s服务
microk8s stop

# 清理残留的Calico异常配置
rm -rf /var/snap/microk8s/common/var/lib/cni/calico
rm -rf /var/snap/microk8s/current/var/run/calico

# 启动服务后强制重建calico和dns组件
microk8s start
microk8s disable dns
microk8s disable calico
microk8s enable calico
microk8s enable dns

3. 极端场景手动补全Calico CRD资源

等待3分钟后执行microk8s kubectl get pods -n kube-system查看状态,如果calico-kube-controllers仍然报ClusterInformation不存在的错误,手动创建缺失资源:

microk8s kubectl apply -f - <<EOF
apiVersion: crd.projectcalico.org/v1
kind: ClusterInformation
metadata:
  name: default
spec:
  calicoVersion: v3.13.2
  clusterGUID: microk8s-default-cluster
  clusterType: k8s,bgp
  datastoreReady: true
EOF
验证结果

等待2-3分钟组件重建完成后,再次查看kube-system命名空间下Pod状态,coredns、calico-node、calico-kube-controllers三个核心组件都会变为1/1 Running状态,无重启、探针失败报错。

内容的提问来源于stack exchange,提问作者sercanezelhan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.02 04:33:24