次の方法で共有


クラスター リソースのオーバーライドを使用した Azure Kubernetes Fleet Manager でクラスター スコープ リソースをカスタマイズする (プレビュー)

この記事では、ClusterResourceOverride API を使用して、Azure Kubernetes Fleet Manager のクラスター スコープ リソースをカスタマイズする方法の概要について説明します。

重要

Azure Kubernetes Fleet Manager のプレビュー機能は、セルフサービス、オプトイン ベースで利用できます。 プレビューは、"現状有姿のまま" および "利用可能な限度" で提供され、サービス レベル アグリーメントおよび限定保証から除外されるものとします。 Azure Kubernetes Fleet Manager のプレビューは、ベストエフォート ベースでカスタマー サポートによって部分的にカバーされます。 そのため、これらの機能は、運用環境での使用を意図していません。

クラスター リソースのオーバーライドの概要

クラスター リソースのオーバーライド機能では、クラスター全体のリソースにわたって特定の属性を変更またはオーバーライドできます。 ClusterResourceOverride を使用すると、クラスター ラベルに基づいてルールを定義し、名前空間、クラスター ロール、クラスターの役割のバインド、またはカスタム リソース定義 (CRD) など、さまざまなクラスター全体のリソースに適用する変更を指定できます。 これらの変更には、アクセス許可、構成、またはその他のパラメーターの更新が含まれる場合があり、Fleet マネージド Kubernetes クラスター全体で一貫性のある構成の管理と適用が保証されます。

API コンポーネント

ClusterResourceOverride API は次のコンポーネントで構成されます。

  • clusterResourceSelectors: オーバーライドするために選択した一連のクラスター リソースを指定します。
  • policy: 選択したクラスター リソースに適用する一連のルールを指定します。

クラスター リソース セレクター

ClusterResourceOverride オブジェクトには、オーバーライドするリソースを指定する 1 つ以上のクラスター リソース セレクターを含めることができます。 ClusterResourceSelector オブジェクトは次のフィールドをサポートします。

Note

ClusterResourceSelector で名前空間を選択すると、オーバーライドは名前空間内のすべてのリソースに適用されます。

  • group: リソースの API グループ。
  • version: リソースの API バージョン。
  • kind: リソースの種類。
  • name: リソースの名前。

クラスター リソース セレクターを ClusterResourceOverride オブジェクトに追加するには、clusterResourceSelectors フィールドを次の YAML 形式で使用します。

apiVersion: placement.kubernetes-fleet.io/v1alpha1
kind: ClusterResourceOverride
metadata:
  name: example-cro
spec:
  clusterResourceSelectors:
    - group: rbac.authorization.k8s.io
      kind: ClusterRole
      version: v1
      name: secret-reader

この例では、以下に示す、rbac.authorization.k8s.io/v1 API グループからの secret-reader という名前の ClusterRole を選択して、オーバーライドしています。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

ポリシー

Policy オブジェクトは、選択したクラスター リソースに適用する変更を指定する一連のルール (overrideRules) で構成されます。 各 overrideRule オブジェクトは次のフィールドをサポートします。

  • clusterSelector: オーバーライド規則が適用されるクラスターのセットを指定します。
  • jsonPatchOverrides: 選択したリソースに適用する変更を指定します。

規則のオーバーライドを ClusterResourceOverride オブジェクトに追加するには、policy フィールドを次の YAML 形式で使用します。

apiVersion: placement.kubernetes-fleet.io/v1alpha1
kind: ClusterResourceOverride
metadata:
  name: example-cro
spec:
  clusterResourceSelectors:
    - group: rbac.authorization.k8s.io
      kind: ClusterRole
      version: v1
      name: secret-reader
  policy:
    overrideRules:
      - clusterSelector:
          clusterSelectorTerms:
            - labelSelector:
                matchLabels:
                  env: prod
        jsonPatchOverrides:
          - op: remove
            path: /rules/0/verbs/2

この例では、secret-reader という名前の ClusterRole 内の Verb "list" を、ラベル env: prod を持つクラスターから削除します。

クラスター セレクター

overrideRule オブジェクトの clusterSelector フィールドを使用して、規則のオーバーライドが適用されるクラスターを指定できます。 ClusterSelector オブジェクトでは、次のフィールドがサポートされています。

  • clusterSelectorTerms: クラスターを選択する基準を指定する用語の一覧。 各用語には labelSelector フィールドが含まれ、一致する一連のラベルを定義します。

重要

clusterSelectorTerms フィールドでは labelSelector のみがサポートされています。

JSON パッチのオーバーライド

