问题描述
我在生产环境中使用Kuberadm部署了Kubernetes集群v1.18.8,集群设置为3个Master和3个Worker节点,外部Kube-api负载均衡器,etcd驻留在Master节点中,在安装和所有Pod期间都没有发现任何问题在kube系统中正在运行。但是,当我在以下命令下运行时遇到错误时,我会收到错误:
kubectl get cs
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 Unhealthy Get http://127.0.0.1:10251/healthz: dial tcp 127.0.0.1:10251: connect: connection refused
etcd-0 Healthy {"health":"true"}
在进行故障排除时,我发现未在监听端口。
sudo netstat -tlpn |grep kube
tcp 0 0 127.0.0.1:10248 0.0.0.0:* LISTEN 132584/kubelet
tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 133300/kube-proxy
tcp 0 0 127.0.0.1:10257 0.0.0.0:* LISTEN 197705/kube-control
tcp 0 0 127.0.0.1:10259 0.0.0.0:* LISTEN 213741/kube-schedul
tcp6 0 0 :::10250 :::* LISTEN 132584/kubelet
tcp6 0 0 :::6443 :::* LISTEN 132941/kube-apiserv
tcp6 0 0 :::10256 :::* LISTEN 133300/kube-proxy
如果我在开发环境kubernetes集群(v1.17)上检查了相同的内容,则看不到任何问题。
kubectl get cs
NAME STATUS MESSAGE ERROR
controller-manager Healthy ok
scheduler Healthy ok
etcd-0 Healthy {"health":"true"}
sudo netstat -tlpn |grep 102
tcp 0 0 127.0.0.1:10257 0.0.0.0:* LISTEN 2141/kube-controlle
tcp 0 0 127.0.0.1:10259 0.0.0.0:* LISTEN 2209/kube-scheduler
tcp 0 0 127.0.0.1:10248 0.0.0.0:* LISTEN 1230/kubelet
tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 2668/kube-proxy
tcp6 0 0 :::10256 :::* LISTEN 2668/kube-proxy
tcp6 0 0 :::10250 :::* LISTEN 1230/kubelet
tcp6 0 0 :::10251 :::* LISTEN 2209/kube-scheduler
tcp6 0 0 :::10252 :::* LISTEN 2141/kube-controlle
在新创建的保护集群上,我已经部署了Nginx和另一个应用程序,只是为了测试kubernetes组件的行为,没有看到任何错误。 是v1.18版中的预期行为吗?真的很感谢您提供任何帮助。
注意:内部通讯中没有端口被阻塞
解决方法
命令Kubectl get componentstatus
在较新版本(1.19)中已弃用,并且已经存在许多问题。
这里要注意的重点是Kubernetes已禁用了不安全的服务 这些组件适用于较旧的版本(v1.18之前的版本)。因此,我看不到kube-controller和kube-scheduler在1051和1052端口上列出。要恢复此功能,您可以从清单文件中删除--port = 0(不建议这样做,因为这会将其度量标准暴露给整个互联网),您可以在其中查看:
/etc/kubernetes/manifests/
我从清单文件中注释掉--port = 0字段只是为了检查这一点,kubectl get componentstatus命令起作用。