【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
相关推荐
凌波粒9 小时前
Linux 面试题篇
linux·运维·服务器
乾元9 小时前
现场运维机器人的工程化落地——移动探针采集 + AI 诊断,在真实网络中的实现路径
运维·网络·人工智能·架构·机器人·自动化
Zsr10239 小时前
K8s核心组件Pod:基础篇
云原生·容器·kubernetes
虾..9 小时前
Linux 线程控制
linux·运维·服务器
镜中人★10 小时前
408操作系统考纲知识点
linux·运维·服务器
拔剑纵狂歌10 小时前
helm-cli安装资源时序报错问题问题
后端·docker·云原生·容器·golang·kubernetes·腾讯云
liulilittle10 小时前
rinetd 端口转发工具技术原理
linux·服务器·网络·c++·端口·通信·转发
fy zs10 小时前
应用层自定义协议和序列化
linux·网络·c++
lytao12310 小时前
MySQL高可用集群部署与运维完整手册
运维·数据库·mysql·database