Amazon ec2 库伯内特斯停电,吊舱刚刚消失,拒绝启动

Amazon ec2 库伯内特斯停电,吊舱刚刚消失,拒绝启动,amazon-ec2,kubernetes,kops,Amazon Ec2,Kubernetes,Kops,我想听听你的建议 我们有一个Kubernetes(1.8.x)集群运行在AWS上,使用KOPS进行设置。1个主节点和2个节点 周末,我们一半的豆荚消失了,拒绝启动。部署仍然存在,但POD无法运行。我尝试终止AWS中的节点,它们被Kubernetes自动替换,但POD仍然没有重新安装 这是一个生产应用程序,因此在让它自己恢复大约8小时后(它没有),我使用KOPS删除了集群,并使用更新版本的Kubernetes成功地重新创建了整个集群 这整个经历相当令人不安,尤其是我无法找出集群的问题所在 我希望得

我想听听你的建议

我们有一个Kubernetes(1.8.x)集群运行在AWS上,使用KOPS进行设置。1个主节点和2个节点

周末,我们一半的豆荚消失了,拒绝启动。部署仍然存在,但POD无法运行。我尝试终止AWS中的节点,它们被Kubernetes自动替换,但POD仍然没有重新安装

这是一个生产应用程序,因此在让它自己恢复大约8小时后(它没有),我使用KOPS删除了集群,并使用更新版本的Kubernetes成功地重新创建了整个集群

这整个经历相当令人不安,尤其是我无法找出集群的问题所在

我希望得到以下方面的帮助:

  • 为了诊断问题,我可以/应该检查什么
  • 首先是什么导致了这个问题?我意识到现在不可能精确定位,但请随意猜测
  • 我如何降低未来发生这种情况的风险
  • 非常感谢您的回复

    为了诊断问题,我可以/应该检查什么

    journalctl-u kubelet.service
    和/或
    docker日志--tail=150${任何与apiserver对话的内容}
    以查找错误消息。根据您对x509证书到期的经验,我猜整个集群都会充斥着错误消息

    由于
    kubelet
    在一个固定的持续时间后未能向apiserver签入,您的节点也很可能进入
    NotReady
    。如果您正在使用与apiserver通信的SDN,例如一些法兰绒设置或一些印花布设置,那么Pod网络也将开始失败,这是一场集群大屠杀

    首先是什么导致了这个问题?我意识到现在不可能精确定位,但请随意猜测

    证书始终有一个生命周期,包括开始时间和结束时间;这个结束时间可能很长——10年,100年,随便什么,但它确实存在,当时间过去后,证书现在无效,任何进行证书验证的人都将拒绝使用它

    我如何降低未来发生这种情况的风险

    实际上,有几种方法可以监视系统中重要证书的证书到期,包括一种方便的方法,允许您根据该指标设置警报。现代的kubernetes(1.8不是)允许集群轮换自己的证书,从概念上讲,完全避免了这种混乱

    为了诊断问题,我可以/应该检查什么

    journalctl-u kubelet.service
    和/或
    docker日志--tail=150${任何与apiserver对话的内容}
    以查找错误消息。根据您对x509证书到期的经验,我猜整个集群都会充斥着错误消息

    由于
    kubelet
    在一个固定的持续时间后未能向apiserver签入,您的节点也很可能进入
    NotReady
    。如果您正在使用与apiserver通信的SDN,例如一些法兰绒设置或一些印花布设置,那么Pod网络也将开始失败,这是一场集群大屠杀

    首先是什么导致了这个问题?我意识到现在不可能精确定位,但请随意猜测

    证书始终有一个生命周期,包括开始时间和结束时间;这个结束时间可能很长——10年,100年,随便什么,但它确实存在,当时间过去后,证书现在无效,任何进行证书验证的人都将拒绝使用它

    我如何降低未来发生这种情况的风险


    实际上,有几种方法可以监视系统中重要证书的证书到期,包括一种方便的方法,允许您根据该指标设置警报。现代的kubernetes(1.8不是)允许集群轮换自己的证书,从概念上讲,完全避免了这一混乱局面。

    什么是“消失”?它们仍然作为对象存在吗?您能为其中几个显示“descripe”命令的结果吗?是的,部署仍然存在,但没有POD正在运行。我无法在集群上运行任何命令,因为我删除了整个组件,以便可以重新创建它。当时我们在replicaset上运行了一个descripe,得到了错误:错误创建:Get:x509:证书已过期或尚未生效dx509:证书已过期或尚未生效是您的问题;如果
    kubelet
    无法与主节点通信,它将使节点处于最后一个已知状态,这将不包括复活被杀死的豆荚;因此,您可能只需要重新颁发您的API服务器证书——不是CA,只是apiserver——如果您重新生成CA,您将不得不使集群中的每个ServiceAccount无效,因为它们在集群的CA的下游是可信的——什么意思是“消失”?它们仍然作为对象存在吗?您能为其中几个显示“descripe”命令的结果吗?是的,部署仍然存在,但没有POD正在运行。我无法在集群上运行任何命令,因为我删除了整个组件,以便可以重新创建它。当时我们在replicaset上运行了一个descripe,得到了错误:错误创建:Get:x509:证书已过期或尚未生效dx509:证书已过期或尚未生效是您的问题;如果
    kubelet
    无法与主节点通信,它将使节点处于最后一个已知状态,这将不包括复活被杀死的豆荚;因此,如果重新生成,您可能只需要重新颁发API服务器证书,而不是CA证书,只是apiserver证书