【Linux运维疑难杂症】k8s集群创建calico网络失败

问题原因

我在学习k8s集群的时候,选择使用calico为我的pod提供网络功能,但是出现了master节点的calico-node无法READY的情况

bash 复制代码
[root@master01 ~]#kubectl -n kube-system get pod -owide
NAME                                       READY   STATUS    RESTARTS       AGE     IP               NODE       NOMINATED NODE   READINESS GATES
calico-kube-controllers-784cc4bcb7-pvlmq   1/1     Running   0              2m52s   172.18.30.65     worker02   <none>           <none>
calico-node-8xp7d                          0/1     Running   0              2m52s   10.0.0.106       master01   <none>           <none>
calico-node-c258k                          1/1     Running   0              2m52s   10.0.0.107       worker01   <none>           <none>
calico-node-xmt4n                          1/1     Running   0              2m52s   10.0.0.108       worker02   <none>           <none>

经过查看calico-node-8xp7d的日志发现了问题,原来是calico默认选择网卡的时候,选择了我的内网卡(我的master有两块网卡,一块对外通信,一块对内)

bash 复制代码
[root@master01 ~]#kubectl -n kube-system logs -f calico-node-8xp7d -c calico-node --tail=200

#报错原因
2026-01-09 14:12:48.571 [INFO][50] monitor-addresses/autodetection_methods.go 103: Using autodetected IPv4 address on interface eth1: 172.16.1.150/24

解决方法

首先我们要删除calico相关pod,因为我是使用的calico.yaml文件创建的calico网络,所以可以使用kubectl delete 删除

bash 复制代码
[root@master01 ~]#kubectl delete -f calico.yaml 

然后修改calico.yaml文件内容,主要是修改calico-node的环境变量,添加一个名为IP_AUTODETECTION_METHOD的值

bash 复制代码
root@master01 ~]#vim calico.yaml 

 containers:    #注意这里一定要看准,是calico-node
        # Runs calico-node container on each Kubernetes node. This
        # container programs network policy and routes on each
        # host.
        - name: calico-node
          image: docker.io/calico/node:v3.24.1
          imagePullPolicy: IfNotPresent
          envFrom:
          - configMapRef:
              # Allow KUBERNETES_SERVICE_HOST and KUBERNETES_SERVICE_PORT to be overridden for eBPF mode.
              name: kubernetes-services-endpoint
              optional: true
          env:
            # Use Kubernetes API as the backing datastore.
            - name: DATASTORE_TYPE
              value: "kubernetes"
            # Wait for the datastore.
            - name: WAIT_FOR_DATASTORE
              value: "true"
            - name: IP_AUTODETECTION_METHOD    #添加一个IP_AUTODETECTION_METHOD,随便加在一个value后就行
              value: "cidr=10.0.0.0/24"

然后再次创建calico网络

bash 复制代码
[root@master01 ~]#kubectl apply -f calico.yaml 

#查看是否全部READY
[root@master01 ~]#kubectl get pod -n kube-system
NAME                                       READY   STATUS    RESTARTS        AGE
calico-kube-controllers-784cc4bcb7-vwrl2   1/1     Running   0               102m
calico-node-6fp2l                          1/1     Running   0               102m
calico-node-7thdb                          1/1     Running   0               102m
calico-node-ngfch                          1/1     Running   0               102m
相关推荐
AlfredZhao1 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
运维开发故事2 天前
基于 Arthas 的多集群在线诊断系统设计与实现
kubernetes
戴为沐3 天前
Linux内存扩容指南
linux
zylyehuo3 天前
Linux 彻底且安全地删除文件
linux
用户805533698034 天前
主线 U-Boot 上 RK3506:和闭源 rkbin 拔河的三个隐性契约
linux·嵌入式
用户034095297914 天前
linux fcitx 5 雾凇拼音 设置在中文输入法下仍然输入英文标点
linux
乘云数字DATABUFF4 天前
5分钟部署开源APM Databuff:OpenTelemetry全链路追踪入门实战
运维·后端
Patrick_Wilson4 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
探索云原生5 天前
K8s 1.36 这个 GA 特性,把 initContainer 拉模型的 hack 干掉了
ai·云原生·kubernetes
Web3探索者5 天前
可视化服务器管理和传统命令行区别是什么?新手教程:Linux 运维到底该用图形界面还是 SSH 命令行?
linux·ssh