다음을 통해 공유


리소스 전파 실패: ClusterResourcePlacementOverridden is False

이 문서에서는 Microsoft Azure Kubernetes Fleet Manager에서 개체 API를 사용하여 리소스를 ClusterResourcePlacement 전파할 때 발생하는 문제를 해결하는 ClusterResourcePlacementOverridden 방법을 설명합니다.

증상

Azure Kubernetes Fleet Manager에서 ClusterResourcePlacement API 개체를 사용하여 리소스를 전파하면 배포가 실패합니다. 상태는 clusterResourcePlacementOverridden 다음과 같이 False표시됩니다.

원인

이 문제는 리소스에 ClusterResourceOverride 대해 잘못된 필드 경로를 사용하여 생성되었거나 ResourceOverride 생성되었기 때문에 발생할 수 있습니다.

사례 연구

다음 예제에서는 선택한 클러스터에 전파되는 클러스터 역할을 secret-reader 재정의 ClusterResourcePlacement 하려고 시도합니다. 그러나 리소스에 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-reader 의해 ClusterResourcePlacement멤버 클러스터로 전파되는 값입니다.

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-value 이 있는 새 레이블(new-label)을 추가하여 재정의하기 위해 만들어집니다env: 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 False경우 섹션을 placementStatuses 확인하여 오류의 정확한 원인을 확인합니다.

이 경우 메시지는 경로 /metadata/labels/new-label 와 해당 값이 누락되어 재정의가 실패했음을 나타냅니다. 클러스터 역할 secret-reader의 이전 예제에 따라 경로 /metadata/labels/ 가 존재하지 않는 것을 확인할 수 있습니다. 즉, labels 존재하지 않습니다. 따라서 새 레이블을 추가할 수 없습니다.

해결

클러스터 역할을 secret-reader성공적으로 재정의하려면 다음 코드와 같이 경로 및 값을 ClusterResourceOverride수정합니다.

jsonPatchOverrides:
  - op: add
    path: /metadata/labels
    value: 
      newlabel: new-value

그러면 값 new-value 이 있는 새 레이블 newlabel 이 ClusterRolesecret-reader에 추가됩니다.

도움을 요청하십시오.

질문이 있거나 도움이 필요한 경우 지원 요청을 생성하거나Azure 커뮤니티 지원에 문의하세요. Azure 피드백 커뮤니티에 제품 피드백을 제출할 수도 있습니다.