7.2.2. Init Container の作成
initContainers 設定を含む Pod 仕様を作成することで、init コンテナーを作成します。
以下の例は、2 つの init コンテナーを持つ単純な Pod の概要を示しています。最初の初期化コンテナーは、myservice サービスが完了するまで待機します。その後、2 番目のプロセスは mydb サービスの完了を待ちます。両方の初期化コンテナーが完了すると、Pod が起動します。
手順
Init Container の Pod を作成します。
以下のような YAML ファイルを作成します。
apiVersion: v1 kind: Pod metadata: name: myapp-pod labels: app: myapp spec: securityContext: runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: - name: myapp-container image: registry.access.redhat.com/ubi9/ubi:latest command: ['sh', '-c', 'echo The app is running! && sleep 3600'] securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] initContainers: - name: init-myservice image: registry.access.redhat.com/ubi9/ubi:latest command: ['sh', '-c', 'until getent hosts myservice; do echo waiting for myservice; sleep 2; done;'] securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL] - name: init-mydb image: registry.access.redhat.com/ubi9/ubi:latest command: ['sh', '-c', 'until getent hosts mydb; do echo waiting for mydb; sleep 2; done;'] securityContext: allowPrivilegeEscalation: false capabilities: drop: [ALL]以下のコマンドを使用して Pod を作成します。
$ oc create -f myapp.yaml以下のコマンドを使用して、Pod の状態を確認してください。
$ oc get pods出力例
NAME READY STATUS RESTARTS AGE myapp-pod 0/1 Init:0/2 0 5sPod のステータス
Init:0/2は、2 つのサービスを待機していることを示します。
myserviceサービスを作成します。以下のような YAML ファイルを作成します。
kind: Service apiVersion: v1 metadata: name: myservice spec: ports: - protocol: TCP port: 80 targetPort: 9376以下のコマンドを使用して Pod を作成します。
$ oc create -f myservice.yaml以下のコマンドを使用して、Pod の状態を確認してください。
$ oc get pods出力例
NAME READY STATUS RESTARTS AGE myapp-pod 0/1 Init:1/2 0 5sPod のステータス
Init:1/2は、1 つのサービス (この場合はmydbサービス) を待機していることを示します。
mydbサービスを作成します。以下のような YAML ファイルを作成します。
kind: Service apiVersion: v1 metadata: name: mydb spec: ports: - protocol: TCP port: 80 targetPort: 9377以下のコマンドを使用して Pod を作成します。
$ oc create -f mydb.yaml以下のコマンドを使用して、Pod の状態を確認してください。
$ oc get pods出力例
NAME READY STATUS RESTARTS AGE myapp-pod 1/1 Running 0 2mPod の状態が
実行中になっている場合、Pod はサービスを待機しておらず、実行中であることを示します。