[Kubernetes]node节点pod无法启动/节点删除网络重置

本文详细记录了在Kubernetes集群中遇到的网络配置冲突问题,特别是关于CNI插件设置桥接地址失败的情况。文章提供了详细的错误日志分析,以及解决此问题的一系列步骤,包括重置Kubernetes服务、清理网络配置和重新加入节点。

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

node1之前反复添加过,添加之前需要清除下网络

root@master1:/var/lib/kubelet# kubectl get pod -o wide
NAME                   READY     STATUS              RESTARTS   AGE       IP           NODE
nginx-8586cf59-6zw9k   1/1       Running             0          9m        10.244.3.3   node2
nginx-8586cf59-jk5pc   0/1       ContainerCreating   0          9m        <none>       node1
nginx-8586cf59-vm9h4   0/1       ContainerCreating   0          9m        <none>       node1
nginx-8586cf59-zjb84   1/1       Running             0          9m        10.244.3.2   node2
root@node1:~# journalctl -u kubelet
 failed: rpc error: code = Unknown desc = NetworkPlugin cni failed to set up pod "nginx-8586cf59-rm4sh_default" network: failed to set bridge addr: "cni0" already has an IP address different from 10.244.2.1/24
12252 cni.go:227] Error while adding to cni network: failed to set bridge addr: "cni0" already

排查节点日志:journalctl  -u kubelet

