Files
Takuya Tokuda abde921399 First Japanese l10n work for release-1.14 (#16115)
* Translate concepts/workloads/pods/pod/ in Japanese (#13671)

* [ja] Copy en/docs/concepts/workloads/pods/pod.md into ja/

* [ja] Translate docs/concepts/workloads/pods/pod/

* [ja] Modify translation of docs/concepts/workloads/pods/pod/

Reflect review - add trailing 'ー' to some technical terms

* [ja] Fix translation of 'Persistent Volumes' (#13848)

s/永続化ボリューム/永続ボリューム/g

* Translated cron-jobs.md in Japanese (#13937)

* Translate cron-jobs.md in Japanese (#13392)

* Update cron-jobs.md

* Create automated-tasks-with-cron-jobs.md in Japanese directory

* Fix translation (#13392)

* Translate cron-jobs.md in Japanese (#13392)

* Update cron-jobs.md

* Create automated-tasks-with-cron-jobs.md in Japanese directory

* Revert "Create automated-tasks-with-cron-jobs.md in Japanese directory"

This reverts commit 739b01489634d749279c38b6ed5b90534bf7d29d.

* Revert "Create automated-tasks-with-cron-jobs.md in Japanese directory"

This reverts commit 739b01489634d749279c38b6ed5b90534bf7d29d.

* Fix conflict (#13392)

* Revert "Revert "Create automated-tasks-with-cron-jobs.md in Japanese directory""

This reverts commit c5fc9d93d6d789a13a0a28ec4b85f9e7aeb81e38.

* Revert "Revert "Revert "Create automated-tasks-with-cron-jobs.md in Japanese directory"""

This reverts commit 095e760c6deb620da548d06a851c8f7ade71a15d.

* Fix that as it was pointed out (#13392)

* Delete double same sesntence (#13392)

* copy includes directory (#14020)

* Translate docs/home/_index.md into Japanese (#14068) (#14074)

* Translate concepts/overview/components.md into Japanese (#14067)

* Translate glossaries used in concepts/overview/components.md into Japanese (#14044)

* Translate concepts/overview/components.md into Japanese (#14044)

* Translate tasks/run-application/run-single-instance-stateful-application/ in Japanese (#13668)

* Translate tasks/run-application/run-single-instance-stateful-application/ in Japanese

* Apply suggestions from code review

Co-Authored-By: sotoiwa <sotoiwa@gmail.com>

* Better translation from code review

* Translate tasks/access-application-cluster/service-access-application-cluster/ in Japanese (#13701)

* Update fluentd image (#13661)

Signed-off-by: ialidzhikov <i.alidjikov@gmail.com>

* update zh kubelet-config-file doc (#13495)

* update zh kubelet-config-file doc

* change kubelet config types address

* add space between en words and zh words

* revert en version change

* correct container hyperlinks in init container (#12387)

* correct container hyperlinks in init container

* correct zh trans and update anchor inside page

* Incorrect details about startingDeadlineSeconds.. (#13530)

On this page, the default value of startingDeadlineSeconds is mentioned as 100 seconds which is not true. So removing this statement.

* Fix typos (#13376)

* add Nokia case study (#13676)

* Fix typo in API page (#13687)

Associated with #13686

* fix typo in pod-lifecycle (#13689)

Asscociated with #13688

* issue 13383

* modify the link part

* Revert "modify the link part"

This reverts commit 2ae91dca574b54a14d255320721df4313346de28.

* Revert "Revert "modify the link part""

This reverts commit e5b80b6258ce2210fc9a4b46e08fb8c000fe6330.

* Revert "Revert "Revert "modify the link part"""

This reverts commit 427916e7c6c4d6423222ff76b5fd8c12dc913ce1.

* Revert "Merge remote-tracking branch 'origin/master' into issue_13383"

This reverts commit 98099d805c7377826cb4d84bd0fece0f6362cb40, reversing
changes made to 969e7f3f5cf63622e24137a2e374b0ab9e272514.

* modify the link part

*  Translate /concepts/overview/working-with-objects/kubernetes-objects/ into Japanese (#14025)

* Translate /concepts/overview/working-with-objects/kubernetes-objects/ into Japanese (#13952)

* Apply suggestions to /concepts/overview/working-with-objects/kubernetes-objects/ from code review

Co-Authored-By: nasa9084 <nasa9084@users.noreply.github.com>

* Translate concepts/overview/working-with-objects/names.md into Japanese (#14066)

* Translate content/ja/docs/concepts/overview/working-with-objects/names.md into Japanese

* Translate docs/reference/glossary/name.md into Japanese

* Translate docs/reference/glossary/uid.md into Japanese

* Apply suggestions to concepts/overview/working-with-objects/names.md from review comments

* Translate concepts/overview/kubernetes-api.md into Japanese (#14343)

* Translate concepts/overview/kubernetes-api.md into Japanese

* Update translations for concepts/overview/kubernetes-api.md

* Translate overview/working-with-objects/labels.md in Japanese (#14183) (#14319)

* Translate overview/working-with-objects/labels.md in Japanese (#14183)

* Update translations for concepts/overview/working-with-objects/labels.md.

* Translate concepts/workloads/pods/pod-overview/ in Japanese (#14426) (#14494)

* Translate concepts/workloads/pods/pod-overview/ in Japanese (#14426)

* Update translation for concepts/workloads/pods/pod-overview.md.

* Translate overview/working-with-objects/field-selectors.md in Japanese (#14350) (#14535)

* Translate overview/working-with-objects/field-selectors.md in Japanese (#14350)

* Update translations for concepts/overview/working-with-objects/field-selectors.md.

* Update translation for concepts/overview/working-with-objects/field-selectors.md

* Translate overview/working-with-objects/common-labels/ in Japanese (#14397) (#14403)

* Translate overview/working-with-objects/common-labels/ in Japanese (#14397)

* Update translation for concepts/overview/working-with-objects/common-labels.md

* Translate concepts/storage/volume-snapshot-classes/ in Japanese (#14846) (#14849)

* ja-trans: tasks/run-application/run-stateless-application-deployment/ (#14955)

* ja-trans: tasks/run-application/run-stateless-application-deployment/

* modify "exploring" translation

* ja-trans: concepts/containers/container-environment-variables/ (#14116)

* ja-trans: concepts/containers/container-environment-variables/

* removed redundant expressions

* ja-trans: Translate tasks/debug-application-cluster/get-shell-running… (#14146)

* ja-trans: Translate tasks/debug-application-cluster/get-shell-running-container/ #13381

* Update content/ja/docs/tasks/debug-application-cluster/get-shell-running-container.md

Fix typo

Co-Authored-By: nasa9084 <nasa9084@users.noreply.github.com>

* ja-trans: concepts/containers/container-lifecycle-hooks/ (#14169)

* ja-trans: tasks/debug-application-cluster/debug-init-containers/ (#14488)

* ja-trans: tasks/debug-application-cluster/debug-init-containers/

* modified traslation of should

* Translate concepts/workloads/controllers/replicaset/ in Japanese (#14634) (#14641)

* Translate concepts/workloads/controllers/replicaset.md in Japanese (#14634)

* Improve japanese translation in concepts/workloads/controllers/replicaset.md (#14634)

* Improve japanese translation in concepts/workloads/controllers/replicaset.md (#14634)

* Translate concepts/overview/working-with-objects/annotations/ in Japanese (#13382) (#14396)

* Translate overview/working-with-objects/annotations.md in Japanese (#13382)

* Delete a empty line in concepts/overview/working-with-objects/annotations.md (#13382)

* Update translation for concepts/overview/working-with-objects/anotations.md

* ja-trans: tasks/run-application/scale-stateful-set/ (#15289)

* [ja] Fix translation of 'Persistent Volumes' (#13848)

s/永続化ボリューム/永続ボリューム/g

* ja-trans: tasks/run-application/scale-stateful-set/

* Update content/ja/docs/tasks/run-application/scale-stateful-set.md

Co-Authored-By: nasa9084 <nasa9084@users.noreply.github.com>

* Update content/ja/docs/tasks/run-application/scale-stateful-set.md

Co-Authored-By: nasa9084 <nasa9084@users.noreply.github.com>

* added postpositional particle

* ja-trans: tasks/debug-application-cluster/debug-stateful-set/ (#15282)

* [ja] Fix translation of 'Persistent Volumes' (#13848)

s/永続化ボリューム/永続ボリューム/g

* ja-trans: tasks/debug-application-cluster/debug-stateful-set/

* ja-trans: tasks/debug-application-cluster/determine-reason-pod-failure/ (#14939)

* [ja] Fix translation of 'Persistent Volumes' (#13848)

s/永続化ボリューム/永続ボリューム/g

* ja-trans: tasks/debug-application-cluster/determine-reason-pod-failure/

* ja-trans: unify the ending of sentences

* follow the master branch update

* reflect a suggestion and modify translation of container

* ja-trans: tasks/run-application/delete-stateful-set/ (#15293)

* [ja] Fix translation of 'Persistent Volumes' (#13848)

s/永続化ボリューム/永続ボリューム/g

* ja-trans: tasks/run-application/delete-stateful-set/

* Update content/ja/docs/tasks/run-application/delete-stateful-set.md

Co-Authored-By: nasa9084 <nasa9084@users.noreply.github.com>

* Update content/ja/docs/tasks/run-application/delete-stateful-set.md

Co-Authored-By: nasa9084 <nasa9084@users.noreply.github.com>

* Update content/ja/docs/tasks/run-application/delete-stateful-set.md

Co-Authored-By: nasa9084 <nasa9084@users.noreply.github.com>

* Update content/ja/docs/tasks/run-application/delete-stateful-set.md

Co-Authored-By: nasa9084 <nasa9084@users.noreply.github.com>

* modified traslation of backing

* ja-trans: tasks/configure-pod-container/attach-handler-lifecycle-event/ (#14328)

* Translate overview/working-with-objects/namespaces.md in Japanese (#14045) (#14161)

* Translate overview/working-with-objects/namespaces.md in Japanese (#14045)

* Update translations for concepts/overview/working-with-objects/namespaces.md

* ja-trans: fix Japanese Translation in concepts/overview/working-with-objects/namespaces.md (#14045)

* ja-trans: includes/default-storage-class-prereqs.md (#15376)

* ja-trans: includes/default-storage-class-prereqs.md

* Update content/ja/includes/default-storage-class-prereqs.md

Co-Authored-By: nasa9084 <nasa9084@users.noreply.github.com>

* Translate tasks/run-application/run-replicated-stateful-application/ in Japanese (#15368)

* Translate tasks/run-application/run-replicated-stateful-application/ in Japanese

* add a base document in english

* Update content/ja/docs/tasks/run-application/run-replicated-stateful-application.md

Co-Authored-By: nasa9084 <nasa9084@users.noreply.github.com>

* Update content/ja/docs/tasks/run-application/run-replicated-stateful-application.md

Co-Authored-By: nasa9084 <nasa9084@users.noreply.github.com>

* Update content/ja/docs/tasks/run-application/run-replicated-stateful-application.md

Co-Authored-By: Kohei Ota <kohei.ota@zozo.com>

* small fixs

「複製」という言葉を使わず「レプリケーション」と「クローン」に使い分けるように変更。
「ステートフルなアプリケーション」を「ステートフルアプリケーション」に変更。

* small fix

* Translate concepts/workloads/pods/init-containers.md in Japanese (#14543) (#14576)

* Translate concepts/workloads/pods/init-containers.md in Japanese (#14543)

* Improve japanese translation in concepts/workloads/pods/init-containers.md (#14543)

* Add new line in ja/concepts/workloads/pods/init-containers.md (#14543)

* Add new line in ja/concepts/workloads/pods/init-containers.md (#14543)

* translate contribute/_index.md to japanese. (#15406)

* translate contribute/_index.md to japanese.

* trim spaces.

* Add missing translation.

* Translate concepts/workloads/controllers/daemonset/ in Japanese #14761 (#14767)

* Translate concepts/workloads/controllers/daemonset/ in Japanese (#14761)

* ja-trans: Improve Japanese translation in concepts/workloads/controllers/daemonset.md (#14767)

* Translate concepts/workloads/controllers/garbage-collection/ in Japanese (#14718)  (#14720)

* Translate concepts/workloads/controllers/garbage-collection/ in Japanese (#14718)

* ja-trans: Improve Japanese translation in concepts/workloads/controllers/garbage-collection.md (#14718)

* Translate concepts/workloads/pods/podpreset/ in Japanese (#14544) (#14581)

* Translate concepts/workloads/pods/podpreset.md in Japanese (#14544)

* Update translation for concepts/workloads/pods/podpreset.md.

* ja-trans: Improve Japanese translation in concepts/workloads/pods/podpreset (#14544)

* ja-trans: Improve Japanese translation in concepts/workloads/pods/podpreset (#14544)

* ja-trans: Delete translated sentence in concepts/workloads/pods/podpreset (#14544)

* ja-trans: Delete duplicated sentence in concepts/workloads/pods/podpreset (#14544)

* Translate concepts/containers/runtime-class/ in Japanese (#14670) (#14673)

* Translate concepts/containers/runtime-class.md in Japanese (#14670)

* ja-trans: Improve Japanese translation in concepts/containers/runtime-class.md (#14670)

* Translate concepts/services-networking/dns-pod-service/ in Japanese #14777 (#14805)

* Translate concepts/services-networking/dns-pod-service/ in Japanese (#14777)

* ja-trans: Improve Japanese translation in concepts/services-networking/dns-pod-service.md (#14777)

* Translate concepts/workloads/controllers/statefulset/ in Japanese #14679 (#14696)

* Translate concepts/workloads/controllers/statefulset.md in Japanese (#14679)

* ja-trans: Improve Japanese translation in concepts/workloads/controllers/statefulset.md (#14679)

* ja-trans: Improve some Japanese translation in concepts/workloads/controllers/statefulset.md (#14679)

* ja-trans: Improve some titles in concepts/workloads/controllers/statefulset.md (#14679)

* ja-trans: Improve some Japanese translations in concepts/workloads/controllers/statefulset.md (#14679)

* Translate concepts/workloads/controllers/ttlafterfinished/ in Japanese #14734 (#14735)

* Translate concepts/workloads/controllers/ttlafterfinished/ in Japanese (#14734)

* ja-trans: Improve Japanese translation in concepts/workloads/controllers/ttlafterfinished.md (#14734)

* ja-trans: Delete some Japanese words in concepts/workloads/controllers/ttlafterfinished.md (#14734)

*  ja-trans: Fix typo in concepts/workloads/controllers/ttlafterfinished.md (#14734)

* Translate concepts/storage/dynamic-provisioning/ in Japanese #14847 (#14916)

* Translate concepts/storage/dynamic-provisioning/ in Japanese (#14847)

* ja-trans: Improve Japanese translation in concepts/storage/dynamic-provisioning.md (#14847)

* ja-trans: Improve some Japanese translation in concepts/storage/dynamic-provisioning.md (#14847)

* ja-trans: Improve some Japanese translations in concepts/storage/dynamic-provisioning.md (#14847)
2019-08-27 23:05:11 -07:00

17 KiB

title, content_template, weight
title content_template weight
Initコンテナ(Init Containers) templates/concept 40

{{% capture overview %}} このページでは、Initコンテナについて概観します。Initコンテナとは、アプリケーションコンテナの前に実行され、アプリケーションコンテナのイメージに存在しないセットアップスクリプトやユーティリティーを含んだ特別なコンテナです。 {{% /capture %}}

この機能はKubernetes1.6からβ版の機能として存在しています。InitコンテナはPodSpec内で、アプリケーションのcontainersという配列と並べて指定されます。そのベータ版のアノテーション値はまだ扱われ、PodSpecのフィールド値を上書きします。しかしながら、それらはKubernetesバージョン1.6と1.7において廃止されました。Kubernetesバージョン1.8からはそのアノテーション値はサポートされず、PodSpecフィールドの値に変換する必要があります。

{{% capture body %}}

Initコンテナを理解する

単一のPodは、Pod内に複数のコンテナを稼働させることができますが、Initコンテナもまた、アプリケーションコンテナが稼働する前に1つまたは複数稼働できます。

Initコンテナは下記の項目をのぞいて、通常のコンテナと全く同じものとなります。

  • Initコンテナは常に完了するまで稼働します。
  • 各Initコンテナは、次のInitコンテナが稼働する前に正常に完了しなくてはなりません。

もしあるPodの単一のInitコンテナが失敗した場合、KubernetesはInitコンテナが成功するまで何度もそのPodを再起動します。しかし、もしそのPodのrestartPolicyNeverの場合、再起動されません。

単一のコンテナをInitコンテナとして指定するためには、PodSpecにそのアプリケーションのcontainers配列と並べて、initContainersフィールドを[Container](/docs/reference/generated/kubernetes-api/{{< param "version" >}}/#container-v1-core)型のオブジェクトのJSON配列として指定してください。 Initコンテナのステータスは、.status.initContainerStatusesフィールドにコンテナのステータスの配列として返されます(.status.containerStatusesと同様)。

通常のコンテナとの違い

Initコンテナは、リソースリミット、ボリューム、セキュリティ設定などのアプリケーションコンテナの全てのフィールドと機能をサポートしています。しかし、Initコンテナに対するリソースリクエストやリソースリミットの扱いは微妙に異なり、下記のResourcesにて説明します。また、InitコンテナはそのPodの準備ができ前に完了しなくてはならないため、readinessProbeをサポートしていません。

もし複数のInitコンテナが単一のPodに対して指定された場合、それらのInitコンテナは1つずつ順番に実行されます。各Initコンテナは次のコンテナが完了できる前に完了しなくてはなりません。全てのInitコンテナが実行完了した時、KubernetesはPodを初期化し、通常通りアプリケーションコンテナを稼働させます。

Initコンテナは何に使用できるか?

Initコンテナはアプリケーションコンテナのイメージとは分離されているため、コンテナの起動に関連したコードにおいていくつかの利点があります。

  • セキュリティの理由からアプリケーションコンテナのイメージに含めたくないユーティリティーを含んだり実行できます。
  • アプリケーションのイメージに存在していないセットアップ用のユーティリティーやカスタムコードを含むことができます。例えば、セットアップ中にsedawkpythonや、digのようなツールを使うための他のイメージから、アプリケーションのイメージを作る必要がなくなります。
  • アプリケーションイメージをひとまとめにしてビルドすることなく、アプリケーションのイメージ作成と、デプロイ処理を独立して行うことができます。
  • アプリケーションコンテナと別のファイルシステムビューを持つために、Linuxの名前空間を使用します。その結果、アプリケーションコンテナがアクセスできない箇所へのシークレットなアクセス権限を得ることができます。
  • Initコンテナはアプリケーションコンテナの実行の前に完了しますが、その一方で、複数のアプリケーションコンテナは並列に実行されます。そのためInitコンテナはいくつかの前提条件をセットされるまで、アプリケーションコンテナの起動をブロックしたり遅らせることができます。

使用例

ここではInitコンテナの使用例を挙げます。

  • シェルコマンドを使って単一のServiceが作成されるのを待機します。

    for i in {1..100}; do sleep 1; if dig myservice; then exit 0; fi; done; exit 1
    
  • コマンドを使って下位のAPIからこのPodをリモートサーバに登録します。

    `curl -X POST http://$MANAGEMENT_SERVICE_HOST:$MANAGEMENT_SERVICE_PORT/register -d 'instance=$(<POD_NAME>)&ip=$(<POD_IP>)'`
    
  • sleep 60のようなコマンドを使ってアプリケーションコンテナが起動する前に待機します。

  • ボリュームにあるgitリポジトリをクローンします。

  • メインのアプリケーションコンテナのための設定ファイルを動的に生成するために、いくつかの値を設定ファイルに移してテンプレートツールを稼働させます。例えば、設定ファイルにそのPodのPOD_IPを移して、Jinjaを使ってメインのアプリケーションコンテナの設定ファイルを生成します。

さらに詳細な使用例は、StatefulSetsのドキュメントProduction Pods guideにまとまっています。

Initコンテナの使用

下記のKubernetes1.5用のyamlファイルは、2つのInitコンテナを含む単一のシンプルなポッドの概要となります。 最初のInitコンテナの例は、myservies、2つ目のInitコンテナはmydbの起動をそれぞれ待ちます。2つのコンテナの実行が完了するとPodの起動が始まります。

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
  annotations:
    pod.beta.kubernetes.io/init-containers: '[
        {
            "name": "init-myservice",
            "image": "busybox:1.28",
            "command": ["sh", "-c", "until nslookup myservice; do echo waiting for myservice; sleep 2; done;"]
        },
        {
            "name": "init-mydb",
            "image": "busybox:1.28",
            "command": ["sh", "-c", "until nslookup mydb; do echo waiting for mydb; sleep 2; done;"]
        }
    ]'
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']

古いアノテーション構文がKubernetes1.6と1.7において有効ですが、1.6では新しい構文にも対応しています。Kubernetes1.8以降では新しい構文はを使用する必要があります。KubernetesではInitコンテナの宣言をspecに移行させました。

apiVersion: v1
kind: Pod
metadata:
  name: myapp-pod
  labels:
    app: myapp
spec:
  containers:
  - name: myapp-container
    image: busybox:1.28
    command: ['sh', '-c', 'echo The app is running! && sleep 3600']
  initContainers:
  - name: init-myservice
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
  - name: init-mydb
    image: busybox:1.28
    command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']

Kubernetes1.5での構文は1.6においても稼働しますが、1.6の構文の使用を推奨します。Kubernetes1.6において、API内でInitコンテナのフィールド作成されます。ベータ版のアノテーションはKubernetes1.6と1.7において有効ですが、1.8以降ではサポートされません。

下記のyamlファイルはmydbmyserviceというServiceの概要です。

kind: Service
apiVersion: v1
metadata:
  name: myservice
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9376
---
kind: Service
apiVersion: v1
metadata:
  name: mydb
spec:
  ports:
  - protocol: TCP
    port: 80
    targetPort: 9377

このPodは、下記のコマンドによって起動とデバッグすることが可能です。

kubectl apply -f myapp.yaml
pod/myapp-pod created
kubectl get -f myapp.yaml
NAME        READY     STATUS     RESTARTS   AGE
myapp-pod   0/1       Init:0/2   0          6m
kubectl describe -f myapp.yaml
Name:          myapp-pod
Namespace:     default
[...]
Labels:        app=myapp
Status:        Pending
[...]
Init Containers:
  init-myservice:
[...]
    State:         Running
[...]
  init-mydb:
[...]
    State:         Waiting
      Reason:      PodInitializing
    Ready:         False
[...]
Containers:
  myapp-container:
[...]
    State:         Waiting
      Reason:      PodInitializing
    Ready:         False
[...]
Events:
  FirstSeen    LastSeen    Count    From                      SubObjectPath                           Type          Reason        Message
  ---------    --------    -----    ----                      -------------                           --------      ------        -------
  16s          16s         1        {default-scheduler }                                              Normal        Scheduled     Successfully assigned myapp-pod to 172.17.4.201
  16s          16s         1        {kubelet 172.17.4.201}    spec.initContainers{init-myservice}     Normal        Pulling       pulling image "busybox"
  13s          13s         1        {kubelet 172.17.4.201}    spec.initContainers{init-myservice}     Normal        Pulled        Successfully pulled image "busybox"
  13s          13s         1        {kubelet 172.17.4.201}    spec.initContainers{init-myservice}     Normal        Created       Created container with docker id 5ced34a04634; Security:[seccomp=unconfined]
  13s          13s         1        {kubelet 172.17.4.201}    spec.initContainers{init-myservice}     Normal        Started       Started container with docker id 5ced34a04634
kubectl logs myapp-pod -c init-myservice # 1つ目のInitコンテナを調査する
kubectl logs myapp-pod -c init-mydb      # 2つ目のInitコンテナを調査する

一度mydqmyservice Serviceを起動させると、Initコンテナが完了してmyapp-podが作成されるのを確認できます。

kubectl apply -f services.yaml
service/myservice created
service/mydb created
kubectl get -f myapp.yaml
NAME        READY     STATUS    RESTARTS   AGE
myapp-pod   1/1       Running   0          9m

この例は非常にシンプルですが、ユーザー独自のInitコンテナを作成するためのインスピレーションを提供するでしょう。

Initコンテナのふるまいに関する詳細

単一のPodが起動している間、ネットワークとボリュームが初期化されたのちに、Initコンテナは順番に起動されます。各Initコンテナは次のInitコンテナが起動する前に完了しなくてはなりません。もしあるInitコンテナがランタイムもしくはエラーにより起動失敗した場合、そのPodのrestartPolicyの値をもとにリトライされます。しかし、もしPodのretartPolicyAlwaysに設定されていた場合、そのInitコンテナのrestartPolicyOnFailureとなります。

Podは全てのInitコンテナが完了するまでReady状態となりません。Initコンテナ上のポートはServiceによって集約されません。初期化中のPodのステータスはPendingとなりますが、Initializingという値はtrueとなります。

もしそのPodが再起動されたとき、全てのInitコンテナは再度実行されなくてはなりません。

Initコンテナのスペックに対する変更はコンテナのイメージフィールドのみに限定されます。 Initコンテナのイメージフィールド値の変更は、そのPodの再起動することと等しいです。

Initコンテナは何度も再起動、リトライ可能なため、べき等(Idempotent)である必要があります。特に、EmptyDirsにファイルを書き込むコードは、書き込み先のファイルがすでに存在している可能性を考慮に入れるべきです。

Initコンテナはアプリケーションコンテナの全てのフィールドを持っています。しかしKubernetesは、Initコンテナが完了と異なる状態を定義できないためreadinessProbeが使用されることを禁止しています。これはバリデーションの際に強要されます。

Initコンテナがずっと失敗し続けたままの状態を防ぐために、PodにactiveDeadlineSeconds、コンテナにlivenessProbeの設定をそれぞれ使用してください。activeDeadlineSecondsの設定はInitコンテナにも適用されます。

あるPod内の各アプリケーションコンテナとInitコンテナの名前はユニークである必要があります。他のコンテナと同じ名前を共有していた場合、バリデーションエラーが返されます。

リソース

Initコンテナの順序と実行を考えるとき、リソースの使用に関して下記のルールが適用されます。

  • 全てのInitコンテナの中で定義された最も高いリソースリクエストとリソースリミットが、有効なInitリクエストとリミット になります。
  • Podのリソースの有効なリクエストとリミット は、下記の2つの中のどちらか高い方となります。
    • そのリソースの全てのアプリケーションコンテナのリクエストとリミットの合計
    • そのリソースの有効なInitリクエストとリミット
  • スケジューリングは有効なリクエストとリミットに基づいて実行されます。これはInitコンテナがそのPodの生存中に使われない初期化のためのリソースを保持することができることを意味しています。
  • Podの有効なQosティアー は、Initコンテナとアプリケーションコンテナで同様です。

クォータとリミットは有効なPodリクエストとリミットに基づいて適用されます。

Podレベルのcgroupsは、スケジューラーと同様に、有効なPodリクエストとリミットに基づいています。

Podの再起動の理由

単一のPodは再起動可能で、Initコンテナの再実行も引き起こします。それらは下記の理由によるものです。

  • あるユーザーが、そのPodのInitコンテナのイメージを変更するようにPodSpecを更新する場合。アプリケーションコンテナのイメージの変更はそのアプリケーションコンテナの再起動のみ行われます。
  • そのPodのインフラストラクチャーコンテナが再起動された場合。これはあまり起きるものでなく、Nodeに対するルート権限を持ったユーザーにより行われることがあります。
  • restartPolicyAlwaysと設定されているとき、単一Pod内の全てのコンテナが停止され、再起動が行われた時と、ガーベージコレクションによりInitコンテナの完了記録が失われた場合。

サポートと互換性

ApiServerのバージョン1.6.0かそれ以上のバージョンのクラスターは、.spec.initContainersフィールドを使ったInitコンテナの機能をサポートしています。
それ以前のバージョンでは、α版かβ版のアノテーションを使ってInitコンテナを使用できます。また、.spec.initContainersフィールドは、Kubernetes1.3.0かそれ以上のバージョンでInitコンテナを使用できるようにするためと、ApiServerバージョン1.6において、1.5.xなどの古いバージョンにロールバックできるようにするために、α版かβ版のアノテーションにミラーされ、存在するPodのInitコンテナの機能が失われることが無いように安全にロールバックできるようにします。

ApiServerとKubeletバージョン1.8.0かそれ以上のバージョンでは、α版とβ版のアノテーションは削除されており、廃止されたアノテーションは.spec.initContainersフィールドへの移行が必須となります。

{{% /capture %}}

{{% capture whatsnext %}}

{{% /capture %}}