第2章 Pod の使用
2.1. Pod の使用
Pod は 1 つのホストにデプロイされる 1 つ以上のコンテナーであり、定義され、デプロイされ、管理される最小のコンピュート単位です。
2.1.1. Pod について
Pod はコンテナーに対してマシンインスタンス (物理または仮想) とほぼ同じ機能を持ちます。各 Pod は独自の内部 IP アドレスで割り当てられるため、そのポートスペース全体を所有し、Pod 内のコンテナーはそれらのローカルストレージおよびネットワークを共有できます。
Pod にはライフサイクルがあります。それらは定義された後にノードで実行されるために割り当てられ、コンテナーが終了するまで実行されるか、その他の理由でコンテナーが削除されるまで実行されます。ポリシーおよび終了コードによっては、Pod は終了後に削除されるか、コンテナーのログへのアクセスを有効にするために保持される可能性があります。
Red Hat OpenShift Service on AWS は Pod をほぼイミュータブルなものとして扱います。Pod の実行中に Pod 定義を変更することはできません。Red Hat OpenShift Service on AWS は、既存の Pod を終了し、変更された設定、ベースイメージ、またはその両方を使用して Pod を再作成することによって変更を実装します。Pod は拡張可能なものとしても処理されますが、再作成時に状態を維持しません。Pod は拡張可能なものとして処理されますが、再作成時に状態を維持しません。 そのため、通常 Pod はユーザーから直接管理されるのでははく、ハイレベルのコントローラーで管理される必要があります。
レプリケーションコントローラーによって管理されないベア Pod はノードの中断時に再スケジュールされません。
2.1.2. Pod 設定の例
Red Hat OpenShift Service on AWS は、Kubernetes の Pod の概念を活用しています。Pod は、1 つのホスト上に一緒にデプロイされる 1 つ以上のコンテナーであり、定義、デプロイ、管理できる最小のコンピュート単位です。
以下は Pod の定義例です。これは数多くの Pod の機能を示していますが、それらのほとんどは他のトピックで説明されるため、ここではこれらを簡単に説明します。
Pod
オブジェクト定義 (YAML)
kind: Pod apiVersion: v1 metadata: name: example labels: environment: production app: abc 1 spec: restartPolicy: Always 2 securityContext: 3 runAsNonRoot: true seccompProfile: type: RuntimeDefault containers: 4 - name: abc args: - sleep - "1000000" volumeMounts: 5 - name: cache-volume mountPath: /cache 6 image: registry.access.redhat.com/ubi7/ubi-init:latest 7 securityContext: allowPrivilegeEscalation: false runAsNonRoot: true capabilities: drop: ["ALL"] resources: limits: memory: "100Mi" cpu: "1" requests: memory: "100Mi" cpu: "1" volumes: 8 - name: cache-volume emptyDir: sizeLimit: 500Mi
- 1
- Pod には 1 つまたは複数のラベルで "タグ付け" することができ、このラベルを使用すると、一度の操作で Pod グループの選択や管理が可能になります。これらのラベルは、キー/値形式で
metadata
ハッシュに保存されます。 - 2
- Pod 再起動ポリシーと使用可能な値の
Always
、OnFailure
、およびNever
です。デフォルト値はAlways
です。 - 3
- Red Hat OpenShift Service on AWS は、コンテナーを特権付きコンテナーとして実行するか、選択したユーザーとして実行するかどうかを指定するセキュリティーコンテキストを定義します。デフォルトのコンテキストには多くの制限がありますが、管理者は必要に応じてこれを変更できます。
- 4
containers
は、1 つ以上のコンテナー定義の配列を指定します。- 5
- コンテナーは、コンテナー内に外部ストレージボリュームをマウントする場所を指定します。
- 6
- Pod に提供するボリュームを指定します。ボリュームは指定されたパスにマウントされます。コンテナーのルート (
/
) や、ホストとコンテナーで同じパスにはマウントしないでください。これは、コンテナーに十分な特権が付与されている場合に、ホストシステムを破壊する可能性があります (例: ホストの/dev/pts
ファイル)。ホストをマウントするには、/host
を使用するのが安全です。 - 7
- Pod 内の各コンテナーは、独自のコンテナーイメージからインスタンス化されます。
- 8
- Pod は、コンテナーで使用できるストレージボリュームを定義します。
ファイル数が多い永続ボリュームを Pod に割り当てる場合、それらの Pod は失敗するか、起動に時間がかかる場合があります。詳細は、When using Persistent Volumes with high file counts in OpenShift, why do pods fail to start or take an excessive amount of time to achieve "Ready" state? を参照してください。
この Pod 定義には、Pod が作成され、ライフサイクルが開始した後に Red Hat OpenShift Service on AWS によって自動的に設定される属性が含まれません。Kubernetes Pod ドキュメント には、Pod の機能および目的の詳細が記載されています。
2.1.3. 関連情報
- Pod とストレージの詳細は、Understanding persistent storage と Understanding ephemeral storage を参照してください。