自己紹介
初めまして。私は都内でwebエンジニアをしています。
今の会社にインターンとして経て、入社しました。
業務では、Nuxtjs, Golang, Kubernetesを用いて運用保守開発や
最近はPandasを用いてデータ分析など日々苦戦している若輩者です。
背景
Kubernetesのライフサイクルが個人的に忘れがちなので、簡単にまとめました。
対象としている人
Kubernetesを学習途中の人、またこれからKubernetesを学習しようとしている人
Lifecycle
Podにはいくつかの phase がある。
- Pending
- Kubernetesによって承認されたが、一つ以上のコンテナが作成されていない状態。ImageのPullやInit Containerの処理中がこの状態にあたる
- Running
- コンテナが作成され、少なくとも1つのコンテナが実行されているか開始・再起動中の状態
- Succeeded
- Pod内の全てのコンテナが正常に終了し、再起動されていない状態
- Failed
- Pod内の全てのコンテナが終了し、少なくとも1つ以上のコンテナの終了ステータスが0以外だったか、Kubernetesによって強制終了させられた場合この状態になる
- Unknown
- 何らかの理由によりPodのサーバーと通信が失敗し、Podの状態を取得できなかった際の状態
Lifecycle Events
コンテナが開始された際とPodが削除される際にHookして任意の処理を実行することが出来る
- postStart
- コンテナが作成された後、即座に実行される。このHandlerが失敗した場合終了させ、 restartPolicy に従い再起動させる
- preStop
- コンテナが終了される前に実行される。コンテナのルートプロセスに対して SIGTERM が送出される前にこのHandlerが実行される。
- preStop が定義されている場合それを実行する。 ここでコンテナの終了処理を行うが、 preStop が先に終了してしまうとコンテナ側が処理中だとしてもKubernetesはコンテナに対してSIGTERMを送信してしまう。 これを防ぎたい場合は、 preStop 側でSleepさせるなどの待機処理を入れて待たせる必要がある。
Lifecycle Handler
postStart や preStop に指定できるHandlerの種類は以下の通り。
- exec
- コンテナ内でコマンドを実行
- httpGet
- HTTPのGETリクエストを発行