Dela via


Resursspridningsfel: ClusterResourcePlacementRolloutStarted är falskt

Den här artikeln beskriver hur du felsöker ClusterResourcePlacementRolloutStarted problem när du sprider resurser med API-objektet ClusterResourcePlacement i Azure Kubernetes Fleet Manager.

Symptom

När du använder ClusterResourcePlacement API-objektet i Azure Kubernetes Fleet Manager för att sprida resurser distribueras inte de valda resurserna i alla schemalagda kluster, och villkorsstatusen ClusterResourcePlacementRolloutStarted visas som False.

Kommentar

Om du vill ha mer information om varför distributionen inte startas kan du kontrollera loggarna för distributionskontrollanten.

Orsak

Distributionsstrategin för klusterresursplacering blockeras eftersom konfigurationen RollingUpdate är för strikt.

Felsökningsanvisningar

  1. I statusavsnittet ClusterResourcePlacement kontrollerar du placementStatuses för att identifiera kluster som har statusen RolloutStarted inställd på False.
  2. Leta upp motsvarande ClusterResourceBinding för det identifierade klustret. Mer information finns i Hur hittar jag den senaste ClusterResourceBinding-resursen? Den här resursen bör ange statusen Work (oavsett om den har skapats eller uppdaterats).
  3. Kontrollera värdena maxUnavailable för och maxSurge för att säkerställa att de överensstämmer med dina förväntningar.

Fallstudie

I följande exempel ClusterResourcePlacement försöker sprida ett namnområde till tre medlemskluster. Men när det första skapandet av , fanns inte namnområdet i hubbklustret, och flottan består för närvarande av ClusterResourcePlacementtvå medlemskluster med namnet kind-cluster-1 och kind-cluster-2.

ClusterResourcePlacement-specifikation

spec:
  policy:
    numberOfClusters: 3
    placementType: PickN
  resourceSelectors:
  - group: ""
    kind: Namespace
    name: test-ns
    version: v1
  revisionHistoryLimit: 10
  strategy:
    type: RollingUpdate

ClusterResourcePlacement-status

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

Föregående utdata anger att resursnamnområdet test-ns aldrig fanns i hubbklustret och visar följande ClusterResourcePlacement villkorsstatusar:

  • Villkorsstatusen ClusterResourcePlacementScheduled visas som False, eftersom den angivna principen syftar till att välja tre kluster, men schemaläggaren kan bara hantera placeringar i två tillgängliga och anslutna kluster.
  • Villkorsstatusen ClusterResourcePlacementRolloutStarted visas som True, eftersom distributionsprocessen har startat med två valda kluster.
  • Villkorsstatusen ClusterResourcePlacementOverridden visas som True, eftersom inga åsidosättningsregler har konfigurerats för de valda resurserna.
  • Villkorsstatusen ClusterResourcePlacementWorkSynchronized visas som True.
  • Villkorsstatusen ClusterResourcePlacementApplied visas som True.
  • Villkorsstatusen ClusterResourcePlacementAvailable visas som True.

Om du vill säkerställa sömlös spridning av namnområdet mellan de relevanta klustren fortsätter du med att skapa test-ns namnområdet i hubbklustret.

ClusterResourcePlacement-status efter att namnområdet "test-ns" har skapats i hubbklustret

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

I föregående utdata visas villkorsstatusen ClusterResourcePlacementScheduled som False. Statusen ClusterResourcePlacementRolloutStarted visas också som False med meddelandet: The rollout is being blocked by the rollout strategy in 2 cluster(s).

Kontrollera det senaste ClusterResourceSnapshot genom att köra kommandot i Hur hittar jag den senaste ClusterResourceBinding-resursen?

Senaste ClusterResourceSnapshot

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

I specifikationen ClusterResourceSnapshot selectedResources visar avsnittet nu namnområdet test-ns.

ClusterResourceBinding Kontrollera om kind-cluster-1 den har uppdaterats efter att namnområdet test-ns har skapats. Mer information finns i Hur hittar jag den senaste ClusterResourceBinding-resursen?.

ClusterResourceBinding för 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

Förblir ClusterResourceBinding oförändrad. I specifikationen ClusterResourceBinding resourceSnapshotName refererar fortfarande det gamla ClusterResourceSnapshot namnet. Det här problemet uppstår när det inte finns några explicita RollingUpdate indata från användaren eftersom standardvärdena tillämpas:

  • Värdet maxUnavailable är konfigurerat till 25 % × 3 (önskat tal), avrundat till 1.
  • Värdet maxSurge är konfigurerat till 25 % × 3 (önskat tal), avrundat till 1.

Varför ClusterResourceBinding inte uppdateras

När skapades ClusterResourcePlacement genererades först två ClusterResourceBindings . Men eftersom distributionen inte gällde för den inledande fasen, var villkoret ClusterResourcePlacementRolloutStarted inställt på True.

När du skapade test-ns namnområdet i hubbklustret försökte distributionskontrollanten uppdatera de två befintliga ClusterResourceBindings. Var dock maxUnavailable inställd 1 på på grund av bristen på medlemskluster, vilket gjorde att konfigurationen RollingUpdate var för strikt.

Kommentar

Om en av bindningarna inte tillämpas under uppdateringen bryter den även mot konfigurationen RollingUpdate , vilket gör maxUnavailable att den är inställd på 1.

Åtgärd

I det här fallet bör du överväga att manuellt ange maxUnavailable ett värde som är större än 1 för att minska konfigurationen för att lösa problemet RollingUpdate . Du kan också ansluta till ett tredje medlemskluster.

Kontakta oss för att få hjälp

Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.