6.8.3.3. ワークロードリソースマッピング
-
ワークロードリソースマッピングは、両方の API グループ (
binding.operators.coreos.comおよびservicebinding.io) のServiceBindingカスタムリソース (CR) のセカンダリーワークロードで使用できます。 -
servicebinding.ioAPI グループの下でのみ、ClusterWorkloadResourceMappingリソースを定義する必要があります。ただし、ClusterWorkloadResourceMappingリソースは、binding.operators.coreos.comおよびservicebinding.ioの両方の API グループでServiceBindingリソースと対話します。
コンテナーパスの設定方法を使用してカスタムパスの場所を設定できない場合は、バインディングデータを投影する必要がある場所を正確に定義できます。servicebinding.io API グループで ClusterWorkloadResourceMapping リソースを定義して、特定のワークロードの種類のバインディングデータを投影する場所を指定します。
次の例は、CronJob.batch/v1 リソースのマッピングを定義する方法を示しています。
例: CronJob.batch/v1 リソースのマッピング
apiVersion: servicebinding.io/v1beta1
kind: ClusterWorkloadResourceMapping
metadata:
name: cronjobs.batch
spec:
versions:
- version: "v1"
annotations: .spec.jobTemplate.spec.template.metadata.annotations
containers:
- path: .spec.jobTemplate.spec.template.spec.containers[*]
- path: .spec.jobTemplate.spec.template.spec.initContainers[*]
name: .name
env: .env
volumeMounts: .volumeMounts
volumes: .spec.jobTemplate.spec.template.spec.volumes
- 1
ClusterWorkloadResourceMappingリソースの名前。マップされたワークロードリソースのplural.groupとして修飾する必要があります。- 2
- マップされているリソースのバージョン。指定されていないバージョンは、*ワイルドカードと一致させることができます。
- 3
- オプション: Pod 内の
.annotationsフィールドの識別子。固定 JSONPath で指定されます。デフォルト値は.spec.template.spec.annotationsです。 - 4
- JSONPath で指定された、Pod 内の
.containersおよび.initContainersフィールドの識別子。containersフィールドの下にエントリーが定義されていない場合、Service Binding Operator のデフォルトは.spec.template.spec.containers[*]および.spec.template.spec.initContainers[\*]の 2 つのパスになり、他のすべてのフィールドはデフォルトとして次のように設定されます。ただし、エントリーを指定する場合は、.pathフィールドを定義する必要があります。 - 5
- オプション: コンテナー内の
.nameフィールドの識別子。固定 JSONPath で指定されます。デフォルト値は.nameです。 - 6
- オプション: コンテナー内の
.envフィールドの識別子。固定 JSONPath で指定されます。デフォルト値は.envです。 - 7
- オプション: コンテナー内の
.volumeMountsフィールドの識別子。固定 JSONPath で指定されます。デフォルト値は.volumeMountsです。 - 8
- オプション: Pod 内の
.volumesフィールドの識別子。固定 JSONPath で指定されます。デフォルト値は.spec.template.spec.volumesです。
このコンテキストでは、固定 JSONPath は、次の操作のみを受け入れる JSONPath 文法のサブセットです。
-
フィールド検索:
.spec.template -
配列のインデックス:
.spec['template']
その他の操作は受け付けません。
-
フィールド検索:
-
これらのフィールドのほとんどはオプションです。指定されていない場合、Service Binding Operator は
PodSpecリソースと互換性のあるデフォルトを想定します。 -
Service Binding Operator では、これらの各フィールドが Pod デプロイメントの対応するフィールドと構造的に同等である必要があります。たとえば、ワークロードリソースの
.envフィールドの内容は、Pod リソースの.envフィールドが受け入れるのと同じデータ構造を受け入れる必要があります。それができない場合、そのようなワークロードにバインディングデータを投影すると、Service Binding Operator で予期しない動作が発生する可能性があります。
binding.operators.coreos.com API グループに固有の動作
ClusterWorkloadResourceMapping リソースが binding.operators.coreos.com API グループの下の ServiceBinding リソースと対話する場合、次の動作が予想されます。
-
bindAsFiles: falseフラグ値を持つServiceBindingリソースがこれらのマッピングのいずれかと一緒に作成される場合、環境変数は、対応するClusterWorkloadResourceMappingリソースで指定された各pathフィールドの下の.envFromフィールドに投影されます。 クラスター管理者は、バインド目的で
ServiceBinding.bindings.coreos.comリソースのClusterWorkloadResourceMappingリソースと.spec.application.bindingPath.containersPathフィールドの両方を指定できます。Service Binding Operator は、
ClusterWorkloadResourceMappingリソースと.spec.application.bindingPath.containersPathフィールドの両方で指定された場所にバインディングデータを投影しようとします。この動作は、path: $containersPath属性を持つ対応するClusterWorkloadResourceMappingリソースにコンテナーエントリーを追加することと同じです。他のすべての値はデフォルト値を取ります。