概要
この記事では、Microsoft Azure Kubernetes Fleet Manager で配置 API を使用してリソースを伝達するときのオーバーライド エラーのトラブルシューティング方法について説明します。 この問題は、 ClusterResourcePlacement と ResourcePlacementの両方に適用され、それぞれに独自のカスタム リソース条件の種類が適用されます。
-
ClusterResourcePlacementOverriddenClusterResourcePlacement の場合 -
ResourcePlacementOverriddenResourcePlacement の場合
サンプル エラー メッセージ:
- lastTransitionTime: "2024-05-07T23:32:40Z"
message: Failed to override resources for 1 clusters, please check the `failedPlacements` status
observedGeneration: 1
reason: OverrideFailed
status: "False"
type: ClusterResourcePlacementOverridden
症状
Azure Kubernetes Fleet Manager で ClusterResourcePlacement または ResourcePlacement API オブジェクトを使用してリソースを伝達すると、デプロイは失敗します。
ClusterResourcePlacementOverridden (ClusterResourcePlacement の場合) または ResourcePlacementOverridden (ResourcePlacement の場合) の状態は、Falseとして表示されます。
注
詳細については、オーバーライド コントローラー ログ (ClusterResourceOverride と ResourceOverride のコントローラーを含む) を調べます。 フリート エージェント ログの表示の詳細については、「 Azure Kubernetes Fleet Manager でのエージェント ログの表示」を参照してください。
原因
この問題は、リソースの無効なフィールド パスを使用して ClusterResourceOverride または ResourceOverride が作成されるために発生する可能性があります。
ケース スタディ: ClusterResourcePlacement
次の例では、ClusterResourcePlacementが選択されたクラスターに伝達するクラスター ロールをsecret-readerがオーバーライドしようとしています。
ただし、 ClusterResourceOverride は、リソースの無効なパスを使用して作成されます。
ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
annotations:
kubectl.kubernetes.io/last-applied-configuration: |
{"apiVersion":"rbac.authorization.k8s.io/v1","kind":"ClusterRole","metadata":{"annotations":{},"name":"secret-reader"},"rules":[{"apiGroups":[""],"resources":["secrets"],"verbs":["get","watch","list"]}]}
creationTimestamp: "2024-05-14T15:36:48Z"
name: secret-reader
resourceVersion: "81334"
uid: 108e6312-3416-49be-aa3d-a665c5df58b4
rules:
- apiGroups:
- ""
resources:
- secrets
verbs:
- get
- watch
- list
ClusterRoleがメンバー クラスターに伝達するsecret-readerClusterResourcePlacement。
ClusterResourceOverride の仕様
spec:
clusterResourceSelectors:
- group: rbac.authorization.k8s.io
kind: ClusterRole
name: secret-reader
version: v1
policy:
overrideRules:
- clusterSelector:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: canary
jsonPatchOverrides:
- op: add
path: /metadata/labels/new-label
value: new-value
ClusterResourceOverrideは、ClusterRoleのラベルを持つクラスターに対して、新しいラベル (secret-reader) に値new-labelを追加することによって、new-valueenv: canaryをオーバーライドするために作成されます。
ClusterResourcePlacement の仕様
spec:
resourceSelectors:
- group: rbac.authorization.k8s.io
kind: ClusterRole
name: secret-reader
version: v1
policy:
placementType: PickN
numberOfClusters: 1
affinity:
clusterAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
clusterSelectorTerms:
- labelSelector:
matchLabels:
env: canary
strategy:
type: RollingUpdate
applyStrategy:
allowCoOwnership: true
ClusterResourcePlacement の状態:
status:
conditions:
- lastTransitionTime: "2024-05-14T16:16:18Z"
message: found all cluster needed as specified by the scheduling policy, found
1 cluster(s)
observedGeneration: 1
reason: SchedulingPolicyFulfilled
status: "True"
type: ClusterResourcePlacementScheduled
- lastTransitionTime: "2024-05-14T16:16:18Z"
message: All 1 cluster(s) start rolling out the latest resource
observedGeneration: 1
reason: RolloutStarted
status: "True"
type: ClusterResourcePlacementRolloutStarted
- lastTransitionTime: "2024-05-14T16:16:18Z"
message: Failed to override resources in 1 cluster(s)
observedGeneration: 1
reason: OverriddenFailed
status: "False"
type: ClusterResourcePlacementOverridden
observedResourceIndex: "0"
placementStatuses:
- applicableClusterResourceOverrides:
- cro-1-0
clusterName: kind-cluster-1
conditions:
- lastTransitionTime: "2024-05-14T16:16:18Z"
message: 'Successfully scheduled resources for placement in kind-cluster-1 (affinity
score: 0, topology spread score: 0): picked by scheduling policy'
observedGeneration: 1
reason: Scheduled
status: "True"
type: Scheduled
- lastTransitionTime: "2024-05-14T16:16:18Z"
message: Detected the new changes on the resources and started the rollout process
observedGeneration: 1
reason: RolloutStarted
status: "True"
type: RolloutStarted
- lastTransitionTime: "2024-05-14T16:16:18Z"
message: 'Failed to apply the override rules on the resources: add operation
does not apply: doc is missing path: "/metadata/labels/new-label": missing
value'
observedGeneration: 1
reason: OverriddenFailed
status: "False"
type: Overridden
selectedResources:
- group: rbac.authorization.k8s.io
kind: ClusterRole
name: secret-reader
version: v1
ClusterResourcePlacementOverridden (ClusterResourcePlacement の場合) またはResourcePlacementOverridden (ResourcePlacement の場合) の条件がFalse場合は、placementStatusesセクションを確認して、エラーの正確な原因を確認します。
この例では、パス /metadata/labels/new-label とそれに対応する値がないため、オーバーライドに失敗したことを示すメッセージが表示されます。
クラスター ロール secret-readerの前の例に基づいて、パス /metadata/labels/ が存在しないことがわかります。
labels フィールドが存在しません。
そのため、新しいラベルを追加することはできません。
解決策
クラスター ロール secret-readerを正常にオーバーライドするには、次のコードに示すように、 ClusterResourceOverrideのパスと値を修正します。
jsonPatchOverrides:
- op: add
path: /metadata/labels
value:
newlabel: new-value
このコードは、値がnewlabelされた新しいラベル new-valueを ClusterRole secret-readerに追加します。
一般的な注意事項
ResourcePlacement の場合、オーバーライド フローは同じですが、すべてのリソースが同じ名前空間に存在する点が異なります。
ResourceOverrideではなくClusterResourceOverrideを使用し、条件のResourcePlacementOverriddenを想定します。