Udostępnij za pośrednictwem


Niepowodzenie propagacji zasobów: ClusterResourcePlacementApplied ma wartość False

W tym artykule omówiono sposób rozwiązywania problemów ClusterResourcePlacementApplied podczas propagacji zasobów przy użyciu interfejsu ClusterResourcePlacement API obiektów w usłudze Microsoft Azure Kubernetes Fleet Manager.

Symptomy

W przypadku używania obiektu interfejsu ClusterResourcePlacement API w usłudze Azure Kubernetes Fleet Manager do propagowania zasobów wdrożenie kończy się niepowodzeniem. Stan ClusterResourcePlacementApplied jest wyświetlany jako False.

Przyczyna

Ten problem może wystąpić z jednego z następujących powodów:

  • Zasób już istnieje w klastrze i nie jest zarządzany przez kontroler floty. Aby rozwiązać ten problem, zaktualizuj plik YAML manifestu ClusterResourcePlacement do użycia AllowCoOwnership w programie ApplyStrategy , aby umożliwić kontrolerowi floty zarządzanie zasobem.
  • Inne ClusterResourcePlacement wdrożenie już zarządza zasobem dla wybranego klastra przy użyciu innej strategii zastosowania.
  • ClusterResourcePlacement Wdrożenie nie stosuje manifestu z powodu błędów składniowych lub nieprawidłowych konfiguracji zasobów. Może to również wystąpić, jeśli zasób jest propagowany za pośrednictwem obiektu koperty.

Kroki rozwiązywania problemów

  1. ClusterResourcePlacement Wyświetl stan i znajdź sekcjęplacementStatuses. Sprawdź wartość, placementStatuses aby określić, które klastry mają ResourceApplied ustawiony warunek na False, i zanotuj ich clusterName wartość.
  2. Work Znajdź obiekt w klastrze koncentratora. Użyj zidentyfikowanych clusterName elementów, aby zlokalizować Work obiekt skojarzony z klastrem członkowskim. Aby uzyskać więcej informacji, zobacz How to find the correct Work resource associated with ClusterResourcePlacement.
  3. Sprawdź stan obiektu, Work aby zrozumieć konkretne problemy, które uniemożliwiają pomyślną aplikację zasobów.

Analiza przypadku

W poniższym przykładzie ClusterResourcePlacement próbuje rozpropagować przestrzeń nazw zawierającą wdrożenie do dwóch klastrów członkowskich. Jednak przestrzeń nazw już istnieje w jednym klastrze członkowskim, w szczególności kind-cluster-1.

Specyfikacje clusterResourcePlacement

apiVersion: placement.kubernetes-fleet.io/v1beta1
kind: ClusterResourcePlacement
metadata:
  name: crp
spec:
  policy:
    clusterNames:
    - kind-cluster-1
    - kind-cluster-2
    placementType: PickFixed
  resourceSelectors:
  - group: ""
    kind: Namespace
    name: test-ns
    version: v1
  revisionHistoryLimit: 10
  strategy:
    type: RollingUpdate

Stan ClusterResourcePlacement

status:
  conditions:
  - lastTransitionTime: "2024-05-07T23:32:40Z"
    message:couldn't find all the clusters needed as specified by the scheduling
      policy
    observedGeneration: 1
    reason: SchedulingPolicyUnfulfilled
    status: "False"
    type: ClusterResourcePlacementScheduled
  - lastTransitionTime: "2024-05-07T23:32:40Z"
    message: All 2 cluster(s) start rolling out the latest resource
    observedGeneration: 1
    reason: RolloutStarted
    status: "True"
    type: ClusterResourcePlacementRolloutStarted
  - lastTransitionTime: "2024-05-07T23:32:40Z"
    message: No override rules are configured for the selected resources
    observedGeneration: 1
    reason: NoOverrideSpecified
    status: "True"
    type: ClusterResourcePlacementOverridden
  - lastTransitionTime: "2024-05-07T23:32:40Z"
    message: Works(s) are succcesfully created or updated in the 2 target clusters'
      namespaces
    observedGeneration: 1
    reason: WorkSynchronized
    status: "True"
    type: ClusterResourcePlacementWorkSynchronized
  - lastTransitionTime: "2024-05-07T23:32:40Z"
    message: Failed to apply resources to 1 clusters, please check the `failedPlacements`
      status
    observedGeneration: 1
    reason: ApplyFailed
    status: "False"
    type: ClusterResourcePlacementApplied
  observedResourceIndex: "0"
  placementStatuses:
  - clusterName: kind-cluster-2
    conditions:
    - lastTransitionTime: "2024-05-07T23:32:40Z"
      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:32:40Z"
      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:32:40Z"
      message: No override rules are configured for the selected resources
      observedGeneration: 1
      reason: NoOverrideSpecified
      status: "True"
      type: Overridden
    - lastTransitionTime: "2024-05-07T23:32:40Z"
      message: All of the works are synchronized to the latest
      observedGeneration: 1
      reason: AllWorkSynced
      status: "True"
      type: WorkSynchronized
    - lastTransitionTime: "2024-05-07T23:32:40Z"
      message: All corresponding work objects are applied
      observedGeneration: 1
      reason: AllWorkHaveBeenApplied
      status: "True"
      type: Applied
    - lastTransitionTime: "2024-05-07T23:32:49Z"
      message: The availability of work object crp-4-work isn't trackable
      observedGeneration: 1
      reason: WorkNotTrackable
      status: "True"
      type: Available
  - clusterName: kind-cluster-1
    conditions:
    - lastTransitionTime: "2024-05-07T23:32:40Z"
      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:32:40Z"
      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:32:40Z"
      message: No override rules are configured for the selected resources
      observedGeneration: 1
      reason: NoOverrideSpecified
      status: "True"
      type: Overridden
    - lastTransitionTime: "2024-05-07T23:32:40Z"
      message: All of the works are synchronized to the latest
      observedGeneration: 1
      reason: AllWorkSynced
      status: "True"
      type: WorkSynchronized
    - lastTransitionTime: "2024-05-07T23:32:40Z"
      message: Work object crp-4-work isn't applied
      observedGeneration: 1
      reason: NotAllWorkHaveBeenApplied
      status: "False"
      type: Applied
    failedPlacements:
    - condition:
        lastTransitionTime: "2024-05-07T23:32:40Z"
        message: 'Failed to apply manifest: failed to process the request due to a
          client error: resource exists and isn't managed by the fleet controller
          and co-ownernship is disallowed'
        reason: ManifestsAlreadyOwnedByOthers
        status: "False"
        type: Applied
      kind: Namespace
      name: test-ns
      version: v1
  selectedResources:
  - kind: Namespace
    name: test-ns
    version: v1
  - group: apps
    kind: Deployment
    name: test-nginx
    namespace: test-ns
    version: v1

