y-tsubouchi.sakura Yesterday at 16:51
@m-aoyama.sakura k8sでノード側が障害の原因となるときにどんな原因が多いとかありますかね? 単にノードが停止するかあるいはネットワークまわりかなど。
m-aoyama.sakura 21 hours ago
基本的にはノードのディスク枯渇・IO性能の低下・CPU枯渇・メモリ枯渇・ネットワークが不安定などによる影響が多いですかね。
いずれもsystem-reserved / kube-reservedというパラメータがKubernetesのノードエージェント(kubelet)にあって、OSやKubernetes向けにある程度のリソースは確保されているので、ノード側の障害にはなりづらいようになってますが。
あとは負荷が高すぎるとノードーエージェント(kubelet)からPodへのヘルスチェックとかもままならなくなるので、ヘルスチェックが落ちて不安定になるとかもあると思います。
他にあったやつだと、バグでcgroupsのゴミファイルが沢山生成されていてディスク枯渇 みたいなのもありました。
あとはノードが突然死した場合、エージェントがただ落ちただけだったり、ネットワークが不安定なだけで、その上でコンテナはまだ動いているかもしれないので、一定時間は別のノードでPodを復旧させないようになってます。
なので、そういった状況が至るところで頻発したりすると、PodのRescheduleもされないので、その間多少は不安定になるかもしれません。
ここらへんのノードがおかしくなった場合、GKEだと自動的にノードを再作成して入れ替えるようになってます。
https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-repair?hl=ja
あとは最近障害で経験してつらい思いをしているのは、特定のKubernetes Node(VM)だけボリュームのアタッチに失敗するやつがいて、ずっと起動できないみたいなのはあります。
Podが何かしらの要因でRescheduleされた際、その状態に落ちてしまうと復旧されない感じになったりします。
またそういったときに別ノードで試してくれればいいんですが、今のKubernetesだと別のところにスケジューリングとかは試してくれないんですよね。。
(なお、アタッチできない原因はHypervisor側のiscsiやlibvirtのバージョンが古いとかそういう感じです。)
Google CloudGoogle Cloud
ノードの自動修復 | Kubernetes Engine ドキュメント | Google Cloud (17 kB)
https://cloud.google.com/images/social-icon-google-cloud-1200-630.png
Also sent to the channel
y-tsubouchi.sakura 19 hours ago
丁寧にありがとうございます!ノード側の障害にはなりづらい上で、まとめるとディスク枯渇・IO性能の低下・CPU枯渇・メモリ枯渇・ネットワークが不安定があると。
ヘルスチェックで不安定
cgroupsのゴミでディスク枯渇。dockerのごみ問題を思い出しました。
死に方がエージェントのみ,ネットワークが不安定なだけ
ボリュームのアタッチに失敗する