Freigeben über


Fehler bei der Ressourcenverteilung: "ClusterResourcePlacementApplied" ist "False".

In diesem Artikel wird erläutert, wie Sie Probleme beheben ClusterResourcePlacementApplied können, wenn Sie Ressourcen mithilfe der ClusterResourcePlacement Objekt-API in Microsoft Azure Kubernetes Fleet Manager verteilen.

Symptome

Wenn Sie das ClusterResourcePlacement API-Objekt in Azure Kubernetes Fleet Manager zum Verteilen von Ressourcen verwenden, schlägt die Bereitstellung fehl. Der ClusterResourcePlacementApplied Status wird als False.

Ursache

Dieses Problem kann aus einem der folgenden Gründe auftreten:

  • Die Ressource ist bereits auf dem Cluster vorhanden und wird nicht vom Flottencontroller verwaltet. Um dieses Problem zu beheben, aktualisieren Sie die ClusterResourcePlacement YAML-Manifestdatei so, dass sie darin ApplyStrategy verwendet AllowCoOwnership wird, damit der Flottencontroller die Ressource verwalten kann.
  • Eine andere ClusterResourcePlacement Bereitstellung verwaltet bereits die Ressource für den ausgewählten Cluster mithilfe einer anderen Anwendungsstrategie.
  • Die ClusterResourcePlacement Bereitstellung wendet das Manifest aufgrund von Syntaxfehlern oder ungültigen Ressourcenkonfigurationen nicht an. Dies kann auch auftreten, wenn eine Ressource über ein Umschlagobjekt verteilt wird.

Schritte zur Fehlersuche

  1. Zeigen Sie den ClusterResourcePlacement Status an, und suchen Sie den placementStatuses Abschnitt. Überprüfen Sie den placementStatuses Wert, um zu ermitteln, auf welche Cluster die ResourceApplied Bedingung festgelegt Falseist, und notieren Sie deren clusterName Wert.
  2. Suchen Sie das Work Objekt im Hubcluster. Verwenden Sie die identifizierten clusterName Objekte, um das Work Objekt zu finden, das dem Membercluster zugeordnet ist. Weitere Informationen finden Sie unter How to find the correct Work resource associated with ClusterResourcePlacement.
  3. Überprüfen Sie den Status des Work Objekts, um die spezifischen Probleme zu verstehen, die eine erfolgreiche Ressourcenanwendung verhindern.

Fallstudie

Im folgenden Beispiel wird versucht, einen Namespace zu verteilen, ClusterResourcePlacement der eine Bereitstellung an zwei Membercluster enthält. Der Namespace ist jedoch bereits auf einem Membercluster vorhanden, insbesondere kind-cluster-1.

ClusterResourcePlacement-Spezifikationen

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

ClusterResourcePlacement-Status

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 Im Abschnitt für kind-cluster-1die Felder wird erläutert, message warum die Ressource nicht auf den Membercluster angewendet wurde. Im vorstehenden conditions Abschnitt wird die Applied Bedingung für kind-cluster-1 diese gekennzeichnet false und zeigt den NotAllWorkHaveBeenApplied Grund an. Dies gibt an, dass das Work Objekt, das für den Membercluster kind-cluster-1 vorgesehen ist, nicht angewendet wurde. Weitere Informationen finden Sie unter How to find the correct Work resource associated with ClusterResourcePlacement.

Arbeitsstatus von Art-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

Überprüfen Sie den Work Status, insbesondere den manifestConditions Abschnitt. Sie können sehen, dass der Namespace nicht angewendet werden konnte, aber die Bereitstellung im Namespace wurde vom Hub an den Membercluster weitergegeben.

Lösung

In dieser Situation besteht eine mögliche Lösung darin, die AllowCoOwnership true Richtlinie "ApplyStrategy" festzulegen. Beachten Sie jedoch, dass diese Entscheidung vom Benutzer getroffen werden sollte, da die Ressourcen möglicherweise nicht freigegeben werden.

Darüber hinaus können Sie die Protokolle für den "Arbeitscontroller anwenden" überprüfen, um weitere Einblicke darüber zu erhalten, warum die Ressourcen nicht verfügbar sind.

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.