failedPlacements W sekcji dla kind-cluster-1pola wyjaśnijmessage, dlaczego zasób nie został zastosowany w klastrze członkowskim. W poprzedniej conditions sekcji Applied warunek jest kind-cluster-1 oflagowany jako false i pokazuje przyczynę NotAllWorkHaveBeenApplied . Oznacza to, że Work obiekt przeznaczony dla klastra kind-cluster-1 członkowskiego nie został zastosowany. Aby uzyskać więcej informacji, zobacz How to find the correct Work resource associated with ClusterResourcePlacement.

Stan pracy typu cluster-1

 status:
  conditions:
  - lastTransitionTime: "2024-05-07T23:32:40Z"
    message: 'Apply manifest {Ordinal:0 Group: Version:v1 Kind:Namespace Resource:namespaces
      Namespace: Name:test-ns} failed'
    observedGeneration: 1
    reason: WorkAppliedFailed
    status: "False"
    type: Applied
  - lastTransitionTime: "2024-05-07T23:32:40Z"
    message: ""
    observedGeneration: 1
    reason: WorkAppliedFailed
    status: Unknown
    type: Available
  manifestConditions:
  - conditions:
    - lastTransitionTime: "2024-05-07T23:32:40Z"
      message: 'Failed to apply manifest: failed to process the request due to a client
        error: resource exists and isn't managed by the fleet controller and co-ownernship
        is disallowed'
      reason: ManifestsAlreadyOwnedByOthers
      status: "False"
      type: Applied
    - lastTransitionTime: "2024-05-07T23:32:40Z"
      message: Manifest isn't applied yet
      reason: ManifestApplyFailed
      status: Unknown
      type: Available
    identifier:
      kind: Namespace
      name: test-ns
      ordinal: 0
      resource: namespaces
      version: v1
  - conditions:
    - lastTransitionTime: "2024-05-07T23:32:40Z"
      message: Manifest is already up to date
      observedGeneration: 1
      reason: ManifestAlreadyUpToDate
      status: "True"
      type: Applied
    - lastTransitionTime: "2024-05-07T23:32:51Z"
      message: Manifest is trackable and available now
      observedGeneration: 1
      reason: ManifestAvailable
      status: "True"
      type: Available
    identifier:
      group: apps
      kind: Deployment
      name: test-nginx
      namespace: test-ns
      ordinal: 1
      resource: deployments
      version: v1

Work Sprawdź stan, szczególnie sekcjęmanifestConditions. Widać, że nie można zastosować przestrzeni nazw, ale wdrożenie w przestrzeni nazw jest propagowane z centrum do klastra członkowskiego.

Rozwiązanie

W takiej sytuacji potencjalnym rozwiązaniem jest ustawienie AllowCoOwnership wartości na true wartość w zasadach ApplyStrategy. Należy jednak zauważyć, że ta decyzja powinna zostać podjęta przez użytkownika, ponieważ zasoby mogą nie być udostępniane.

Ponadto możesz przejrzeć dzienniki kontrolera aplikacji Apply Work Controller , aby uzyskać więcej informacji na temat tego, dlaczego zasoby są niedostępne.

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.