k8s-initC
2682 ワード
Init容器は何ができますか?
Initコンテナには、アプリケーションコンテナから分離された個別のミラーがあるため、関連コードの起動には次のような利点があります. Initコンテナは、インストール中にアプリケーションコンテナに存在しないユーティリティまたはパーソナライズドコードを含むことができる.例えば、インストール中にsed、awk、python、digのようなツールを使用するためにFROMのミラーを除去して新しいミラーを生成する必要はありません. Initコンテナは、ミラーの適用によるセキュリティの低下を回避するために、これらのツールを安全に実行することができる. アプリケーションミラーの作成者とデプロイメント者は、個別のアプリケーションミラーを共同で構築する必要がなく、それぞれ独立して作業することができます. Initコンテナは、Pod内のアプリケーションコンテナとは異なるファイルシステムビューで実行できます.したがって、InitコンテナはSecretsにアクセスする権限を持つことができ、アプリケーションコンテナはアクセスできない. Initコンテナは、アプリケーションコンテナが起動する前に動作しなければならないため、Initコンテナは、アプリケーションコンテナの起動のセットが前提条件を満たすまで、アプリケーションコンテナの起動をブロックまたは遅延させるメカニズムを提供する.先行条件が満たされると、Pod内のすべてのアプリケーションコンテナが並列に起動します.
例: masterで3つのyamlファイルを参照してください:init-pod.yaml、myservice.yaml、mydb.yaml 実行init-pod.yamlファイルvim init-pod.yaml
myapp-containerコンテナを構築する前にinit-myserviceコンテナとinit-mydbコンテナ2.1を構築してinit-podを実行する必要があることを示す.yamlファイル
2.2 podを見る(initは一人も起きていないし、readyも起きていない)実行init-myservice
編集:
podを表示(initはもう1つ起きています) mydbを実行します.yamlファイル
編集:
podの表示:(readyは正常)
OKが完了しました.
Initコンテナには、アプリケーションコンテナから分離された個別のミラーがあるため、関連コードの起動には次のような利点があります.
例:
apiVersion: v1
kind: Pod
metadata:
name: myapp-pod
labels:
app: myapp
spec:
containers:
- name: myapp-container
image: busybox
command: ['sh', '-c', 'echo The app is running! && sleep 3600']
initContainers:
- name: init-myservice
image: busybox
command: ['sh' , '-c','until nslookup myservice; do echo waiting for myservice; sleep 2; done;']
- name: init-mydb
image: busybox
command: ['sh', '-c', 'until nslookup mydb; do echo waiting for mydb; sleep 2; done;']
myapp-containerコンテナを構築する前にinit-myserviceコンテナとinit-mydbコンテナ2.1を構築してinit-podを実行する必要があることを示す.yamlファイル
[root@apiserver ~]# kubectl create -f init-pod.yaml
pod/myapp-pod created
2.2 podを見る(initは一人も起きていないし、readyも起きていない)
[root@apiserver ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-pod 0/1 Init:0/2 0 47s
vim myservice.yaml
編集:
kind: Service
apiVersion: v1
metadata:
name: myservice
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9376
podを表示(initはもう1つ起きています)
[root@apiserver ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-pod 0/1 Init:1/2 0 13m
vim mydb.yaml
編集:
kind: Service
apiVersion: v1
metadata:
name: mydb
spec:
ports:
- protocol: TCP
port: 80
targetPort: 9377
podの表示:(readyは正常)
[root@apiserver ~]# kubectl get pod
NAME READY STATUS RESTARTS AGE
myapp-pod 1/1 Running 0 61s
OKが完了しました.