Udostępnij za pośrednictwem


Niepowodzenie propagacji zasobów: ClusterResourcePlacementRolloutStarted ma wartość false

W tym artykule opisano sposób rozwiązywania problemów ClusterResourcePlacementRolloutStarted podczas propagacji zasobów przy użyciu obiektu interfejsu ClusterResourcePlacement API w usłudze Azure Kubernetes Fleet Manager.

Symptomy

W przypadku używania obiektu interfejsu ClusterResourcePlacement API w usłudze Azure Kubernetes Fleet Manager do propagowania zasobów wybrane zasoby nie są wdrażane we wszystkich zaplanowanych klastrach, a ClusterResourcePlacementRolloutStarted stan warunku jest wyświetlany jako False.

Uwaga 16.

Aby uzyskać więcej informacji o tym, dlaczego wdrożenie nie jest uruchamiane, możesz sprawdzić dzienniki kontrolera wdrażania.

Przyczyna

Strategia wdrażania umieszczania zasobów klastra jest blokowana, ponieważ konfiguracja jest zbyt ścisła RollingUpdate .

Kroki rozwiązywania problemów

  1. ClusterResourcePlacement W sekcji stanu sprawdź element placementStatuses , aby zidentyfikować klastry, które mają RolloutStarted stan ustawiony na False.
  2. Znajdź odpowiedni ClusterResourceBinding dla zidentyfikowany klaster. Aby uzyskać więcej informacji, zobacz Jak znaleźć najnowszy zasób ClusterResourceBinding? Ten zasób powinien wskazywać Work stan (czy został on utworzony, czy zaktualizowany).
  3. Zweryfikuj wartości maxUnavailable i maxSurge , aby upewnić się, że są one zgodne z oczekiwaniami.

Analiza przypadku

W poniższym przykładzie ClusterResourcePlacement program próbuje propagować przestrzeń nazw do trzech klastrów członkowskich. Jednak podczas początkowego ClusterResourcePlacementtworzenia przestrzeni nazw nie istniała w klastrze koncentratora, a flota obecnie składa się z dwóch klastrów członkowskich o nazwach kind-cluster-1 i kind-cluster-2.

Specyfikacja clusterResourcePlacement

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

Stan 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

Powyższe dane wyjściowe wskazują, że przestrzeń nazw zasobów test-ns nigdy nie istniała w klastrze koncentratora i pokazuje następujące ClusterResourcePlacement stany warunku:

  • Stan ClusterResourcePlacementScheduled warunku jest wyświetlany jako False, ponieważ określone zasady mają na celu wybranie trzech klastrów, ale harmonogram może pomieścić tylko miejsca w dwóch aktualnie dostępnych i połączonych klastrach.
  • Stan ClusterResourcePlacementRolloutStarted warunku jest wyświetlany jako True, ponieważ proces wdrażania rozpoczął się z dwoma wybranymi klastrami.
  • Stan ClusterResourcePlacementOverridden warunku jest wyświetlany jako True, ponieważ dla wybranych zasobów nie są skonfigurowane żadne reguły zastąpienia.
  • Stan ClusterResourcePlacementWorkSynchronized warunku jest wyświetlany jako True.
  • Stan ClusterResourcePlacementApplied warunku jest wyświetlany jako True.
  • Stan ClusterResourcePlacementAvailable warunku jest wyświetlany jako True.

Aby zapewnić bezproblemowe propagowanie przestrzeni nazw w odpowiednich klastrach, przejdź do utworzenia test-ns przestrzeni nazw w klastrze koncentratora.

Stan ClusterResourcePlacement po utworzeniu przestrzeni nazw "test-ns" w klastrze koncentratora

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

W poprzednich danych wyjściowych ClusterResourcePlacementScheduled stan warunku jest wyświetlany jako False. Stan ClusterResourcePlacementRolloutStarted jest również wyświetlany w False następujący sposób: The rollout is being blocked by the rollout strategy in 2 cluster(s).

Sprawdź najnowszą ClusterResourceSnapshot wersję, uruchamiając polecenie w temacie Jak znaleźć najnowszy zasób ClusterResourceBinding?

Najnowszy klasterResourceSnapshot

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

W specyfikacji ClusterResourceSnapshot selectedResources sekcja zawiera teraz przestrzeń nazw test-ns.

Sprawdź, ClusterResourceBinding kind-cluster-1 czy element został zaktualizowany po utworzeniu przestrzeni nazw test-ns . Aby uzyskać więcej informacji, zobacz Jak znaleźć najnowszy zasób ClusterResourceBinding?.

ClusterResourceBinding dla typu 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

Pozostaje niezmieniona ClusterResourceBinding . W specyfikacji ClusterResourceBinding resourceSnapshotName nadal odwołuje się do starej ClusterResourceSnapshot nazwy. Ten problem występuje, gdy nie ma jawnych RollingUpdate danych wejściowych od użytkownika, ponieważ są stosowane wartości domyślne:

  • Wartość maxUnavailable jest skonfigurowana do 25% × 3 (żądana liczba), zaokrąglona do 1.
  • Wartość maxSurge jest skonfigurowana do 25% × 3 (żądana liczba), zaokrąglona do 1.

Dlaczego klasterResourceBinding nie jest aktualizowany

Początkowo, kiedy ClusterResourcePlacement został utworzony, dwa ClusterResourceBindings zostały wygenerowane. Jednak ponieważ wdrożenie nie miało zastosowania do fazy początkowej, ClusterResourcePlacementRolloutStarted warunek został ustawiony na Truewartość .

Podczas tworzenia test-ns przestrzeni nazw w klastrze centrum kontroler wdrożenia próbował zaktualizować dwa istniejące ClusterResourceBindings. maxUnavailable Jednak została ustawiona 1 na wartość z powodu braku klastrów członkowskich, co spowodowało, że konfiguracja była zbyt ścisłaRollingUpdate.

Uwaga 16.

W trakcie aktualizacji, jeśli nie można zastosować jednego z powiązań, spowoduje to również naruszenie RollingUpdate konfiguracji, co powoduje maxUnavailable ustawienie wartości 1.

Rozwiązanie

W takiej sytuacji, aby rozwiązać ten problem, rozważ ręczne ustawienie maxUnavailable wartości większej niż 1 w celu złagodzenia RollingUpdate konfiguracji. Alternatywnie można dołączyć do trzeciego klastra członkowskiego.

Skontaktuj się z nami, aby uzyskać pomoc

Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.