Partager via


Échec de propagation des ressources : ClusterResourcePlacementOverridden a la valeur False

Cet article explique comment résoudre les ClusterResourcePlacementOverridden problèmes liés à la propagation des ressources à l’aide de l’API ClusterResourcePlacement objet dans Microsoft Azure Kubernetes Fleet Manager.

Symptômes

Lorsque vous utilisez l’objet ClusterResourcePlacement API dans Azure Kubernetes Fleet Manager pour propager des ressources, le déploiement échoue. L’état clusterResourcePlacementOverridden s’affiche sous la forme False.

Cause

Ce problème peut se produire, car le ClusterResourceOverride ou ResourceOverride est créé à l’aide d’un chemin de champ non valide pour la ressource.

Étude de cas

Dans l’exemple suivant, une tentative est effectuée pour remplacer le rôle secret-reader de cluster propagé par les ClusterResourcePlacement clusters sélectionnés. Toutefois, le fichier ClusterResourceOverride est créé à l’aide d’un chemin d’accès non valide pour la ressource.

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 Propagé aux clusters membres par le ClusterResourcePlacement.

Spécifications 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

Il ClusterResourceOverride est créé pour remplacer le ClusterRole secret-reader par l’ajout d’une nouvelle étiquette (new-label) qui a la valeur new-value des clusters qui ont l’étiquette env: canary.

Spécifications 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

État 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

Si la ClusterResourcePlacementOverridden condition est False, vérifiez la placementStatuses section pour obtenir la cause exacte de l’échec.

Dans ce cas, le message indique que le remplacement a échoué, car le chemin d’accès /metadata/labels/new-label et sa valeur correspondante sont manquants. En fonction de l’exemple précédent du rôle secret-readerde cluster, vous pouvez voir que le chemin d’accès /metadata/labels/ n’existe pas. Cela signifie qu’il labels n’existe pas. Par conséquent, une nouvelle étiquette ne peut pas être ajoutée.

Résolution

Pour remplacer correctement le rôle secret-readerde cluster, corrigez le chemin d’accès et la valeur ClusterResourceOverridedans , comme indiqué dans le code suivant :

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

Cela ajoute la nouvelle étiquette newlabel qui a la valeur new-value à ClusterRole secret-reader.

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.