Error de propagación de recursos: ClusterResourcePlacementRolloutStarted es false
En este artículo se describe cómo solucionar problemas ClusterResourcePlacementRolloutStarted
al propagar recursos mediante el ClusterResourcePlacement
objeto de API en Azure Kubernetes Fleet Manager.
Síntomas
Cuando se usa el ClusterResourcePlacement
objeto de API en Azure Kubernetes Fleet Manager para propagar recursos, los recursos seleccionados no se implementarán en todos los clústeres programados y el ClusterResourcePlacementRolloutStarted
estado de la condición se muestra como False
.
Nota:
Para obtener más información sobre por qué no se inicia el lanzamiento, puede comprobar los registros del controlador de lanzamiento.
Causa
La estrategia de implementación de ubicación de recursos de clúster está bloqueada porque la RollingUpdate
configuración es demasiado estricta.
Pasos para solucionar problemas
- En la
ClusterResourcePlacement
sección de estado, compruebe paraplacementStatuses
identificar los clústeres que tienen elRolloutStarted
estado establecidoFalse
en . - Busque el correspondiente
ClusterResourceBinding
para el clúster identificado. Para obtener más información, consulte ¿Cómo puedo encontrar el recurso ClusterResourceBinding más reciente? Este recurso debe indicar elWork
estado (si se creó o actualizó). - Compruebe los valores de y
maxSurge
para asegurarse demaxUnavailable
que se alinean con sus expectativas.
Caso práctico
En el ejemplo siguiente, intenta ClusterResourcePlacement
propagar un espacio de nombres a tres clústeres miembro. Sin embargo, durante la creación inicial de ClusterResourcePlacement
, el espacio de nombres no existía en el clúster de concentrador y la flota actualmente consta de dos clústeres miembros denominados kind-cluster-1
y kind-cluster-2
.
Especificación ClusterResourcePlacement
spec:
policy:
numberOfClusters: 3
placementType: PickN
resourceSelectors:
- group: ""
kind: Namespace
name: test-ns
version: v1
revisionHistoryLimit: 10
strategy:
type: RollingUpdate
Estado ClusterResourcePlacement
status:
conditions:
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: could not find all the clusters needed as specified by the scheduling
policy
observedGeneration: 1
reason: SchedulingPolicyUnfulfilled
status: "False"
type: ClusterResourcePlacementScheduled
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All 2 cluster(s) start rolling out the latest resource
observedGeneration: 1
reason: RolloutStarted
status: "True"
type: ClusterResourcePlacementRolloutStarted
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: No override rules are configured for the selected resources
observedGeneration: 1
reason: NoOverrideSpecified
status: "True"
type: ClusterResourcePlacementOverridden
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: Works(s) are successfully created or updated in the 2 target clusters'
namespaces
observedGeneration: 1
reason: WorkSynchronized
status: "True"
type: ClusterResourcePlacementWorkSynchronized
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: The selected resources are successfully applied to 2 clusters
observedGeneration: 1
reason: ApplySucceeded
status: "True"
type: ClusterResourcePlacementApplied
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: The selected resources in 2 cluster are available now
observedGeneration: 1
reason: ResourceAvailable
status: "True"
type: ClusterResourcePlacementAvailable
observedResourceIndex: "0"
placementStatuses:
- clusterName: kind-cluster-2
conditions:
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: 'Successfully scheduled resources for placement in kind-cluster-2 (affinity
score: 0, topology spread score: 0): picked by scheduling policy'
observedGeneration: 1
reason: Scheduled
status: "True"
type: Scheduled
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: Detected the new changes on the resources and started the rollout process
observedGeneration: 1
reason: RolloutStarted
status: "True"
type: RolloutStarted
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: No override rules are configured for the selected resources
observedGeneration: 1
reason: NoOverrideSpecified
status: "True"
type: Overridden
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All of the works are synchronized to the latest
observedGeneration: 1
reason: AllWorkSynced
status: "True"
type: WorkSynchronized
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All corresponding work objects are applied
observedGeneration: 1
reason: AllWorkHaveBeenApplied
status: "True"
type: Applied
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All corresponding work objects are available
observedGeneration: 1
reason: AllWorkAreAvailable
status: "True"
type: Available
- clusterName: kind-cluster-1
conditions:
- lastTransitionTime: "2024-05-07T23:08:53Z"
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-07T23:08:53Z"
message: Detected the new changes on the resources and started the rollout process
observedGeneration: 1
reason: RolloutStarted
status: "True"
type: RolloutStarted
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: No override rules are configured for the selected resources
observedGeneration: 1
reason: NoOverrideSpecified
status: "True"
type: Overridden
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All of the works are synchronized to the latest
observedGeneration: 1
reason: AllWorkSynced
status: "True"
type: WorkSynchronized
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All corresponding work objects are applied
observedGeneration: 1
reason: AllWorkHaveBeenApplied
status: "True"
type: Applied
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All corresponding work objects are available
observedGeneration: 1
reason: AllWorkAreAvailable
status: "True"
type: Available
La salida anterior indica que el espacio de nombres del recurso test-ns
nunca existía en el clúster del concentrador y muestra los siguientes ClusterResourcePlacement
estados de condición:
- El
ClusterResourcePlacementScheduled
estado de la condición se muestra comoFalse
, ya que la directiva especificada tiene como objetivo elegir tres clústeres, pero el programador solo puede acomodar las ubicaciones en dos clústeres actualmente disponibles y unidos. - El
ClusterResourcePlacementRolloutStarted
estado de la condición se muestra comoTrue
, ya que el proceso de lanzamiento se ha iniciado con dos clústeres seleccionados. - El
ClusterResourcePlacementOverridden
estado de la condición se muestra comoTrue
, ya que no hay reglas de invalidación configuradas para los recursos seleccionados. - El
ClusterResourcePlacementWorkSynchronized
estado de la condición se muestra comoTrue
. - El
ClusterResourcePlacementApplied
estado de la condición se muestra comoTrue
. - El
ClusterResourcePlacementAvailable
estado de la condición se muestra comoTrue
.
Para garantizar la propagación sin problemas del espacio de nombres en los clústeres pertinentes, continúe con la creación del test-ns
espacio de nombres en el clúster del concentrador.
Estado ClusterResourcePlacement después de crear el espacio de nombres "test-ns" en el clúster del concentrador
status:
conditions:
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: could not find all the clusters needed as specified by the scheduling
policy
observedGeneration: 1
reason: SchedulingPolicyUnfulfilled
status: "False"
type: ClusterResourcePlacementScheduled
- lastTransitionTime: "2024-05-07T23:13:51Z"
message: The rollout is being blocked by the rollout strategy in 2 cluster(s)
observedGeneration: 1
reason: RolloutNotStartedYet
status: "False"
type: ClusterResourcePlacementRolloutStarted
observedResourceIndex: "1"
placementStatuses:
- clusterName: kind-cluster-2
conditions:
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: 'Successfully scheduled resources for placement in kind-cluster-2 (affinity
score: 0, topology spread score: 0): picked by scheduling policy'
observedGeneration: 1
reason: Scheduled
status: "True"
type: Scheduled
- lastTransitionTime: "2024-05-07T23:13:51Z"
message: The rollout is being blocked by the rollout strategy
observedGeneration: 1
reason: RolloutNotStartedYet
status: "False"
type: RolloutStarted
- clusterName: kind-cluster-1
conditions:
- lastTransitionTime: "2024-05-07T23:08:53Z"
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-07T23:13:51Z"
message: The rollout is being blocked by the rollout strategy
observedGeneration: 1
reason: RolloutNotStartedYet
status: "False"
type: RolloutStarted
selectedResources:
- kind: Namespace
name: test-ns
version: v1
En la salida anterior, el estado de la ClusterResourcePlacementScheduled
condición se muestra como False
. El ClusterResourcePlacementRolloutStarted
estado también se muestra como False
con el mensaje : The rollout is being blocked by the rollout strategy in 2 cluster(s)
.
Compruebe la versión más reciente ClusterResourceSnapshot
ejecutando el comando en ¿Cómo puedo encontrar el recurso ClusterResourceBinding más reciente?
ClusterResourceSnapshot más reciente
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourceSnapshot
metadata:
annotations:
kubernetes-fleet.io/number-of-enveloped-object: "0"
kubernetes-fleet.io/number-of-resource-snapshots: "1"
kubernetes-fleet.io/resource-hash: 72344be6e268bc7af29d75b7f0aad588d341c228801aab50d6f9f5fc33dd9c7c
creationTimestamp: "2024-05-07T23:13:51Z"
generation: 1
labels:
kubernetes-fleet.io/is-latest-snapshot: "true"
kubernetes-fleet.io/parent-CRP: crp-3
kubernetes-fleet.io/resource-index: "1"
name: crp-3-1-snapshot
ownerReferences:
- apiVersion: placement.kubernetes-fleet.io/v1beta1
blockOwnerDeletion: true
controller: true
kind: ClusterResourcePlacement
name: crp-3
uid: b4f31b9a-971a-480d-93ac-93f093ee661f
resourceVersion: "14434"
uid: 85ee0e81-92c9-4362-932b-b0bf57d78e3f
spec:
selectedResources:
- apiVersion: v1
kind: Namespace
metadata:
labels:
kubernetes.io/metadata.name: test-ns
name: test-ns
spec:
finalizers:
- kubernetes
En la ClusterResourceSnapshot
especificación, la selectedResources
sección muestra ahora el espacio de nombres test-ns
.
ClusterResourceBinding
Compruebe para kind-cluster-1
ver si se actualizó después de crear el espacio de nombrestest-ns
. Para obtener más información, consulte ¿Cómo puedo encontrar el recurso ClusterResourceBinding más reciente?.
ClusterResourceBinding para kind-cluster-1
apiVersion: placement.kubernetes-fleet.io/v1
kind: ClusterResourceBinding
metadata:
creationTimestamp: "2024-05-07T23:08:53Z"
finalizers:
- kubernetes-fleet.io/work-cleanup
generation: 2
labels:
kubernetes-fleet.io/parent-CRP: crp-3
name: crp-3-kind-cluster-1-7114c253
resourceVersion: "14438"
uid: 0db4e480-8599-4b40-a1cc-f33bcb24b1a7
spec:
applyStrategy:
type: ClientSideApply
clusterDecision:
clusterName: kind-cluster-1
clusterScore:
affinityScore: 0
priorityScore: 0
reason: picked by scheduling policy
selected: true
resourceSnapshotName: crp-3-0-snapshot
schedulingPolicySnapshotName: crp-3-0
state: Bound
targetCluster: kind-cluster-1
status:
conditions:
- lastTransitionTime: "2024-05-07T23:13:51Z"
message: The resources cannot be updated to the latest because of the rollout
strategy
observedGeneration: 2
reason: RolloutNotStartedYet
status: "False"
type: RolloutStarted
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: No override rules are configured for the selected resources
observedGeneration: 2
reason: NoOverrideSpecified
status: "True"
type: Overridden
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All of the works are synchronized to the latest
observedGeneration: 2
reason: AllWorkSynced
status: "True"
type: WorkSynchronized
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All corresponding work objects are applied
observedGeneration: 2
reason: AllWorkHaveBeenApplied
status: "True"
type: Applied
- lastTransitionTime: "2024-05-07T23:08:53Z"
message: All corresponding work objects are available
observedGeneration: 2
reason: AllWorkAreAvailable
status: "True"
type: Available
El ClusterResourceBinding
objeto permanece sin cambios. En la ClusterResourceBinding
especificación, resourceSnapshotName
todavía hace referencia al nombre anterior ClusterResourceSnapshot
. Este problema se produce cuando no hay ninguna entrada explícita RollingUpdate
del usuario porque se aplican los valores predeterminados:
- El
maxUnavailable
valor se configura en un 25 % × 3 (el número deseado), redondeado a1
. - El
maxSurge
valor se configura en un 25 % × 3 (el número deseado), redondeado a1
.
Por qué ClusterResourceBinding no se ha actualizado
Inicialmente, cuando ClusterResourcePlacement
se creó, se generaron dos ClusterResourceBindings
. Sin embargo, dado que el lanzamiento no se aplica a la fase inicial, la ClusterResourcePlacementRolloutStarted
condición se estableció True
en .
Al crear el test-ns
espacio de nombres en el clúster del concentrador, el controlador de lanzamiento intentó actualizar los dos existentes ClusterResourceBindings
. Sin embargo, maxUnavailable
se estableció en 1
debido a la falta de clústeres de miembros, lo que provocó que la RollingUpdate
configuración fuera demasiado estricta.
Nota:
Durante la actualización, si uno de los enlaces no se puede aplicar, también infringirá la RollingUpdate
configuración, lo que hace maxUnavailable
que se establezca en 1
.
Solución
En esta situación, para solucionar este problema, considere la posibilidad de establecer maxUnavailable
manualmente en un valor mayor que 1
relajar la RollingUpdate
configuración. Como alternativa, puede unirse a un tercer clúster miembro.
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.