Compartilhar via


Usar o ResourcePlacement do Gerenciador de Frotas do Kubernetes do Azure para implantar recursos com escopo de namespace em vários clusters (versão prévia)

Este artigo descreve como usar o Azure Kubernetes Fleet Manager ResourcePlacement para implantar recursos com escopo de namespace em clusters em uma frota.

Importante

Os recursos de versão prévia do Gerenciador de Frotas do Kubernetes do Azure estão disponíveis por autoatendimento e opt-in. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. A versão prévia do Gerenciador de Frota de Kubernetes do Azure é parcialmente coberta pelo suporte ao cliente em regime de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção.

Pré-requisitos

Estabelecer o namespace entre clusters de membros

Antes de poder usar ResourcePlacement para implantar recursos com escopo de namespace, o namespace de destino deve existir nos clusters de membros. Este exemplo mostra como criar um namespace no cluster do hub e propagar para clusters membros usando ClusterResourcePlacement.

Observação

O exemplo a seguir usa a versão da placement.kubernetes-fleet.io/v1beta1 API. O selectionScope: NamespaceOnly campo é um recurso de visualização disponível na v1beta1 e não está disponível na API v1 estável.

  1. Crie um namespace no cluster do hub:

    kubectl create namespace my-app
    
  2. Crie um ClusterResourcePlacement objeto para propagar o namespace para todos os clusters membros. Salve o YAML a seguir em um arquivo chamado namespace-crp.yaml:

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ClusterResourcePlacement
    metadata:
      name: my-app-namespace
    spec:
      resourceSelectors:
        - group: ""
          kind: Namespace
          name: my-app
          version: v1
          selectionScope: NamespaceOnly
      policy:
        placementType: PickAll
    
  3. Aplique o ClusterResourcePlacement no cluster do hub:

    kubectl apply -f namespace-crp.yaml
    
  4. Verifique se o namespace foi propagado com êxito:

    kubectl get clusterresourceplacement my-app-namespace
    

    Seu resultado deve ser semelhante ao seguinte exemplo:

    NAME                GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    my-app-namespace    1     True        1               True        1               15s
    

Usar ResourcePlacement para colocar recursos com escopo de namespace

O ResourcePlacement objeto é criado em um namespace no cluster do hub e é usado para propagar recursos específicos com escopo de namespace para clusters membros. Este exemplo demonstra como propagar ConfigMaps para clusters membros específicos usando o ResourcePlacement objeto com uma PickFixed política de posicionamento.

