Поделиться через


Сбой распространения ресурсов: ClusterResourcePlacementApplied имеет значение False

В этой статье описывается, как устранять проблемы ClusterResourcePlacementApplied при распространении ресурсов с помощью ClusterResourcePlacement API объектов в Microsoft Azure Kubernetes Fleet Manager.

Симптомы

При использовании ClusterResourcePlacement объекта API в Azure Kubernetes Fleet Manager для распространения ресурсов развертывание завершается сбоем. Состояние ClusterResourcePlacementApplied отображается как False.

Причина

Эта проблема может возникнуть из-за одной из следующих причин:

  • Ресурс уже существует в кластере и не управляется контроллером парка. Чтобы устранить эту проблему, обновите файл YAML манифеста ClusterResourcePlacement , чтобы AllowCoOwnership ApplyStrategy разрешить контроллеру парка управлять ресурсом.
  • Другое ClusterResourcePlacement развертывание уже управляет ресурсом для выбранного кластера с помощью другой стратегии применения.
  • Развертывание ClusterResourcePlacement не применяет манифест из-за ошибок синтаксиса или недопустимых конфигураций ресурсов. Это также может произойти, если ресурс распространяется через объект конверта.

Действия по устранению неполадок

  1. Просмотрите ClusterResourcePlacement состояние и найдите placementStatuses раздел. Проверьте значение, placementStatuses чтобы определить, в каких кластерах задано ResourceApplied Falseусловие, и запишите их clusterName значение.
  2. Work Найдите объект в кластере концентратора. Используйте идентифицированный clusterName объект, чтобы найти Work объект, связанный с кластером-членом. Дополнительные сведения см. в разделе "Как найти правильный рабочий ресурс", связанный с ClusterResourcePlacement.
  3. Проверьте состояние Work объекта, чтобы понять конкретные проблемы, которые препятствуют успешному приложению ресурсов.

Пример использования

В следующем примере ClusterResourcePlacement пытается распространить пространство имен, содержащее развертывание на два кластера членов. Однако пространство имен уже существует в одном кластере-члене kind-cluster-1, в частности.

Спецификации 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

Состояние 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 В разделе для kind-cluster-1полей объясняется, message почему ресурс не был применен к кластеру-члену. В предыдущем conditions разделе Applied условие помечается kind-cluster-1 как false и показывает причину NotAllWorkHaveBeenApplied . Это означает, что Work объект, предназначенный для кластера-члена kind-cluster-1 , не был применен. Дополнительные сведения см. в разделе "Как найти правильный рабочий ресурс", связанный с ClusterResourcePlacement.

Состояние работы типа-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 Проверьте состояние, особенно в manifestConditions разделе. Видно, что пространство имен не удалось применить, но развертывание в пространстве имен распространилось из концентратора в кластер-член.

Решение

В этой ситуации потенциальное решение — задать AllowCoOwnership значение true в политике ApplyStrategy. Однако важно отметить, что это решение должно приниматься пользователем, так как ресурсы не могут быть общими.

Кроме того, вы можете просмотреть журналы для контроллера применения рабочей работы, чтобы получить дополнительные сведения о том, почему ресурсы недоступны.

Свяжитесь с нами для получения помощи

Если у вас есть вопросы или вам нужна помощь, создайте запрос в службу поддержки или обратитесь за поддержкой сообщества Azure. Вы также можете отправить отзыв о продукте в сообщество отзывов Azure.