0Pricing
DevOps Bootcamp · レッスン

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: /work

Initコンテナの状態を確認する

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Pod:最小単位
  2. Podのライフサイクルと状態
  3. マルチコンテナPod(サイドカー)
  4. Initコンテナと起動順序
← DevOps Bootcampに戻る