Nov 15 09:03:15 mvxl0851 kubelet[783]: E1115 09:03:15.577421     783 cni.go:259] Error adding network: failed to set bridge addr: "cni0" already has an IP address different from 10.16.2.1/24
Nov 15 09:03:15 mvxl0851 kubelet[783]: E1115 09:03:15.577465     783 cni.go:227] Error while adding to cni network: failed to set bridge addr: "cni0" already has an IP address different from 10.16.2.1/24
Nov 15 09:03:15 mvxl0851 kubelet[783]: E1115 09:03:15.652288     783 remote_runtime.go:92] RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = NetworkPlugin cni failed to set up pod "htt
Nov 15 09:03:15 mvxl0851 kubelet[783]: E1115 09:03:15.652386     783 kuberuntime_sandbox.go:54] CreatePodSandbox for pod "httpd-app-5fbccd7c6c-khnj2_default(8a6c7915-e871-11e8-af2a-0050568a39f2)" failed: rpc er
Nov 15 09:03:15 mvxl0851 kubelet[783]: E1115 09:03:15.652411     783 kuberuntime_manager.go:647] createPodSandbox for pod "httpd-app-5fbccd7c6c-khnj2_default(8a6c7915-e871-11e8-af2a-0050568a39f2)" failed: rpc e
Nov 15 09:03:15 mvxl0851 kubelet[783]: E1115 09:03:15.652516     783 pod_workers.go:186] Error syncing pod 8a6c7915-e871-11e8-af2a-0050568a39f2 ("httpd-app-5fbccd7c6c-khnj2_default(8a6c7915-e871-11e8-af2a-00505
Nov 15 09:03:16 mvxl0851 kubelet[783]: W1115 09:03:16.266688     783 pod_container_deletor.go:77] Container "2af4863fef146c5be51a704837c7943c3beab015fbd5cc2c705caee7216f5a6f" not found in pod's containers
Nov 15 09:03:18 mvxl0851 kubelet[783]: E1115 09:03:18.147904     783 cni.go:259] Error adding network: failed to set bridge addr: "cni0" already has an IP address different from 10.16.2.1/24
Nov 15 09:03:18 mvxl0851 kubelet[783]: E1115 09:03:18.147970     783 cni.go:227] Error while adding to cni network: failed to set bridge addr: "cni0" already has an IP address different from 10.16.2.1/24
Nov 15 09:03:18 mvxl0851 kubelet[783]: E1115 09:03:18.202769     783 remote_runtime.go:92] RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = NetworkPlugin cni failed to set up pod "htt
Nov 15 09:03:18 mvxl0851 kubelet[783]: E1115 09:03:18.202868     783 kuberuntime_sandbox.go:54] CreatePodSandbox for pod "httpd-app-5fbccd7c6c-khnj2_default(8a6c7915-e871-11e8-af2a-0050568a39f2)" failed: rpc er
Nov 15 09:03:18 mvxl0851 kubelet[783]: E1115 09:03:18.202896     783 kuberuntime_manager.go:647] createPodSandbox for pod "httpd-app-5fbccd7c6c-khnj2_default(8a6c7915-e871-11e8-af2a-0050568a39f2)" failed: rpc e
Nov 15 09:03:18 mvxl0851 kubelet[783]: E1115 09:03:18.203047     783 pod_workers.go:186] Error syncing pod 8a6c7915-e871-11e8-af2a-0050568a39f2 ("httpd-app-5fbccd7c6c-khnj2_default(8a6c7915-e871-11e8-af2a-00505
Nov 15 09:03:18 mvxl0851 kubelet[783]: W1115 09:03:18.332581     783 pod_container_deletor.go:77] Container "780e7ab6407c660cb6e4b4b0696fb24a9ba3b605b0c5e005ea4f51679f7eaf28" not found in pod's containers
Nov 15 09:03:19 mvxl0851 kubelet[783]: I1115 09:03:19.301582     783 reconciler.go:191] operationExecutor.UnmountVolume started for volume "default-token-qwrr2" (UniqueName: "kubernetes.io/secret/8a6c7915-e871-
Nov 15 09:03:19 mvxl0851 kubelet[783]: I1115 09:03:19.305596     783 operation_generator.go:633] UnmountVolume.TearDown succeeded for volume "kubernetes.io/secret/8a6c7915-e871-11e8-af2a-0050568a39f2-default-to
Nov 15 09:03:19 mvxl0851 kubelet[783]: I1115 09:03:19.402052     783 reconciler.go:297] Volume detached for volume "default-token-qwrr2" (UniqueName: "kubernetes.io/secret/8a6c7915-e871-11e8-af2a-0050568a39f2-d
Nov 15 09:03:20 mvxl0851 kubelet[783]: E1115 09:03:20.188278     783 cni.go:259] Error adding network: failed to set bridge addr: "cni0" already has an IP address different from 10.16.2.1/24
Nov 15 09:03:20 mvxl0851 kubelet[783]: E1115 09:03:20.188325     783 cni.go:227] Error while adding to cni network: failed to set bridge addr: "cni0" already has an IP address different from 10.16.2.1/24
Nov 15 09:03:20 mvxl0851 kubelet[783]: E1115 09:03:20.254502     783 remote_runtime.go:92] RunPodSandbox from runtime service failed: rpc error: code = Unknown desc = NetworkPlugin cni failed to set up pod "htt
Nov 15 09:03:20 mvxl0851 kubelet[783]: E1115 09:03:20.254585     783 kuberuntime_sandbox.go:54] CreatePodSandbox for pod "httpd-app-5fbccd7c6c-khnj2_default(8a6c7915-e871-11e8-af2a-0050568a39f2)" failed: rpc er
Nov 15 09:03:20 mvxl0851 kubelet[783]: E1115 09:03:20.254612     783 kuberuntime_manager.go:647] createPodSandbox for pod "httpd-app-5fbccd7c6c-khnj2_default(8a6c7915-e871-11e8-af2a-0050568a39f2)" failed: rpc e
Nov 15 09:03:20 mvxl0851 kubelet[783]: E1115 09:03:20.254712     783 pod_workers.go:186] Error syncing pod 8a6c7915-e871-11e8-af2a-0050568a39f2 ("httpd-app-5fbccd7c6c-khnj2_default(8a6c7915-e871-11e8-af2a-00505
Nov 15 09:03:20 mvxl0851 kubelet[783]: W1115 09:03:20.410453     783 pod_container_deletor.go:77] Container "73e22f0f076e0472b31cfc83ed6f855d50048993e8bbd8508d2886ad3ea45b48" not found in pod's containers
Nov 15 09:03:27 mvxl0851 kubelet[783]: E1115 09:03:27.860718     783 file.go:76] Unable to read manifest path "/etc/kubernetes/manifests": path does not exist, ignoring

