クラスター リソースのオーバーライドを使用した 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
: 実行する操作。- サポートされている操作には、
add
、remove
、replace
などがあります。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
: 追加、削除、または置換する値。op
がremove
である場合、value
を指定することはできません。
複数のオーバーライド パッチを使用する
次の例に示すように、複数の jsonPatchOverrides
を overrideRule
に追加して、選択したクラスター リソースに複数の変更を適用できます。
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 パッチを適用します。
クラスター リソースのオーバーライドを適用する
次の例に示すように、
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
) の選択によってトリガーされた、指定されたクラスターに適用されます。kubectl apply
コマンドを使用してClusterResourcePlacement
を適用します。kubectl apply -f cluster-resource-placement.yaml
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 の詳細については、次のリソースを参照してください。
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示