Udostępnij za pośrednictwem


Niepowodzenie propagacji zasobów: KlasterResourcePlacementOverridden ma wartość False

W tym artykule omówiono sposób rozwiązywania problemów ClusterResourcePlacementOverridden podczas propagacji zasobów przy użyciu interfejsu ClusterResourcePlacement API obiektów w usłudze Microsoft Azure Kubernetes Fleet Manager.

Symptomy

W przypadku używania obiektu interfejsu ClusterResourcePlacement API w usłudze Azure Kubernetes Fleet Manager do propagowania zasobów wdrożenie kończy się niepowodzeniem. Stan clusterResourcePlacementOverridden jest wyświetlany jako False.

Przyczyna

Ten problem może wystąpić, ponieważ obiekt ClusterResourceOverride lub ResourceOverride jest tworzony przy użyciu nieprawidłowej ścieżki pola dla zasobu.

Analiza przypadku

W poniższym przykładzie podjęto próbę zastąpienia roli klastra, która jest propagowana przez ClusterResourcePlacement element secret-reader do wybranych klastrów. ClusterResourceOverride Element jest jednak tworzony przy użyciu nieprawidłowej ścieżki dla zasobu.

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

Element ClusterRole secret-reader , który jest propagowany do klastrów składowych przez element ClusterResourcePlacement.

Specyfikacje 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

Element ClusterResourceOverride jest tworzony w celu zastąpienia ClusterRole secret-reader elementu przez dodanie nowej etykiety (new-label), która ma wartość new-value dla klastrów, które mają etykietę env: canary.

Specyfikacje 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

Stan 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 Jeśli warunek to False, sprawdź sekcjęplacementStatuses, aby uzyskać dokładną przyczynę błędu.

W takiej sytuacji komunikat wskazuje, że przesłonięcie nie powiodło się, ponieważ brakuje ścieżki /metadata/labels/new-label i odpowiadającej jej wartości. Na podstawie poprzedniego przykładu roli secret-readerklastra widać, że ścieżka /metadata/labels/ nie istnieje. Oznacza to, że labels nie istnieje. W związku z tym nie można dodać nowej etykiety.

Rozwiązanie

Aby pomyślnie zastąpić rolę secret-readerklastra , popraw ścieżkę i wartość w ClusterResourceOverridepliku , jak pokazano w poniższym kodzie:

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

Spowoduje to dodanie nowej etykiety newlabel z wartością new-value ClusterRole secret-reader.

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.