第15章 Pod の Preset (プリセット) を使用した情報の Pod への挿入
15.1. 概要
Pod の Preset は、ユーザーが指定する情報を Pod の作成時に Pod に挿入するオブジェクトです。
OpenShift Container Platform 3.7 の時点で、Pod の Preset はサポートされなくなりました。
挿入可能な Pod の Preset オブジェクトを使用します。
- シークレットオブジェクト
-
ConfigMap
オブジェクト - ストレージボリューム
- コンテナーボリュームのマウント
- 環境変数
開発者は、すべての情報を Pod に追加するために Pod ラベルが PodPreset のラベルセレクターに一致することのみを確認する必要があります。Pod の ラベル は、一致する ラベルセレクター を持つ 1 つ以上の Pod Preset オブジェクトに Pod を関連付けます。
Pod の Preset を使用すると、開発者は Pod が消費するサービスの詳細を把握せずに Pod をプロビジョニングできます。管理者は、開発者が Pod をデプロイできないようにすることなく、サービスの設定項目を開発者に表示されないようにすることができます。たとえば、管理者は環境変数を使ってシークレットおよびデータベースポート経由でデータベースの名前、ユーザー名、パスワードを提供する Pod の Preset を作成できます。Pod 開発者は、すべての情報を Pod に含めるために使用するラベルのみを知っている必要があります。開発者は Pod の Preset を作成し、すべての同じタスクを実行することもできます。たとえば、開発者は環境変数を複数の Pod に自動的に挿入する Preset を作成できます。
Pod の Preset が Pod に適用されると、OpenShift Container Platform は Pod 仕様を変更し、挿入可能なデータを追加し、Pod の Preset で変更されたことを示すアノテーションを Pod 仕様に付けます。アノテーションの形式は以下のとおりです。
podpreset.admission.kubernetes.io/<pod-preset name>: `resource version`
クラスターで Pod の Preset を使用するには、以下を実行します。
- 管理者は、/etc/origin/master/master -config.yaml で Pod の Preset 受付コントローラープラグインを有効 にする必要があります。
-
Pod の Preset の作成者は Pod の Preset で API タイプの
settings.k8s.io/v1alpha1/podpreset
を有効にし、挿入可能な情報を Pod の Preset に追加する必要があります。
Pod の作成時にエラーが生じる場合は、Pod の Preset から挿入されたリソースなしに Pod が作成されている場合です。
Pod 仕様の podpreset.admission.kubernetes.io/exclude: "true"
パラメーターを使用して、Pod の Preset 変更によって特定の Pod が変更されないようにすることができます。以下の Pod 仕様の例 を参照してください。
Pod の Preset 機能は、サービスカタログ がインストールされている場合にのみ利用できます。
Pod の Preset オブジェクトの例
kind: PodPreset apiVersion: settings.k8s.io/v1alpha1 1 metadata: name: allow-database 2 spec: selector: matchLabels: role: frontend 3 env: - name: DB_PORT 4 value: "6379" 5 envFrom: - configMapRef: 6 name: etcd-env-config - secretKeyRef: 7 name: test-secret volumeMounts: 8 - mountPath: /cache name: cache-volume volumes: 9 - name: cache-volume emptyDir: {}
Pod 仕様の例
apiVersion: v1
kind: Pod
metadata:
name: website
labels:
app: website
role: frontend 1
spec:
containers:
- name: website
image: ecorp/website
ports:
- containerPort: 80
- 1
- Pod の Preset のラベルセレクターに一致するラベルです。
Pod の Preset 適用後の Pod 仕様の例
apiVersion: v1 kind: Pod metadata: name: website labels: app: website role: frontend annotations: podpreset.admission.kubernetes.io/allow-database: "resource version" 1 spec: containers: - name: website image: ecorp/website volumeMounts: 2 - mountPath: /cache name: cache-volume ports: - containerPort: 80 env: 3 - name: DB_PORT value: "6379" envFrom: 4 - configMapRef: name: etcd-env-config - secretKeyRef: name: test-secret volumes: 5 - name: cache-volume emptyDir: {}
Pod を Pod の Preset から除外する Pod 仕様の例
apiVersion: v1
kind: Pod
metadata:
name: no-podpreset
labels:
app: website
role: frontend
annotations:
podpreset.admission.kubernetes.io/exclude: "true" 1
spec:
containers:
- name: hello-pod
image: docker.io/ocpqe/hello-pod
- 1
- Pod の Preset 機能がこの Pod を挿入できないようにするにはこのパラメーターを追加します。