【Kubernetes】controller-manager组件状态Unhealthy解决

在执行`kubectl get componentstatuses`时,发现controller-manager状态为Unhealthy,错误消息显示HTTP probe失败。解决方案是删除kube-controller-manager配置文件中`--port=xxxxx`选项,仅保留`--secure-port=10257`,然后重启kube-controller-manager服务。完成重启后,controller-manager状态恢复正常。从1.13版本开始,kube-controller-manager的非安全端口已被废弃,建议使用安全端口进行livenessProbe。

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

【异常提示】使用kubectl获取组件的状态时,提示“controller-manager   Unhealthy   HTTP probe failed with statuscode: 400

$ kubectl get componentstatuses
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME                       STATUS            MESSAGE                                                ERROR
scheduler                  Healthy             ok                             &nb

<think>我们分析用户提供的kubeadm init输出片段: 输出内容显示kubeadm已经完成了控制平面组件的静态Pod清单创建,并进入等待控制平面启动的阶段([wait-control-plane])。在等待40秒后超时([kubelet-check] Initial timeout of 40s passed.),但此时并没有出现“ERROR”或“failed”等错误关键词,因此不能直接判断为报错。 详细解读: 1. 输出显示kubeadm正在等待kubelet启动控制平面的静态Pod(包括kube-apiserver, kube-controller-manager, kube-scheduler, etcd)。 2. 等待超时(40秒)是正常现象,因为控制平面组件的启动可能需要更长时间(尤其是etcd和kube-apiserver)。 3. 该阶段最大等待时间为4分钟(输出中提示:This can take up to 4m0s),所以40秒超时后kubeadm会继续等待,直到4分钟超时或控制平面就绪。 因此,当前状态不是报错,而是正常等待过程。但需要关注后续是否在4分钟内成功启动。 常见原因及解决方案: 1. **资源不足**:Master节点CPU/内存不足(特别是etcd需要足够内存)。 2. **网络问题**:节点之间通信问题,或DNS解析问题。 3. **kubelet故障**:检查kubelet服务状态:`systemctl status kubelet` 4. **镜像拉取失败**:使用`crictl images`或`docker images`检查控制平面组件镜像是否完整(如kube-apiserver:v1.18.8等)。 5. **端口冲突**:确保6443、2379-2380等端口未被占用。 诊断步骤: ```bash # 1. 检查kubelet日志(实时查看) journalctl -u kubelet -f # 2. 检查已拉取的镜像 crictl images | grep 'kube-apiserver\|kube-controller-manager\|kube-scheduler\|etcd' # 3. 检查静态Pod是否已生成 ls /etc/kubernetes/manifests/ # 应存在etcd.yaml, kube-apiserver.yaml等 # 4. 检查容器运行状态 crictl ps -a | grep -E 'apiserver|controller|scheduler|etcd' # 5. 查看进程级端口占用 ss -tulnp | grep -E '6443|2379|2380' ``` 如果4分钟后仍超时,kubeadm会输出错误信息,此时需要根据具体错误进行排查。 结论:当前输出不是报错,是等待过程中的正常提示。 §§相关问题§§ 1. 当kubeadm init在[wait-control-plane]阶段超时4分钟失败时,应如何逐步排查故障? 2. Kubernetes控制平面组件(如etcd)启动失败通常有哪些常见原因? 3. 如何查看kubelet日志以诊断Kubernetes控制平面启动问题? 4. 在资源受限的环境中,如何优化Kubernetes控制平面组件的启动参数? 5. 如何确认Kubernetes静态Pod(Static Pod)的清单是否正确生成?</think>### 分析:这不是报错,而是 Kubernetes 初始化过程中的正常等待阶段 #### 关键状态解读: 1. **正常流程阶段**: - `[kubeconfig] Writing ...`:成功生成集群配置文件 - `[control-plane] Creating static Pod manifest`:控制平面组件配置完成 - `[etcd] Creating static Pod manifest`:etcd 服务配置完成 2. **预期等待提示**: ```bash [wait-control-plane] Waiting for the kubelet to boot up... This can take up to 4m0s [kubelet-check] Initial timeout of 40s passed. ``` - 这是正常等待阶段(最长4分钟) - 40秒提示只是进度通知,**非错误** 3. **警告说明**: ```bash W0707 ... authorization-mode is "Node,RBAC"; using "Node,RBAC" ``` - 这是关于授权模式的**低风险警告** - 表示使用默认安全配置,不影响安装 #### 后续正常输出示例: ```bash [apiclient] All control plane components are healthy after 102 seconds [upload-config] Storing the configuration used in ConfigMap [upload-certs] Skipping phase... [mark-control-plane] Marking the node master as control-plane... ``` #### 需要警惕的真实错误特征: 1. **错误关键词**: - `[ERROR]` - `failed` - `unhealthy` - `crash loop backoff` 2. **异常退出**: - 进程突然终止 - 返回非0退出码 #### 诊断建议: ```bash # 1. 检查kubelet状态(新终端执行) sudo systemctl status kubelet # 2. 查看容器状态 sudo crictl ps -a | grep -E 'apiserver|scheduler|etcd' # 3. 实时监控日志(等待期间) sudo journalctl -u kubelet -f ``` #### 等待策略: 1. **最大等待时间**:4分钟(输出已提示) 2. **网络影响**:首次启动可能需要下载额外镜像 3. **资源需求**:确保节点有足够CPU/内存(etcd至少2核2GB)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

cnskylee

技术分享我是认真的,期待您打赏

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

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

打赏作者

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

抵扣说明:

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

余额充值