目次
ポッド内の初期コンテナ
Init コンテナは、Pod 内のアプリケーション コンテナが起動する前に実行される特別なコンテナです。init コンテナには、アプリケーション イメージには存在しないいくつかのユーティリティとインストール スクリプトを含めることができます。
1 初期コンテナの機能
init コンテナは、次の点を除いて通常のコンテナと非常によく似ています。
-
常に完了まで実行されます。ポッドの Init コンテナが失敗した場合、kubelet は成功するまで Init コンテナを再起動し続けます。ただし、ポッドの
restartPolicy
値が「Never」で、ポッドの Init コンテナが失敗した場合、Kubernetes はポッド全体のステータスを失敗に設定します。 -
次の処理を開始するには、それぞれが正常に完了する必要があります。
-
また、Init コンテナは、ポッドの準備ができる前に完了するまで実行する必要があるため、
lifecycle
、livenessProbe
、readinessProbe
およびをサポートしません。startupProbe
-
Pod に複数の Init コンテナが指定されている場合、それらは 1 つずつ順番に実行されます。次の Init コンテナが実行される前に、各 Init コンテナが正常に実行される必要があります。すべての Init コンテナの実行が完了すると、Kubernetes はポッドのアプリケーション コンテナを初期化し、通常どおり実行します。
-
Init コンテナは、リソース制限、データ ボリューム、セキュリティ設定など、アプリケーション コンテナのすべてのフィールドと機能をサポートします。ただし、Init コンテナはリソースのリクエストと制限を少し異なる方法で処理します。
2 初期化コンテナの使用
公式 Web サイトのアドレス: Init コンテナー | Kubernetes
containers
Init コンテナは、アプリケーション コンテナを記述する配列と並行してPod 仕様で指定されます。
apiVersion: v1
kind: Pod
metadata:
name: init-demo
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', 'echo init-myservice is running! && sleep 5']
- name: init-mydb
image: busybox:1.28
command: ['sh', '-c', 'echo init-mydb is running! && sleep 10']
-
スタートアップの詳細を表示する
$ kubectl describe pod init-demo
# 部分结果
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 2m16s default-scheduler Successfully assigned default/init-demo to k8s-node2
Normal Pulling 2m16s kubelet Pulling image "busybox:1.28"
Normal Pulled 118s kubelet Successfully pulled image "busybox:1.28" in 17.370617268s (17.370620685s including waiting)
Normal Created 118s kubelet Created container init-myservice
Normal Started 118s kubelet Started container init-myservice
Normal Pulled 112s kubelet Container image "busybox:1.28" already present on machine
Normal Created 112s kubelet Created container init-mydb
Normal Started 112s kubelet Started container init-mydb
Normal Pulled 101s kubelet Container image "busybox:1.28" already present on machine
Normal Created 101s kubelet Created container myapp-container
Normal Started 101s kubelet Started container myapp-container