Delen via


Fout bij het doorgeven van resources: ClusterResourcePlacementOverridden is onwaar

In dit artikel wordt beschreven hoe u problemen oplost ClusterResourcePlacementOverridden wanneer u resources doorgeeft met behulp van de ClusterResourcePlacement object-API in Microsoft Azure Kubernetes Fleet Manager.

Symptomen

Wanneer u het ClusterResourcePlacement API-object in Azure Kubernetes Fleet Manager gebruikt om resources door te geven, mislukt de implementatie. De clusterResourcePlacementOverridden status wordt weergegeven als False.

Oorzaak

Dit probleem kan optreden omdat de ClusterResourceOverride of ResourceOverride wordt gemaakt met behulp van een ongeldig veldpad voor de resource.

Casestudy

In het volgende voorbeeld wordt geprobeerd de clusterrol secret-reader te overschrijven die door de ClusterResourcePlacement geselecteerde clusters wordt doorgegeven. De ClusterResourceOverride wordt echter gemaakt met behulp van een ongeldig pad voor de resource.

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

De ClusterRole secret-reader die wordt doorgegeven aan de lidclusters door de ClusterResourcePlacement.

Specificaties van 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

De ClusterResourceOverride wordt gemaakt om het ClusterRole secret-reader te overschrijven door een nieuw label (new-label) toe te voegen met de waarde new-value voor de clusters met het label env: canary.

Specificaties van 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

Status van 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

Als de ClusterResourcePlacementOverridden voorwaarde is False, controleert u de placementStatuses sectie om de exacte oorzaak van de fout op te halen.

In dit geval geeft het bericht aan dat de onderdrukking is mislukt omdat het pad /metadata/labels/new-label en de bijbehorende waarde ontbreken. Op basis van het vorige voorbeeld van de clusterrol secret-readerkunt u zien dat het pad /metadata/labels/ niet bestaat. Dit betekent dat dat labels niet bestaat. Daarom kan er geen nieuw label worden toegevoegd.

Oplossing

Als u de clusterrol secret-readerwilt overschrijven, corrigeert u het pad en de waarde in ClusterResourceOverride, zoals wordt weergegeven in de volgende code:

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

Hiermee wordt het nieuwe label newlabel met de waarde new-value toegevoegd aan clusterrole secret-reader.

Contacteer ons voor hulp

Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.