首页 文章

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

提问于
浏览
2

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

  • 可抢占节点(~4x f1-micro)

  • 专用入口节点

  • 节点自动升级

  • 节点自动修复

  • 自动缩放节点池

  • 区域集群

  • stackdriver healthchecks

我因此创建了可预占的节点池(在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

一切都很好,大部分时间都很好 . 但是,每天大约3到4次,我会收到有关在可抢占节点上运行的某些服务的停机时间的 Health 检查通知 . (确切地说,当节点被回收/再生时,每24小时我会期望ONCE . 但不是3次 . )

当我收到电子邮件通知时,群集已经恢复,但是当检查 kubectl get nodes 时,我可以看到某些可占用节点上的"age"约为5分钟,匹配大约 . 停电的时间 .

我不确定在哪里可以找到正在发生的事情的日志,或者为什么重置被触发(设置不当 resources 设置?意外的预先调度?"auto-repair"?)我希望这些都在堆栈驱动程序的某处,但我不能找到WHERE . Kubernetes / GKE日志非常繁琐,一切都在INFO级别(隐藏错误文本,或者错误日志在其他地方) .

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

2 回答

  • 1

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

    这意味着可抢占的实例每24小时将死不少于一次,但3-4次仍然在预期之内 . 先发制人并不保证也不会在任何地方声明只有一次 .

  • 1

    我能够通过强力过程解决这个问题,在运行相同工作负载的GKE中创建多个测试节点池(我没有打扰连接入口,DNS等),并改变提供给 gcloud beta container node-pools create 的选项 .

    由于我为这些实验付费,我并没有同时运行它们,尽管这会产生更快的答案 . 我也更喜欢保留 --preemptible 选项的测试,因为这会显着影响成本 .

    我的结果确定问题与 --enable-autorepair 参数有关,并且删除它会将失败的 Health 检查减少到可接受的水平(预期的可抢占节点) .

相关问题