重点关注:

cni.go:259] Error adding network: failed to set bridge addr: "cni0" already has an IP address different from 10.16.2.1/24

在Node上执行如下操作:

重置kubernetes服务,重置网络。删除网络配置,link

kubeadm reset
systemctl stop kubelet
systemctl stop docker
rm -rf /var/lib/cni/
rm -rf /var/lib/kubelet/*
rm -rf /etc/cni/
ifconfig cni0 down
ifconfig flannel.1 down
ifconfig docker0 down
ip link delete cni0
ip link delete flannel.1
systemctl start docker

获取master的join token

kubeadm token create --print-join-command

加入节点

kubeadm join --token 55c2c6.2a4bde1bc73a6562 192.168.1.144:6443 --discovery-token-ca-cert-hash sha256:0fdf8cfc6fecc18fded38649a4d9a81d043bf0e4bf57341239250dcc62d2c832
<think>首先,用户的问题是关于Kubernetes控制平面节点角色配置和资源。用户提到了“control-plane node role configuration and resources”,所以我需要根据系统级指令来回答。 系统级指令: - 行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 用户提供的引用是关于Kubernetes集群搭建的,具体包括: - 引用[1]: 移除控制平面节点的污点(taints)。 - 引用[2]: 节点状态显示为Ready。 - 引用[3]: kubeadm使用配置文件保存参数。 - 引用[4]: 环境清理和重置节点。 - 引用[5]: 使用pacemaker搭建高可用。 用户意图似乎是查找与Kubernetes控制平面节点相关的资源或配置,包括角色配置、污点管理、高可用性等。 我的回答需要: 1. **结构清晰**:逐步解释控制平面节点的角色配置和资源。 2. **使用中文**。 3. **正确使用LaTeX**:如果有数学表达式,但在这个上下文中可能没有复杂的数学,所以可能不需要。 4. **生成相关问题**:在回答结束后添加相关问题部分。 5. **添加引用标识**:在引用内容时,在末尾添加如[^1]的标识。 关键点从引用中提取: - 控制平面节点有污点(taints),如`node-role.kubernetes.io/control-plane:NoSchedule`,这阻止了Pod调度。 - 可以通过`kubectl taint`命令移除污点。 - kubeadm用于初始化集群和加入节点。 - 高可用性可以通过工具如pacemaker实现。 回答结构: 1. **介绍控制平面节点角色**:解释什么是控制平面节点及其作用。 2. **配置角色**:如何配置节点为控制平面角色。 3. **污点管理**:如何管理污点以允许Pod调度。 4. **资源考虑**:讨论控制平面节点所需的资源(CPU、内存等)。 5. **高可用性**:简要提及如何实现高可用。 6. **引用标识**:在适当的地方添加引用。 最后,生成相关问题。 确保回答真实可靠:基于Kubernetes官方文档和常见实践。</think>### Kubernetes 控制平面节点角色配置与资源管理 在 Kubernetes 集群中,控制平面节点(Control Plane Node)负责管理集群的核心组件,如 API Server、Scheduler、Controller Manager 等。这些节点通常被标记为 `control-plane` 角色,并可能带有污点(Taints)以防止普通工作负载调度到其上,确保集群稳定性。下面我将逐步解释控制平面节点的角色配置、资源管理及相关操作,确保回答基于 Kubernetes 官方文档和实际最佳实践。 #### 1. **控制平面节点角色配置** - **角色定义**:在 Kubernetes 中,节点角色通过标签(Labels)和污点(Taints)来定义。控制平面节点通常带有 `node-role.kubernetes.io/control-plane:NoSchedule` 污点,这表示默认情况下 Pod 不会调度到这些节点上,除非 Pod 有对应的容忍(Tolerations)。 - 例如,从引用中可以看到,节点 `master1` 和 `master2` 初始状态带有污点: ```bash $ kubectl describe node master1 | grep Taints Taints: node-role.kubernetes.io/control-plane:NoSchedule ``` 这可以防止非系统 Pod 调度到控制平面节点上[^1]。 - **配置方法**:使用 `kubeadm` 工具初始化集群时,会自动为控制平面节点添加污点。如果需要修改污点(例如允许某些 Pod 调度),可以使用 `kubectl taint` 命令: - 移除污点: ```bash $ kubectl taint node master1 node-role.kubernetes.io/control-plane- node/master1 untainted ``` 这会使节点变为可调度状态[^1]。 - 添加污点: ```bash $ kubectl taint node master1 node-role.kubernetes.io/control-plane:NoSchedule ``` - **配置文件支持**:`kubeadm` 允许通过配置文件初始化集群,参数以 ConfigMap 形式保存在集群中,便于后续查询和升级[^3]。例如,配置文件可以指定节点角色和初始污点。 #### 2. **资源管理** - **硬件资源需求**:控制平面节点需要足够的 CPU、内存和存储资源来运行核心组件。典型资源要求包括: - **CPU**:至少 2 核(建议 4 核以上),以处理 API Server 的高并发请求。 - **内存**:至少 2GB(建议 4GB 以上),用于运行 etcd 和其他组件。 - **存储**:SSD 磁盘用于 etcd 数据存储,确保低延迟和高可用性。 - 资源不足可能导致集群不稳定或组件崩溃,如 API Server 超时[^2]。 - **资源监控与优化**: - 使用 `kubectl top nodes` 监控节点资源使用: ```bash $ kubectl top nodes NAME CPU(cores) MEMORY(bytes) master1 150m 1.2Gi ``` - 如果资源不足,可以: - 垂直扩展:增加节点资源(CPU/内存)。 - 水平扩展:添加更多控制平面节点以实现高可用(HA)。 - 从引用中看,节点状态为 `Ready` 表示资源充足且组件正常运行[^2]。 #### 3. **高可用性配置** - 控制平面节点的高可用(HA)是生产环境的关键。常见方法包括: - **使用负载均衡器**:如 HAProxy,将流量分发到多个控制平面节点。引用中展示了通过 Pacemaker 实现 HAProxy 的高可用: ```bash $ yum install haproxy -y $ scp haproxy.cfg server8:/etc/haproxy/ ``` 这确保了 API Server 的冗余和故障转移[^5]。 - **多节点部署**:使用 `kubeadm` 初始化多个控制平面节点: ```bash $ kubeadm init --control-plane-endpoint "LOAD_BALANCER_IP:PORT" ``` 然后加入其他节点。 - 如果节点故障,可以通过环境清理和重置恢复: ```bash $ kubectl delete nodes server2 $ kubeadm reset $ reboot ``` 这有助于维护集群健康[^4]。 #### 4. **最佳实践与注意事项** - **安全隔离**:保留控制平面节点的污点,除非必要(如部署监控 Pod),避免普通工作负载影响核心组件。 - **资源预留**:使用 Kubernetes 资源配额(Resource Quotas)为系统组件预留资源,防止资源争抢。 - **备份与恢复**:定期备份 etcd 数据,以防控制平面故障。 - 从实际部署看,控制平面节点配置不当可能导致调度问题或集群不稳定,因此建议在测试环境验证[^1][^2]。 通过以上步骤,您可以有效配置和管理 Kubernetes 控制平面节点的角色与资源。如果遇到具体问题(如污点移除后节点仍不可调度),请检查组件日志(如 `kube-scheduler`)。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智能体格

你的鼓将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值