我正在听一些建议。
我们在AWS上运行了一个Kubernetes(1.8.x)集群,并使用KOPS进行了设置。 1个主节点和2个节点。
在周末,我们一半的豆荚消失了,并拒绝启动。部署仍然存在,但Pod无法运行。我尝试终止AWS中的节点,并自动将它们替换为Kubernetes,但仍未恢复Pod。
这是一个生产应用程序,因此,将其放置约8个小时以自行恢复(不是)后,我使用KOPS删除了集群,并使用更新版本的Kubernetes成功地重新创建了整个组件。
整个体验非常令人不安,特别是因为我无法找出集群的问题所在。
我需要以下帮助:
非常感谢您的答复。
答案 0 :(得分:0)
我可以/应该检查什么以诊断问题?
journalctl -u kubelet.service
和/或docker logs --tail=150 ${anything_that_talks_to_the_apiserver}
查找错误消息。根据您对x509证书到期的经验,我猜整个集群将充斥着错误消息
很有可能您的节点进入NotReady
,因为kubelet
在固定期限后无法通过apiserver签入。如果您使用的是与apiserver通信的SDN,例如某些法兰绒设置或某些calico设置,那么Pod网络连接也将开始失败,这是集群的大屠杀。
首先可以想到是什么引起了该问题?我意识到现在无法精确定位,但请随时进行推测。
证书始终具有有效期,其中包括开始时间和结束时间;结束时间可能非常长-10年,100年,无论如何,但是确实存在,并且当该时间过去时,证书现在无效,任何进行证书验证的人都将拒绝使用它。
如何减轻这种情况的未来风险?
实际上,您可以通过多种方法来监视系统中重要证书的证书到期,其中包括方便使用的prometheus exporter returning probe_ssl_earliest_cert_expiry
,您可以根据该指标设置警报。现代kubernetes(1.8除外)允许集群旋转其 own 证书,从概念上讲完全避开了这一混乱局面。