Initコンテナと起動順序
メインのアプリケーションコンテナが起動する前にInitコンテナがセットアップ作業を行う仕組みと、Pod内の順序を保証する方法を学びます。
「Initコンテナと起動順序」はCoddyKit上の無料DevOps Bootcampレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDevOps Bootcamp学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 DevOps Bootcampコースには全4レッスンが含まれています。
Initコンテナとは
initコンテナは、Pod内のメインアプリケーションコンテナが起動する前に、処理を完了するまで実行される特殊なコンテナです。Podには1つ以上のinitコンテナを指定できます。
依存関係が利用可能になるまで待つ、設定を複製する、データベースのマイグレーションを実行するといった、一度だけ行うセットアップ作業に適しています。
アプリケーションコンテナとの違い
Initコンテナは必ず処理を完了するまで実行され、次のinitコンテナが起動する前に成功しなければなりません。一方、アプリケーションコンテナは継続的に実行されます。
- Initコンテナは1つずつ順番に実行されます
- アプリケーションコンテナは並列に実行されます
- Initコンテナが失敗すると、Podは
restartPolicyに従ってそのコンテナを再起動します
基本的なInitコンテナの仕様
Initコンテナは、spec.containersと同じ階層にあるspec.initContainersの下に定義します。
apiVersion: v1
kind: Pod
metadata:
name: app-with-init
spec:
initContainers:
- name: wait-for-db
image: busybox:1.36
command: ['sh', '-c', 'echo waiting; sleep 5']
containers:
- name: app
image: nginx:1.27順序が重要な理由
Kubernetesは、すべてのinitコンテナが正常に完了してからでなければ、メインコンテナを開始しないことを保証します。
これにより、アプリケーションイメージにリトライループを組み込む代わりに、依存関係を宣言的に表現できます。
Serviceを待機する
よくあるパターンは、依存するServiceが応答するまで起動を待機させることです。
initContainers:
- name: wait-for-api
image: busybox:1.36
command:
- sh
- -c
- 'until nslookup api-service; do echo waiting; sleep 2; done'複数のInitコンテナ
複数のinitコンテナを連結できます。リストに記述した順番に実行され、それぞれが完全に完了してから次が開始されます。
initContainers:
- name: step-1-fetch-config
image: busybox:1.36
command: ['sh', '-c', 'echo fetching config']
- name: step-2-migrate
image: busybox:1.36
command: ['sh', '-c', 'echo running migration']emptyDirでデータを共有する
Initコンテナでは、共有emptyDirボリュームを使用して、アプリケーションコンテナ用のファイルを準備することがよくあります。
volumes:
- name: shared
emptyDir: {}
initContainers:
- name: setup
image: busybox:1.36
command: ['sh', '-c', 'echo hello > /work/index.html']
volumeMounts:
- name: shared
mountPath: /workInitコンテナの状態を確認する
Initコンテナの実行中、PodにはInit:0/2のような状態が表示されます。kubectlを使って進行状況を確認してください。
kubectl get pod app-with-init
kubectl logs app-with-init -c wait-for-db
kubectl describe pod app-with-initリソース使用量のルール
Initコンテナは順番に実行されるため、Kubernetesはスケジューリング時に、それらのリソース要求または上限の最大値(合計ではありません)を使用し、その後アプリケーションコンテナの要件と比較します。
一般的なユースケース
- データベースや外部APIに接続できるまで待機する
- アプリケーションの起動前にスキーマのマイグレーションを実行する
- 設定ファイルを生成またはダウンロードする
- マウントしたボリューム上のファイル権限を設定する
- Podをサービスレジストリに登録する
失敗時の動作
Initコンテナが失敗し、PodのrestartPolicyがAlwaysまたはOnFailureの場合、Kubernetesは成功するまでそのコンテナの再試行を続けます。その間、メインコンテナは起動しません。
クイックチェック
Initコンテナの実行順序についての理解を確認します。
まとめ
Initコンテナは、アプリケーションコンテナが起動する前に、順番に処理を完了するまで実行されることを学びました。起動順序を保証し、ボリュームを介して共有データを準備するとともに、マイグレーションや依存関係の確認など、一度だけ行うセットアップを処理します。
次は、Initコンテナとサイドカーを組み合わせて、より柔軟なPod起動パターンを実現できます。
よくある質問
「Initコンテナと起動順序」レッスンは無料ですか?
はい。「Initコンテナと起動順序」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、DevOps Bootcampコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 DevOps Bootcampコースには全4レッスンが含まれています。
「Initコンテナと起動順序」で何を学びますか?
メインのアプリケーションコンテナが起動する前にInitコンテナがセットアップ作業を行う仕組みと、Pod内の順序を保証する方法を学びます。 ブラウザで直接実行するハンズオンコードでDevOps Bootcampを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
DevOps Bootcampを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのDevOps Bootcampは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「Initコンテナと起動順序」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このDevOps Bootcampレッスンでコードを書いて実行できますか?
はい。すべてのDevOps Bootcampレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Pod:最小単位
- Podのライフサイクルと状態
- マルチコンテナPod(サイドカー)
- Initコンテナと起動順序