Freigeben über


Fehler bei der Ressourcenausbreitung: ClusterResourcePlacementOverridden ist False.

In diesem Artikel wird erläutert, wie Sie Probleme beheben können, wenn Sie Ressourcen mithilfe der ClusterResourcePlacementOverridden Objekt-API im Microsoft Azure Kubernetes Fleet Manager verbreiten.

Symptome

Wenn Sie das ClusterResourcePlacement API-Objekt in Azure Kubernetes Fleet Manager zum Verteilen von Ressourcen verwenden, schlägt die Bereitstellung fehl. Der Status von clusterResourcePlacementOverridden wird als False angezeigt.

Ursache

Dieses Problem kann auftreten, weil entweder das ClusterResourceOverride oder das ResourceOverride mit einem ungültigen Feldpfad für die Ressource erstellt wird.

Fallstudie

Im folgenden Beispiel wird versucht, die Clusterrolle secret-reader zu überschreiben, die von ClusterResourcePlacement an die ausgewählten Cluster weitergegeben wird. Dies ClusterResourceOverride wird jedoch mithilfe eines ungültigen Pfads für die Ressource erstellt.

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

Das ClusterRolesecret-reader, das von der ClusterResourcePlacement an die Mitgliedscluster weitergegeben wird.

ClusterResourceOverride-Spezifikationen

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 wird erstellt, um die ClusterRolesecret-reader zu übersteuern, indem eine neue Bezeichnung (new-label) hinzugefügt wird, die den Wert new-value für die Cluster mit der Bezeichnung env: canary aufweist.

ClusterResourcePlacement-Spezifikationen

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:

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

Wenn die ClusterResourcePlacementOverridden Bedingung lautet False, überprüfen Sie den placementStatuses Abschnitt, um die genaue Ursache des Fehlers zu erhalten.

In diesem Fall gibt die Meldung an, dass die Außerkraftsetzung fehlgeschlagen ist, da der Pfad /metadata/labels/new-label und der entsprechende Wert fehlen. Basierend auf dem vorherigen Beispiel der Clusterrolle secret-readerkönnen Sie sehen, dass der Pfad /metadata/labels/ nicht vorhanden ist. Dies bedeutet, dass labels es nicht vorhanden ist. Daher kann keine neue Bezeichnung hinzugefügt werden.

Beschluss

Um die Clusterrolle secret-readererfolgreich außer Kraft zu setzen, korrigieren Sie den Pfad und Wert in ClusterResourceOverride, wie im folgenden Code dargestellt:

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

Dadurch wird das neue Label newlabel mit dem Wert new-value zur ClusterRole secret-reader hinzugefügt.

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe benötigen, erstellen Sie eine Support-Anfrage oder wenden Sie sich an den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.