kubernetes failed to set bridge addr: “cni0“ already has an IP address different from

在CentOS上安装并初始化Kubernetes Master后,尝试获取DNS Pod状态时发现其处于ContainerCreating状态。日志显示cni0网桥已存在不同IP地址的冲突。初始化命令指定了pod网络范围为10.244.0.0/16,并在kube-controller-manager.yaml中也设置了相同的cluster-cidr。为解决此问题,可以尝试修改cni0的IP段或删除并重新创建网桥。删除cni0网桥的命令为`sudo ifconfig cni0 down`和`sudo ip link delete cni0`。了解更多关于CNI的介绍,可参考相关链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

centos
安装kubernetes 后,并初始化mater

执行:

kubectl get pod -A

在这里插入图片描述
dns 状态为 ContainerCreating
看下日志:

kubectl logs coredns-6d8c4cb4d-6b5k2   -n kube-system 

Warning FailedCreatePodSandBox 22m kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container “54846981daca512b465b9f45cabfcf4925bc58be8f3e08a403c9f2b16380bf11” network for pod “coredns-6d8c4cb4d-6b5k2”: networkPlugin cni failed to set up pod “coredns-6d8c4cb4d-6b5k2_kube-system” network: failed to delegate add: failed to set bridge addr: “cni0” already has an IP address different from 10.96.0.1/24
Warning FailedCreatePodSandBox 22m kubelet Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container “af99fa1e894c368ee7b252d792829065ef31b2bb3bc71f90e2d7fa00259c7218” network for pod “coredns-6d8c4cb4d-6b5k2”: networkPlugin cni failed to set up pod “coredns-6d8c4cb4d-6b5k2_kube-system” network: failed to delegate add: failed to set bridge addr: “cni0” already has an IP address different from 10.96.0.1/24
Normal SandboxChanged 8m3s (x411 over 23m) kubelet Pod sandbox changed, it will be killed and re-created.
Warning FailedCreatePodSandBox 3m2s (x540 over 22m) kubelet (combined from similar events): Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container “922a94bed6b5fc4d4bc2015a97af9242f2c0c062380a7d42e6824518ee05bfbe” network for pod “coredns-6d8c4cb4d-6b5k2”: networkPlugin cni failed to set up pod “coredns-6d8c4cb4d-6b5k2_kube-system” network: failed to delegate add: failed to set bridge addr: “cni0” already has an IP address different from 10.244.0.1/24

自己初始化master的命令为:

sudo kubeadm init  --pod-network-cidr=10.244.0.0/16 --image-repository registry.aliyuncs.com/google_containers 

也就是pod 的网络范围为: 10.244.0.0/16
注意:
/etc/kubernetes/manifests/kube-controller-manager.yaml 中,也有以下参数设置pod的网络范围:

    - --cluster-cidr=10.244.0.0/16

在看下本地虚拟网卡cni0的的网络ip:

ifconfig

在这里插入图片描述

解决方法:

方法1: 修改 cni0 的 ip段:
使用 ip address 命令,具体使用可参考相关语法

方法2: 将这个错误的网卡删除掉,系统会自动重建。
下面我们删除错误的cni0,然后让它自己重建,操作过程如下:

sudo ifconfig cni0 down    
sudo ip link delete cni0

结果:
在这里插入图片描述

有关cni 介绍:
https://www.jianshu.com/p/88062fa25083
https://zhuanlan.zhihu.com/p/110648535

