如何排查 GKE 上频繁重置 Kubernetes 节点的问题?

Pau*_*mer 5 google-cloud-platform kubernetes google-kubernetes-engine

我在 GKE 中有一个测试集群(它运行我的非必要开发服务)。我正在为集群使用以下 GKE 功能:

  • 抢占式节点(~4x f1-micro)
  • 专用入口节点
  • 节点自动升级
  • 节点自动修复
  • 自动缩放节点池
  • 区域集群
  • 堆栈驱动程序运行状况检查

我因此创建了我的可抢占节点池(在 3 个区域的 3 到 6 个实际节点之间自动扩展):

gcloud beta container node-pools create default-pool-f1-micro-preemptible \
    --cluster=dev --zone us-west1 --machine-type=f1-micro --disk-size=10 \
    --preemptible --node-labels=preemptible=true --tags=preemptible \
    --enable-autoupgrade --enable-autorepair --enable-autoscaling \
    --num-nodes=1 --min-nodes=0 --max-nodes=2
Run Code Online (Sandbox Code Playgroud)

大多数情况下,这一切都很好。但是,每天大约 3 到 4 次,我会收到有关在可抢占节点上运行的某些服务停机的健康检查通知。(正是当节点被回收/重新生成时,我每 24 小时期望一次。但不是 3+ 次。)

当我收到电子邮件通知时,集群已经恢复,但是在检查时kubectl get nodes我可以看到某些抢占式节点上的“年龄”约为 5 分钟,与大约 5 分钟匹配。停电时间。

我不确定在哪里可以找到正在发生的事情的日志,或者为什么会触发重置(resources设置不当?意外的抢占式调度?“自动修复”?)我希望这一切都在某个地方的堆栈驱动程序中,但我找不到哪里。Kubernetes/GKE 日志非常啰嗦,一切都在 INFO 级别(隐藏错误文本,或者错误日志在别处)。

我必须说,我确实喜欢设置的自我修复特性,但在这种情况下,我希望能够在回收之前检查损坏的 pod/节点。我还希望在不拆除/重建集群的情况下进行故障排除,尤其是为了避免额外成本。

Rad*_*nka 1

可抢占式虚拟机提供与常规计算实例相同的机器类型和选项,并且持续时间长达 24 小时。

这意味着抢占式实例每 24 小时死亡次数不少于一次,但 3-4 次仍然在预期之内。抢占并不保证或在任何地方声明它只会发生一次。