7.2.2. Init コンテナーの作成
以下の例は、2 つの init コンテナーを持つ単純な Pod の概要を示しています。1 つ目は myservice を待機し、2 つ目は mydb を待機します。両方のコンテナーが完了すると、Pod が開始されます。
手順
Init コンテナーの 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.yamlPod のステータスを表示します。
$ 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: 9376Pod を作成します。
$ oc create -f myservice.yamlPod のステータスを表示します。
$ 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: 9377Pod を作成します。
$ oc create -f mydb.yamlPod のステータスを表示します。
$ oc get pods出力例
NAME READY STATUS RESTARTS AGE myapp-pod 1/1 Running 0 2mPod のステータスは、サービスを待機しておらず、実行中であることを示していました。