Compartir a través de


Error de propagación de recursos: ClusterResourcePlacementOverridden es False

En este artículo se describe cómo solucionar problemas ClusterResourcePlacementOverridden al propagar recursos mediante la ClusterResourcePlacement API de objetos de Microsoft Azure Kubernetes Fleet Manager.

Síntomas

Cuando se usa el ClusterResourcePlacement objeto de API en Azure Kubernetes Fleet Manager para propagar recursos, se produce un error en la implementación. El clusterResourcePlacementOverridden estado se muestra como False.

Causa

Este problema puede producirse porque o ClusterResourceOverride ResourceOverride se crea mediante una ruta de acceso de campo no válida para el recurso.

Caso práctico

En el ejemplo siguiente, se intenta invalidar el rol secret-reader de clúster propagado por en ClusterResourcePlacement los clústeres seleccionados. Sin embargo, ClusterResourceOverride se crea mediante una ruta de acceso no válida para el recurso.

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

que ClusterRole secret-reader se propaga a los clústeres de miembros mediante .ClusterResourcePlacement

Especificaciones de 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 se crea para invalidar ClusterRole secret-reader mediante la adición de una nueva etiqueta (new-label) que tiene el valor new-value de los clústeres que tienen la etiqueta env: canary.

Especificaciones de 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

Estado 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 condición es False, compruebe la placementStatuses sección para obtener la causa exacta del error.

En esta situación, el mensaje indica que se produjo un error en la invalidación porque falta la ruta de acceso /metadata/labels/new-label y su valor correspondiente. En función del ejemplo anterior del rol secret-readerde clúster, puede ver que la ruta de acceso /metadata/labels/ no existe. Esto significa que labels no existe. Por lo tanto, no se puede agregar una nueva etiqueta.

Solución

Para invalidar correctamente el rol secret-readerde clúster , corrija la ruta de acceso y el valor de ClusterResourceOverride, como se muestra en el código siguiente:

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

Esto agrega la nueva etiqueta newlabel que tiene el valor new-value a ClusterRole secret-reader.

Ponte en contacto con nosotros para obtener ayuda

Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios sobre el producto con los comentarios de la comunidad de Azure.