overrideRule オブジェクトで jsonPatchOverrides を使用すると、選択したリソースに適用する変更を指定できます。 JsonPatch オブジェクトでは、次のフィールドがサポートされています。

  • op: 実行する操作。
    • サポートされている操作には、addremovereplace などがあります。
      • add: 指定されたパスに新しい値を追加します。
      • remove: 指定したパスにある値を削除します。
      • replace: 指定したパスにある値を置き換えます。
  • path: 変更するフィールドへのパス。
    • パスの指定に関するガイダンスには次のものが含まれます。
      • / 文字で始まる必要があります。
      • 空にしたり、空の文字列を含めたりすることはできません。
      • TypeMeta フィールド ("/kind" または "/apiVersion") にすることはできません。
      • フィールド "/metadata/labels" と "/metadata/annotations" 以外の Metadata フィールド ("/metadata/name" または "/metadata/namespace") にすることはできません。
      • リソースの状態のフィールドとして指定することはできません。
      • 有効なパスの例を次に示します。
        • /metadata/labels/new-label
        • /metadata/annotations/new-annotation
        • /spec/template/spec/containers/0/resources/limits/cpu
        • /spec/template/spec/containers/0/resources/requests/memory
  • value: 追加、削除、または置換する値。
    • opremove である場合、value を指定することはできません。

複数のオーバーライド パッチを使用する

次の例に示すように、複数の jsonPatchOverridesoverrideRule に追加して、選択したクラスター リソースに複数の変更を適用できます。

apiVersion: placement.kubernetes-fleet.io/v1alpha1
kind: ClusterResourceOverride
metadata:
  name: cro-1
spec:
  clusterResourceSelectors:
    - group: rbac.authorization.k8s.io
      kind: ClusterRole
      version: v1
      name: secret-reader
  policy:
    overrideRules:
      - clusterSelector:
          clusterSelectorTerms:
            - labelSelector:
                matchLabels:
                  env: prod
        jsonPatchOverrides:
          - op: remove
            path: /rules/0/verbs/2
          - op: remove
            path: /rules/0/verbs/1

この例では、以下に示す、secret-reader という名前の ClusterRole 内の Verb "list" および "watch" を、ラベルが env: prod のクラスターから削除しています。

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: secret-reader
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["get", "watch", "list"]

jsonPatchOverrides は、RFC 6902 に従って選択したリソースに JSON パッチを適用します。

クラスター リソースのオーバーライドを適用する

  1. 次の例に示すように、ClusterResourcePlacement リソースを作成して、クラスター リソースのオーバーライドをクラスター インフラストラクチャ全体に分散するための配置ルールを指定します。 適切なリソースを選択してください。

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ClusterResourcePlacement
    metadata:
      name: crp
    spec:
      resourceSelectors:
        - group: rbac.authorization.k8s.io
          kind: ClusterRole
          version: v1
          name: secret-reader
      policy:
        placementType: PickAll
        affinity:
          clusterAffinity:
            requiredDuringSchedulingIgnoredDuringExecution:
              clusterSelectorTerms:
                - labelSelector:
                    matchLabels:
                      env: prod
    

    この例では、env: prod でラベル付けされたすべてのクラスターにリソースを分散します。 変更が実装されると、対応する ClusterResourceOverride 構成は、一致するクラスター ロール リソース (secret-reader) の選択によってトリガーされた、指定されたクラスターに適用されます。

  2. kubectl apply コマンドを使用して ClusterResourcePlacement を適用します。

    kubectl apply -f cluster-resource-placement.yaml
    
  3. kubectl describe コマンドを使用して ClusterResourcePlacement リソースの状態を確認して、選択したリソースに適用された ClusterResourceOverride オブジェクトを確認します。

    kubectl describe clusterresourceplacement crp
    

    出力は、次の出力例のようになります。

    Status:
      Conditions:
        ...
        Last Transition Time:   2024-04-27T04:18:00Z
        Message:                The selected resources are successfully overridden in the 10 clusters
        Observed Generation:    1
        Reason:                 OverriddenSucceeded
        Status:                 True
        Type:                   ClusterResourcePlacementOverridden
        ...
      Observed Resource Index:  0
      Placement Statuses:
        Applicable Cluster Resource Overrides:
          example-cro-0
        Cluster Name:  member-50
        Conditions:
          ...
          Message:               Successfully applied the override rules on the resources
          Observed Generation:   1
          Reason:                OverriddenSucceeded
          Status:                True
          Type:                  Overridden
         ...
    

    ClusterResourcePlacementOverridden 条件は、クラスターで選択されたリソースにリソースのオーバーライドが正常に適用されたかどうかを示します。 各クラスターは独自の Applicable Cluster Resource Overrides の一覧を保持し、関連する場合はクラスター リソースのオーバーライド スナップショットが含まれます。 各クラスターの個別の状態メッセージは、規則のオーバーライドが正常に適用されたかどうかを示します。

次のステップ

Fleet の詳細については、次のリソースを参照してください。