<think>好的,我现在需要帮助用户分析他们提供的 Kubernetes 集群状态输出。用户执行了 `kubectl get pods -n kube-system -w`,看到了很多 Pod 的状态问题,比如 Pending 和 Init:ImagePullBackOff。我需要先理解每个部分代表什么,然后逐步分析可能的原因和解决方案。 首先,我会检查系统组件的 Pods,比如 etcd、kube-apiserver 等,这些是控制平面的核心组件。用户提供的输出中,这些 Pod 的状态都是 Running,虽然有些有多次重启,但可能暂时不影响集群的基本功能。不过需要留意是否有频繁重启的问题。 接下来,Calico 相关的 Pods 有问题。calico-kube-controllers 处于 Pending 状态,而 calico-node-4m8n9 处于 Init:ImagePullBackOff。Pending 状态通常是因为资源不足(如 CPU、内存)或者节点选择问题,比如节点有污点而没有对应的容忍。而 Init:ImagePullBackOff 表明在初始化容器阶段拉取镜像失败,可能原因是镜像名称错误、镜像仓库不可访问,或者认证问题。 CoreDNS 的两个 Pod 也处于 Pending 状态,这可能是因为它们依赖的网络插件(Calico)没有正常运行,导致无法调度。因为网络插件未就绪,节点可能没有被正确标记为可调度,或者网络问题导致调度器无法分配 Pod。 现在需要逐步排查: 1. 先解决 Calico 的问题,因为网络插件是集群运行的基础。检查 calico-node 的初始化容器日志,使用 `kubectl logs -n kube-system calico-node-4m8n9 -c <init-container-name>` 查看具体错误。如果是镜像拉取失败,可能需要确认镜像地址是否正确,或者是否存在网络策略阻止了拉取。 2. 如果镜像地址正确,检查节点是否有足够的资源(CPU、内存)来调度这些 Pods。使用 `kubectl describe node` 查看节点资源情况。 3. 对于 Pending 的 Pods,使用 `kubectl describe pod <pod-name> -n kube-system` 查看事件,通常会显示调度失败的原因,比如资源不足或节点选择问题。 4. 确保 Calico 的安装配置正确,特别是镜像仓库的配置。如果使用的是私有仓库,需要配置 ImagePullSecret。 5. 一旦 Calico 正常运行,CoreDNS 的 Pods 应该能够被调度,因为它们通常需要网络插件就绪后才能启动。 此外,用户需要检查节点的状态,使用 `kubectl get nodes` 确认所有节点是否 Ready。如果有节点处于 NotReady 状态,可能需要排查节点上的 kubelet 服务是否正常运行。 总结来说,问题可能集中在 Calico 的镜像拉取失败,导致网络插件无法启动,进而影响整个集群的网络和 DNS 服务。需要逐步检查镜像配置、网络连接以及节点资源情况。</think>根据您提供的 `kubectl get pods -n kube-system -w` 输出,可以看到 Kubernetes 系统命名空间中的关键组件存在异常。以下是逐层分析及解决方案建议: --- ### 一、核心组件状态总览 ```bash etcd-master 1/1 Running # 分布式键值存储(正常) kube-apiserver-master 1/1 Running # API 服务(正常) kube-controller-manager-master 1/1 Running # 控制管理器(正常) kube-scheduler-master 1/1 Running # 调度器(正常) kube-proxy-5bj4v 1/1 Running # 网络代理(正常) ``` 控制平面组件均处于 `Running` 状态,但需注意部分组件有重启记录(如 `RESTARTS=4`),可能暗示偶发性问题。 --- ### 二、异常组件分析 #### 1. Calico 网络插件故障 ```bash calico-kube-controllers-64cc74d646-s8tkh 0/1 Pending # 卡在调度阶段 calico-node-4m8n9 0/1 Init:ImagePullBackOff # 镜像拉取失败 ``` - **根因分析** - `Pending`:调度器无法分配节点,可能由于节点资源不足、节点污点(Taints)未配置容忍(Tolerations)或网络插件未就绪。 - `Init:ImagePullBackOff`:初始化容器拉取镜像失败,常见于镜像名称错误、私有仓库未授权或网络不通。 - **排查步骤** 1. 检查 Calico 节点日志: ```bash kubectl logs -n kube-system calico-node-4m8n9 -c <init-container-name> ``` 2. 验证镜像地址是否正确: ```bash kubectl describe pod calico-node-4m8n9 -n kube-system | grep Image: ``` 3. 确认节点网络可访问镜像仓库(如 `docker.io`、`quay.io`)。 #### 2. CoreDNS 服务异常 ```bash coredns-6d8c4cb4d-56nvs 0/1 Pending # 依赖网络插件就绪 coredns-6d8c4cb4d-njn6w 0/1 Pending ``` - **根因分析** - CoreDNS 需要集群网络(如 Calico)正常运行后才能启动。当前因 Calico 故障,导致 CoreDNS 无法调度。 --- ### 三、解决方案 #### 步骤 1:修复 Calico 镜像拉取问题 - **若镜像地址错误**:更新 Calico 部署文件中的镜像名称。 - **若需配置私有仓库**: ```yaml # 在 Deployment 或 DaemonSet 中添加 imagePullSecrets spec: template: spec: imagePullSecrets: - name: regcred # 提前创建的 Secret ``` #### 步骤 2:检查节点资源与污点 ```bash # 查看节点资源分配 kubectl describe node master # 查看节点污点配置 kubectl describe node master | grep Taints # 若需为 Calico 添加容忍(示例) spec: tolerations: - key: node-role.kubernetes.io/control-plane operator: Exists effect: NoSchedule ``` #### 步骤 3:重启 Calico 组件 ```bash # 删除故障 Pod 触发重建(DaemonSet 会自动重建) kubectl delete pod -n kube-system calico-node-4m8n9 ``` --- ### 四、预期结果 1. Calico 组件恢复正常后,CoreDNS 将自动进入 `Running` 状态。 2. 使用以下命令验证集群状态: ```bash kubectl get pods -n kube-system kubectl get nodes -o wide ``` --- ### 附:常见镜像拉取问题命令 ```bash # 手动测试拉取镜像(需在节点上执行) docker pull calico/cni:v3.24.1 # 查看节点 DNS 解析 nslookup quay.io ``` 如果仍有问题,请提供 `kubectl describe pod calico-node-4m8n9 -n kube-system` 的详细输出以便进一步分析。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值