Rancher 2.0 - 故障排除和修复“控制器管理器不健康问题”

Posted

技术标签:

【中文标题】Rancher 2.0 - 故障排除和修复“控制器管理器不健康问题”【英文标题】:Rancher 2.0 - Troubleshooting and fixing “Controller Manager Unhealthy Issue” 【发布时间】:2019-07-16 14:10:59 【问题描述】:

我遇到了控制器管理器和调度程序没有响应的问题,这与我发现的 github 问题无关(rancher#11496、azure#173、...)

两天前,我们的 3 节点 HA 集群中的一个节点上的一个 POD 发生了内存溢出。在该 rancher webapp 无法访问之后,我们找到了受感染的 pod,并通过 kubectl 将其缩放为 0。但这需要一些时间,才能弄清楚一切。

从那时起,rancher webapp 工作正常,但控制器管理器和调度程序不断发出警报,无法正常工作。警报不一致,有时它们都在工作,有时它们的健康检查 url 拒绝连接。

NAME                 STATUS      MESSAGE                                                                                     ERROR
controller-manager   Unhealthy   Get http://127.0.0.1:10252/healthz: dial tcp 127.0.0.1:10252: connect: connection refused
scheduler            Healthy     ok                                                                                     
etcd-0               Healthy     "health": "true"                                                                     
etcd-2               Healthy     "health": "true"                                                                     
etcd-1               Healthy     "health": "true"

在受感染的节点上重新启动控制器管理器和调度程序无效。甚至用

重新加载所有组件

docker restart kube-apiserver kubelet kube-controller-manager kube-scheduler kube-proxy 也没有效果。

有人可以帮我找出在不停机的情况下解决问题并解决此问题的步骤吗?

节点托管在 DigitalOcean 上的服务器上,每个服务器具有 4 个内核和 8GB RAM(Ubuntu 16、Docker 17.03.3)。

提前致谢!

【问题讨论】:

共享来自控制器 pod 的日志。它有帮助 感谢您的评论!你能帮我吗?我不知道也无法找到控制器 pod 是问题之一。 kubectl get pods --namespace kube-system 未列出 controller-managerscheduler 实际上kubectl get pods --all-namespaces 似乎没有列出任何类似于“控制器管理器”的东西,或者我真的不知道我在寻找什么...... 它位于 kube-system 命名空间中 好吧,也许这就是问题所在.. kubectl get pods --namespace kube-system 返回这些 Pod canal-XXXXX x3 cert-manager-XXXXX kube-dns-XXXXX kube-dns-autoscaler-XXXXX metrics-server-XXXXX metrics-server-XXXXX rke-ingress-controller-deploy-job-XXXXX rke-kubedns-addon-deploy-job-XXXXX3@34rke-kubedns-addon-deploy-job-XXXXXrke-kubedns-addon-deploy-job-XXXXX8@34@98765@34@798 987654339@这对你有意义吗? 【参考方案1】:

首先要查看的是您的日志...您可以导出以下日志并附加它们吗?

/var/log/kube-controller-manager.log

控制器管理器是一个端点,所以你需要做一个“获取端点”。您可以运行以下命令吗:

kubectl -n kube-system get endpoints kube-controller-manager

kubectl -n kube-system describe endpoints kube-controller-manager

kubectl -n kube-system get endpoints kube-controller-manager -o jsonpath='.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader'

【讨论】:

我也有同样的问题 - 日志是空的。和下面的命令输出: $ kubectl -n kube-system get endpoints kube-controller-manager NAME ENDPOINTS AGE kube-controller-manager 5d19h $ kubectl -n kube-system describe endpoints kube-controller-manager Name :kube-controller-manager 命名空间:kube-system 标签: 注释:control-plane.alpha.kubernetes.io/leader: "holderIdentity":"master_cdd7e148..8d6","leaseDur":15,"acqTime ":"2020-11-02","re​​newTime"... 子集:事件: $ kubectl -n kube-system 获取端点 kube-controller-manager -o jsonpath='.metadata.annotations.control-plane\.alpha\.kubernetes\.io/leader' - -->> "holderIdentity":"master_cdd7e148-64cb-4d07-8ec9-1858309988d6","leaseDurationSeconds":15,"acquireTime":"2020-11-02T22:46:50Z","re​​newTime":"2020- 11-03T19:38:30Z","leaderTransitions":6【参考方案2】:

请在主节点中运行此命令

sed -i 's|- --port=0|#- --port=0|' /etc/kubernetes/manifests/kube-scheduler.yaml
sed -i 's|- --port=0|#- --port=0|' /etc/kubernetes/manifests/kube-controller-manager.yaml

systemctl restart kubelet

重启kubelet后,问题就解决了。

【讨论】:

最佳答案,运行良好,可能与此 issue 相关联

以上是关于Rancher 2.0 - 故障排除和修复“控制器管理器不健康问题”的主要内容,如果未能解决你的问题,请参考以下文章

从 .net 2.0 转换到 4.0 后对性能问题进行故障排除

引导过程常见故障排除详解

引导过程常见故障排除详解

Kubernetes 故障排除三板斧:理解管理和预防

双系统引导故障排除

如何将Rancher 2.1.x 从单节点安装迁移到高可用安装