Para obter mais informações, consulte o posicionamento de recursos no escopo do namespace usando o ResourcePlacement do Gerenciador de Frotas do Kubernetes do Azure.

  1. Crie ConfigMaps no namespace no cluster central. Esses ConfigMaps serão propagados para os clusters de membros selecionados:

    kubectl create configmap app-config \
      --from-literal=environment=production \
      --from-literal=log-level=info \
      -n my-app
    
    kubectl create configmap feature-flags \
      --from-literal=new-ui=enabled \
      --from-literal=api-v2=disabled \
      -n my-app
    
  2. Crie um ResourcePlacement objeto para propagar o ConfigMaps. Salve o YAML a seguir em um arquivo chamado app-configs-rp.yaml:

    apiVersion: placement.kubernetes-fleet.io/v1beta1
    kind: ResourcePlacement
    metadata:
      name: app-configs
      namespace: my-app
    spec:
      resourceSelectors:
        - group: ""
          kind: ConfigMap
          version: v1
          name: app-config
        - group: ""
          kind: ConfigMap
          version: v1
          name: feature-flags
      policy:
        placementType: PickFixed
        clusterNames:
          - membercluster1
          - membercluster2
    

    Observação

    Substitua membercluster1 e membercluster2 pelos nomes reais dos clusters membros. Você pode listar clusters de membros disponíveis usando kubectl get memberclusters.

  3. Aplique o ResourcePlacement ao cluster do hub.

    kubectl apply -f app-configs-rp.yaml
    
  4. Verifique o progresso da propagação de recursos:

    kubectl get resourceplacement app-configs -n my-app
    

    Seu resultado deve ser semelhante ao seguinte exemplo:

    NAME          GEN   SCHEDULED   SCHEDULED-GEN   AVAILABLE   AVAILABLE-GEN   AGE
    app-configs   1     True        1               True        1               20s
    
  5. Exiba os detalhes do objeto de posicionamento:

    kubectl describe resourceplacement app-configs -n my-app
    

    Seu resultado deve ser semelhante ao seguinte exemplo:

    Name:         app-configs
    Namespace:    my-app
    Labels:       <none>
    Annotations:  <none>
    API Version:  placement.kubernetes-fleet.io/v1beta1
    Kind:         ResourcePlacement
    Metadata:
      Creation Timestamp:  2025-11-13T22:08:12Z
      Finalizers:
        kubernetes-fleet.io/crp-cleanup
        kubernetes-fleet.io/scheduler-cleanup
      Generation:        1
      Resource Version:  12345
      UID:               cec941f1-e48a-4045-b5dd-188bfc1a830f
    Spec:
      Policy:
        Cluster Names:
          membercluster1
          membercluster2
        Placement Type:  PickFixed
      Resource Selectors:
        Group:                 
        Kind:                  ConfigMap
        Name:                  app-config
        Version:               v1
        Group:                 
        Kind:                  ConfigMap
        Name:                  feature-flags
        Version:               v1
      Revision History Limit:  10
      Strategy:
        Type:  RollingUpdate
    Status:
      Conditions:
        Last Transition Time:   2025-11-13T22:08:12Z
        Message:                found all cluster needed as specified by the scheduling policy, found 2 cluster(s)
        Observed Generation:    1
        Reason:                 SchedulingPolicyFulfilled
        Status:                 True
        Type:                   ResourcePlacementScheduled
        Last Transition Time:   2025-11-13T22:08:12Z
        Message:                All 2 cluster(s) start rolling out the latest resource
        Observed Generation:    1
        Reason:                 RolloutStarted
        Status:                 True
        Type:                   ResourcePlacementRolloutStarted
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                No override rules are configured for the selected resources
        Observed Generation:    1
        Reason:                 NoOverrideSpecified
        Status:                 True
        Type:                   ResourcePlacementOverridden
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                Works(s) are succcesfully created or updated in 2 target cluster(s)' namespaces
        Observed Generation:    1
        Reason:                 WorkSynchronized
        Status:                 True
        Type:                   ResourcePlacementWorkSynchronized
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                The selected resources are successfully applied to 2 cluster(s)
        Observed Generation:    1
        Reason:                 ApplySucceeded
        Status:                 True
        Type:                   ResourcePlacementApplied
        Last Transition Time:   2025-11-13T22:08:13Z
        Message:                The selected resources in 2 cluster(s) are available now
        Observed Generation:    1
        Reason:                 ResourceAvailable
        Status:                 True
        Type:                   ResourcePlacementAvailable
      Observed Resource Index:  0
      Placement Statuses:
        Cluster Name:  membercluster1
        Conditions:
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Successfully scheduled resources for placement in "membercluster1": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Detected the new changes on the resources and started the rollout process
          Observed Generation:    1
          Reason:                 RolloutStarted
          Status:                 True
          Type:                   RolloutStarted
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are available
          Observed Generation:    1
          Reason:                 AllWorkAreAvailable
          Status:                 True
          Type:                   Available
        Observed Resource Index:  0
        Cluster Name:             membercluster2
        Conditions:
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Successfully scheduled resources for placement in "membercluster2": picked by scheduling policy
          Observed Generation:    1
          Reason:                 Scheduled
          Status:                 True
          Type:                   Scheduled
          Last Transition Time:   2025-11-13T22:08:12Z
          Message:                Detected the new changes on the resources and started the rollout process
          Observed Generation:    1
          Reason:                 RolloutStarted
          Status:                 True
          Type:                   RolloutStarted
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                No override rules are configured for the selected resources
          Observed Generation:    1
          Reason:                 NoOverrideSpecified
          Status:                 True
          Type:                   Overridden
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All of the works are synchronized to the latest
          Observed Generation:    1
          Reason:                 AllWorkSynced
          Status:                 True
          Type:                   WorkSynchronized
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are applied
          Observed Generation:    1
          Reason:                 AllWorkHaveBeenApplied
          Status:                 True
          Type:                   Applied
          Last Transition Time:   2025-11-13T22:08:13Z
          Message:                All corresponding work objects are available
          Observed Generation:    1
          Reason:                 AllWorkAreAvailable
          Status:                 True
          Type:                   Available
        Observed Resource Index:  0
      Selected Resources:
        Kind:       ConfigMap
        Name:       app-config
        Namespace:  my-app
        Version:    v1
        Kind:       ConfigMap
        Name:       feature-flags
        Namespace:  my-app
        Version:    v1
    Events:
      Type    Reason                     Age   From                            Message
      ----    ------                     ----  ----                            -------
      Normal  PlacementRolloutStarted       37s   placement-controller  Started rolling out the latest resources
      Normal  PlacementOverriddenSucceeded  36s   placement-controller  Placement has been successfully overridden
      Normal  PlacementWorkSynchronized     36s   placement-controller  Work(s) have been created or updated successfully for the selected cluster(s)
      Normal  PlacementApplied              36s   placement-controller  Resources have been applied to the selected cluster(s)
      Normal  PlacementAvailable            36s   placement-controller  Resources are available on the selected cluster(s)
      Normal  PlacementRolloutCompleted     36s   placement-controller  Placement has finished the rollout process and reached the desired status
    

Verificar recursos em clusters de membros

Você pode verificar se o ConfigMaps foi propagado com êxito para os clusters membros.

  1. Obtenha as credenciais de um dos clusters membros:

    az aks get-credentials --resource-group <resource-group> --name membercluster1
    
  2. Verifique se o namespace existe:

    kubectl get namespace my-app
    
  3. Verifique se os ConfigMaps existem no namespace.

    kubectl get configmap -n my-app
    

    Sua saída deve mostrar ambos os ConfigMaps:

    NAME             DATA   AGE
    app-config       2      2m
    feature-flags    2      2m
    
  4. Exiba o conteúdo de um ConfigMap:

    kubectl describe configmap app-config -n my-app
    

Limpar os recursos

Se você não quiser mais usar os ResourcePlacement objetos, poderá excluí-los usando o kubectl delete comando:

kubectl delete resourceplacement app-configs -n my-app

Para também remover o namespace ClusterResourcePlacement:

kubectl delete clusterresourceplacement my-app-namespace

Para remover o namespace e todos os recursos dentro dele do cluster do hub:

kubectl delete namespace my-app

Para saber mais sobre o posicionamento de recursos no escopo do namespace, confira os seguintes recursos: