所有kubectl命令(例如kubectl获取pod和kubectl代理等)均失败,并显示错误消息,表明它无法连接到kubernetes api服务器(api.services.ourdomainname.com)。

是什么引起的:

我们试图在集群中增加一个节点以增加容量。为此,我们运行了以下命令...

$ kops edit ig --name=ppe.services.ourdomainname.com nodes

$ kops upgrade cluster --name ppe.services.ourdomainname.com --yes

$ kops update cluster ppe.services.ourdomainname.com --yes

$ kops rolling-update cluster --yes

我尝试进行滚动更新后发生了问题。本质上,滚动更新在更新主节点时失败。
 WARNING: Deleting pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet: etcd-server-events-ip-xx-xx-60-141.us-west-2.compute.internal, etcd-server-ip-xx-xx-60-141.us-west-2.compute.internal, kube-apiserver-ip-xx-xx-60-141.us-west-2.compute.internal, kube-controller-manager-ip-xx-xx-60-141.us-west-2.compute.internal, kube-proxy-ip-xx-xx-60-141.us-west-2.compute.internal, kube-scheduler-ip-xx-xx-60-141.us-west-2.compute.internal

 pod "dns-controller-xxxx03014-fq2sj" evicted

 pod "masked-tapir-aws-cluster-autoscaler-xxxx6cf8f-fpcqq" evicted

 pod "kubernetes-dashboard-3313488171-t578p" evicted

 node "ip-xx-xx-60-141.us-west-2.compute.internal" drained


 I0501 17:30:23.679575   31176 instancegroups.go:237] Stopping instance "i-024deccc522cc2bf7", node "ip-xxx-xx-60-141.us-west-2.compute.internal", in group "master-us-west-2a.masters.ppe.services.ourdomainname.com".

 I0501 17:35:24.345270   31176 instancegroups.go:161] Validating the cluster.

 I0501 17:35:54.345805   31176 instancegroups.go:209] Cluster did not validate, will try again in "30s" util duration "5m0s" expires: cannot get nodes for "ppe.services.ourdomainname.com": Get https://api.ppe.services.ourdomainname.com/api/v1/nodes: dial tcp xx.xx.147.151:443: i/o timeout. ...

 error validating cluster after removing a node: cluster did not validate within a duation of "5m0s"

此后,kubectl停止工作。经过一些挖掘,然后kops rolling-update cluster --yes --cloudonly
这删除了旧的Ec2节点,并添加了新的EC2节点。但是并没有解决问题。并使情况变得更糟。以前我们的应用程序可以访问我们的服务器,但是运行此命令后,现在即使我们的应用程序也无法访问服务器。从本质上讲,它破坏了nginx入口点,现在AWS ELB开始返回500,表明无法连接。因此,我们的实时服务中断了! :-(

关于如何解决kubernetes集群的任何想法?有什么方法可以找出为什么无法访问k8s api服务器?我们该怎么做才能恢复连接?
非常感谢您的帮助。

最佳答案

分享关于什么是问题以及我们为解决这些问题所做的工作的学习...

看起来像在三月,dockerproject存储库被关闭了,由于kubernetes试图从那里下载某些依赖项,导致启动api服务器失败。也没有ssh键可以将ssh放入这些框,这使其变得更加复杂。另外,master正在使用t2.medium,这会导致问题,因为它的CPU信用用尽了。

我们做了什么:

  • 在kops secret 中添加了新的ssh密钥后更新了集群,以使其与我们的EC2节点相关联,我们可以将其SSH到它们中。
  • 升级了主节点和节点,以使用m5.large和m5a.large
  • 将kubernetes(1.16.8),kubectl(1.18.2),kops(1.16.1),helm等更新为使用最新或更新版本,而不是较旧版本以及mongo副本集依赖项也为新版本( 3.15.0)。
  • 关于amazon-web-services - Kubectl无法访问kubernetes api。 k8s部署无法到达,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61555327/

    10-16 23:10