Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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
- Se você ainda não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
- Leia a visão geral conceitual do posicionamento de recursos no escopo do namespace para entender os conceitos e a terminologia usados neste artigo.
- Você precisa de um Gerenciador de frotas com um cluster de hub e clusters de membros. Caso não tenha um, confira Criar um recurso do Gerenciador de Frota de Kubernetes do Azure e ingressar em clusters membros usando a CLI do Azure.
- Você precisa de acesso à API do Kubernetes do cluster de hub. Caso não tenha acesso, consulte Acessar a API do Kubernetes para um cluster de hub do Gerenciador de Frota de Kubernetes do Azure.
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.
Crie um namespace no cluster do hub:
kubectl create namespace my-appCrie um
ClusterResourcePlacementobjeto para propagar o namespace para todos os clusters membros. Salve o YAML a seguir em um arquivo chamadonamespace-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: PickAllAplique o
ClusterResourcePlacementno cluster do hub:kubectl apply -f namespace-crp.yamlVerifique se o namespace foi propagado com êxito:
kubectl get clusterresourceplacement my-app-namespaceSeu 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.
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-appCrie um
ResourcePlacementobjeto para propagar o ConfigMaps. Salve o YAML a seguir em um arquivo chamadoapp-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 - membercluster2Observação
Substitua
membercluster1emembercluster2pelos nomes reais dos clusters membros. Você pode listar clusters de membros disponíveis usandokubectl get memberclusters.Aplique o
ResourcePlacementao cluster do hub.kubectl apply -f app-configs-rp.yamlVerifique o progresso da propagação de recursos:
kubectl get resourceplacement app-configs -n my-appSeu resultado deve ser semelhante ao seguinte exemplo:
NAME GEN SCHEDULED SCHEDULED-GEN AVAILABLE AVAILABLE-GEN AGE app-configs 1 True 1 True 1 20sExiba os detalhes do objeto de posicionamento:
kubectl describe resourceplacement app-configs -n my-appSeu 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.
Obtenha as credenciais de um dos clusters membros:
az aks get-credentials --resource-group <resource-group> --name membercluster1Verifique se o namespace existe:
kubectl get namespace my-appVerifique se os ConfigMaps existem no namespace.
kubectl get configmap -n my-appSua saída deve mostrar ambos os ConfigMaps:
NAME DATA AGE app-config 2 2m feature-flags 2 2mExiba 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
Conteúdo relacionado
Para saber mais sobre o posicionamento de recursos no escopo do namespace, confira os seguintes recursos:
- Usando ResourcePlacement para implantar recursos com escopo de namespace
- Usando ClusterResourcePlacement para implantar recursos com escopo de cluster
- Noções básicas sobre a saída de status de posicionamento de recursos
- Usar substituições para personalizar os recursos com escopo do namespace
- Definindo uma estratégia de implantação para alocação de recursos
- Perguntas frequentes sobre o posicionamento de recursos do cluster