虚拟机k8s master意外关机后scheduler和controller-manager unhealthy

当公司内网的Kubernetes(k8s)集群Master节点意外宕机后,发现scheduler和controller-manager状态不健康。解决方法是编辑/etc/kubernetes/manifests下的kube-scheduler.yaml和kube-controller-manager.yaml文件,注释掉port=0的参数,从而恢复这两个组件的正常运行。此操作可能与服务端口配置有关。

一次公司的内网测试k8s集群master意外宕机后

kubectl get cs

发现scheduler和controller-manager unhealthy
解决方案;

[root@k8smaster ~]# vim /etc/kubernetes/manifests/kube-controller-manager.yaml
[root@k8smaster ~]# vim /etc/kubernetes/manifests/kube-scheduler.yaml

需注释掉- --port=0这行参数
后即可(个人觉得本质上应该是改变scheduler和controller-manager的yaml文件就可以,这个port=0应该是影响不大的)

### 如何重启 Kubernetes 中的 kube-controller-manager kube-scheduler 组件 在 Kubernetes 集群中,`kube-controller-manager` `kube-scheduler` 是两个关键的核心组件。它们通常以静态 Pod 的形式运行在主节点上,或者通过系统服务(如 systemd)管理。以下是关于如何重启这些组件的详细说明: #### 1. 如果使用静态 Pod 方式启动 当 `kube-controller-manager` `kube-scheduler` 作为静态 Pod 运行时,它们的配置文件通常位于 `/etc/kubernetes/manifests/` 目录下。Kubernetes 的静态 Pod 机制会自动检测该目录中的配置文件变化,并重新启动对应的 Pod。 要重启这些组件,可以删除或修改其对应的静态 Pod 配置文件,例如: ```bash # 删除 kube-controller-manager 的静态 Pod 文件 mv /etc/kubernetes/manifests/kube-controller-manager.yaml /tmp/ sleep 5 # 等待几秒钟让 kubelet 移除旧的 Pod mv /tmp/kube-controller-manager.yaml /etc/kubernetes/manifests/ # 删除 kube-scheduler 的静态 Pod 文件 mv /etc/kubernetes/manifests/kube-scheduler.yaml /tmp/ sleep 5 # 等待几秒钟让 kubelet 移除旧的 Pod mv /tmp/kube-scheduler.yaml /etc/kubernetes/manifests/ ``` 这种方式会触发 kubelet 自动重新创建并启动这些 Pod[^1]。 #### 2. 如果使用 systemd 方式启动 如果 `kube-controller-manager` `kube-scheduler` 是通过 systemd 管理的,则可以直接使用以下命令重启它们: ```bash # 重启 kube-controller-manager systemctl daemon-reload systemctl restart kube-controller-manager systemctl enable kube-controller-manager # 重启 kube-scheduler systemctl daemon-reload systemctl restart kube-scheduler systemctl enable kube-scheduler ``` 上述命令确保了服务被正确重新加载、重启,并设置了开机自启[^2]。 #### 3. 检查组件状态 无论使用哪种方式重启组件,都需要检查它们的状态以确保正常运行: ```bash # 检查 kube-controller-manager 的状态 systemctl status kube-controller-manager # 检查 kube-scheduler 的状态 systemctl status kube-scheduler # 或者通过 kubectl 查看静态 Pod 状态 kubectl get pods -n kube-system ``` #### 4. 手动调整证书配置 如果需要对 `kube-controller-manager` 或 `kube-scheduler` 的配置进行修改(如更新证书),可以通过以下步骤完成: - 创建新的证书文件,例如使用 `cfssl` 工具生成证书[^3]。 - 更新相关的 `.kubeconfig` 文件。 - 修改 `/etc/kubernetes/manifests/` 中的静态 Pod 配置文件或 systemd 的服务配置文件。 #### 5. 处理监控相关问题 如果集群中集成了 Prometheus 并遇到与 `kube-controller-manager` 或 `kube-scheduler` 的监控相关问题,可能需要手动创建相应的 Service 资源。例如: ```yaml # kube-controller-manager-svc.yaml apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/name: kube-controller-manager name: kube-controller-manager namespace: kube-system spec: clusterIP: None ports: - name: https-metrics port: 10257 protocol: TCP targetPort: 10257 selector: component: kube-controller-manager sessionAffinity: None type: ClusterIP ``` ```yaml # kube-scheduler-svc.yaml apiVersion: v1 kind: Service metadata: labels: app.kubernetes.io/name: kube-scheduler name: kube-scheduler namespace: kube-system spec: clusterIP: None ports: - name: https-metrics port: 10259 protocol: TCP targetPort: 10259 selector: component: kube-scheduler sessionAffinity: None type: ClusterIP ``` 应用这些 Service 定义后,Prometheus 的 ServiceMonitor 将能够正确发现并抓取指标数据[^4]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值