LoginSignup
3
2

More than 3 years have passed since last update.

Kubernetes中級(1):Pod-Lifecycle

Last updated at Posted at 2020-07-21

Life cycle features

スクリーンショット 2020-07-17 13.54.51.png
Podも人間のようにLife Cycleがある。
Life Cycleは各ステップで行える行動が違う特徴がある。
Podも、そのステップに基づいて主要行動があり、ReadinessProbeやLivenessProbe、Qos、Policyなどいくつかの機能がPodの特定のステップと密接な関係があるのでLife cycleについてよく知っておく必要がある。

Status Struct

スクリーンショット 2020-07-17 13.55.27.png
Podを作成した後、作成内容を見るとStatusがある。
Statusは以下の情報(属性)がある。
・Phase:Podの全体の状態を表す
・Conditions:Podが生成され、実行されるステップがあるが、そのステップと状態を表す
・State(Container Statuses):Podの中にはContainerがあり、ContainerごとStateがあって、Containerの状態を表す

Phase
まず、Podを代表するPhaseは「Pending、Running、Succeeded、Failed、Unknown」5つの状態がある。
上の図はPending状態である(phase:Pending)

Conditions
Conditionsは4つの種類があり(上の図のconditionsのtype)、ReasonというConditionsの詳細を示す項目もある。
statusはTrue/Falseがあり、Falseの場合はreasonに原因が記載される。
上の図の「reason:ContainersNotReady」はContainer作業がまだ進行中であることがわかる。

Containers
Containerの状態を見ると、Stateとして「Wating、Running、Terminated」3つの状態がある。
Conditionsのようにreasonもある。
上の図のstate:watingは、Containerを作成しているからwatingになっている。
原因はImageIDの値がないことを見ればまだImageがDownloadされてないからwatingになっていると考えられる。

Pod Lifecycle Overview

スクリーンショット 2020-07-17 13.56.10.png

Podのメイン状態を表すのはPhaseだが、この状態がどのように変化し、その変化に応じてPodのContainer動作がどうなるのか見てみよう。
【initialized】
20200721_134801.png
上の図のinitContainerというのは本Containerが起動される前に初期値を設定するContainerである。
VolumeやSecurity設定のために事前に設定が必要な場合はPodの作成内容の中にinitContainersという項目で初期化Scriptを設定することができる。
このScriptは本Containerよりも先に実行されて、作業が正常に完了した場合とそもそもScriptを設定しなかった場合は「initialized:True」になるが、失敗すると「initialized:False」になる。

【PodScheduled】
2.png
PodがNodeに設定されると「PodScheduled:True」になる。

【Image Download】
3.png
ContainerにImageをDownloadする。
上記で説明した2つ(initialized, PodScheduled)のProcessが動いている間にはContainerの状態はwatingになり、
reasonはContainerCreatingになる。

【Restart】
5.png
そして本格的にContainerが起動されると、PodとContainerの状態はRunningになる。
通常は正常に起動するが、1つでもContainerが起動中に問題が発生すると全てがRestartになることもある。
その場合のContainerの状態はWatingになり、reasonはCrashLoopBackOffになる。
このようなMessageはKubernetes作業をやっているうちによく目にするMessageである。
PodはContainerのこのような状態をRunningとみなすが、内部のConditionsは[ContainerReady:False]、[Ready:False]になる。

【正常起動】
6.png
全てのContainerが正常に起動されると、Conditionsは全てTrueになる。

【注意事項】
サービスを維持する場合の注意すべきことは、Podの状態がRunningでも、内部のContainerがRunningではない場合があるので
Podだけでなく、Containerの状態もモニタリングする必要がある。

【Job/CronJob】
7.png
PodがJobやCronJobで作成された場合はJobを実行する時はRunningの状態になるが、Jobが完了したらPodの状態はFailedやSucceededになる。
もしJobを実行しているContainerが1つでも問題が発生した場合はPodの状態がFailedになる。
または全てのContainerがCompletedになるとSucceededになる。
この時、PodのConditionsの値が変更されるが、成功または失敗であっても「ContainerReady:False」、「Ready:False」になる。

【Irregular Case】
8.png
Pendingt状態からFailedになるケースもある。PendingやRunning状態でネットワーク障害が発生した場合はPodはUnknown状態になるが問題が早く解決されると既存の状態に戻れるが長い時間問題が解決できなかったらFailedになる。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2