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.
Aplica-se a: ✔️ Gerenciador de Frota com cluster do hub
O posicionamento de recursos do Azure Kubernetes Fleet Manager permite distribuir e sincronizar recursos com escopo no cluster — incluindo namespaces e seus recursos subordinados — em vários clusters na sua frota. Esse recurso simplifica as implantações multicluster, garantindo uma configuração de recursos consistente em sua infraestrutura, reduzindo a sobrecarga manual e permitindo que você gerencie cargas de trabalho complexas em escala com uma única fonte de verdade. Este artigo explica como usar ClusterResourcePlacement para distribuir um namespace e suas cargas de trabalho para clusters membros.
Para distribuir recursos individuais dentro de um namespace, consulte a documentação sobre o posicionamento de recursos no escopo do namespace.
Você pode concluir as etapas neste artigo usando o portal do Azure ou o CLI do Azure.
Note
Você pode usar o posicionamento de recursos do Gerenciador de Frota com o AKS e clusters do Kubernetes habilitados para o Azure Arc.
Antes de começar
- 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 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.
Distribuir um namespace e seus recursos em clusters de membros
Use o cenário simples de ter um Deployment e um Service para implantar em todos os clusters da frota. Crie um namespace no cluster do hub do Fleet Manager, adicione as cargas de trabalho a ele e, em seguida, use um ClusterResourcePlacement para distribuir o namespace e todo o seu conteúdo para todos os clusters de membros usando a PickAll política de posicionamento.
Defina as seguintes variáveis de ambiente para sua ID de assinatura, grupo de recursos e recurso de Frota do Kubernetes:
export SUBSCRIPTION_ID=<subscription-id> export GROUP=<resource-group-name> export FLEET=<fleet-name>Defina a assinatura de Azure padrão usando o comando [
az account set][az-account-set]:az account set \ --subscription ${SUBSCRIPTION_ID}Obtenha o arquivo kubeconfig do cluster do Hub da Frota do Kubernetes usando o comando [
az fleet get-credentials][az-fleet-get-credentials]:az fleet get-credentials \ --resource-group ${GROUP} \ --name ${FLEET}Sua saída deve ser semelhante à seguinte.
Merged "hub" as current context in /home/fleet/.kube/configNote
Se você receber um erro do tipo
InvalidHubOperationcom a mensagem informando que a frota não tem hub, adicione um cluster de hubs. Para obter mais informações, consulte o tipo de cluster do hub de atualização.Crie um namespace no cluster do hub.
kubectl create namespace test-appSalve o YAML a seguir como
test-workload.yaml.apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: test-app spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: mcr.microsoft.com/azurelinux/base/nginx:1.28@sha256:3352a36cbcab4708883a3e77b64f64159e11e1aab358c010e1c4e465dbfb4f57 ports: - containerPort: 80 --- apiVersion: v1 kind: Service metadata: name: nginx-service namespace: test-app spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancerImplante a carga de trabalho de teste no cluster de hub do Fleet Manager usando
kubectl.kubectl apply -f test-workload.yamlSalve o YAML a seguir como
crp-distribute-workload.yaml.apiVersion: placement.kubernetes-fleet.io/v1 kind: ClusterResourcePlacement metadata: name: distribute-test-app spec: resourceSelectors: - group: "" kind: Namespace version: v1 name: test-app policy: placementType: PickAllAplique o manifesto de alocação ao cluster hub do Fleet Manager.
kubectl apply -f crp-distribute-workload.yamlNote
A implantação dos recursos começa assim que o manifesto é aplicado. Uma estratégia implícita
RollingUpdateé usada. Para saber como ter controle adicional sobre a distribuição, confira a definição de uma estratégia de distribuição para posicionamento de recursos.Verifique o progresso da alocação do recurso.
kubectl get clusterresourceplacement distribute-test-app
Seu resultado deve ser semelhante ao seguinte exemplo:
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE
distribute-test-app 2 True 2 True 2 10s
- Veja os detalhes do posicionamento.
kubectl describe clusterresourceplacement distribute-test-app
Seu resultado deve ser semelhante ao seguinte exemplo:
Name: distribute-test-app
Namespace:
Labels: <none>
Annotations: <none>
API Version: placement.kubernetes-fleet.io/v1
Kind: ClusterResourcePlacement
Metadata:
Creation Timestamp: 2024-04-01T18:55:31Z
Finalizers:
kubernetes-fleet.io/crp-cleanup
kubernetes-fleet.io/scheduler-cleanup
Generation: 2
Resource Version: 6949
UID: 815b1d81-61ae-4fb1-a2b1-06794be3f986
Spec:
Policy:
Placement Type: PickAll
Resource Selectors:
Group:
Kind: Namespace
Name: test-app
Version: v1
Revision History Limit: 10
Strategy:
Type: RollingUpdate
Status:
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: found all the clusters needed as specified by the scheduling policy
Observed Generation: 2
Reason: SchedulingPolicyFulfilled
Status: True
Type: ClusterResourcePlacementScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: All 3 cluster(s) are synchronized to the latest resources on the hub cluster
Observed Generation: 2
Reason: SynchronizeSucceeded
Status: True
Type: ClusterResourcePlacementSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources to 3 member clusters
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ClusterResourcePlacementApplied
Observed Resource Index: 0
Placement Statuses:
Cluster Name: membercluster1
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: Successfully scheduled resources for placement in membercluster1 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 2
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 2
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Cluster Name: membercluster2
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: Successfully scheduled resources for placement in membercluster2 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 2
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 2
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Cluster Name: membercluster3
Conditions:
Last Transition Time: 2024-04-01T18:55:31Z
Message: Successfully scheduled resources for placement in membercluster3 (affinity score: 0, topology spread score: 0): picked by scheduling policy
Observed Generation: 2
Reason: ScheduleSucceeded
Status: True
Type: ResourceScheduled
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully Synchronized work(s) for placement
Observed Generation: 2
Reason: WorkSynchronizeSucceeded
Status: True
Type: WorkSynchronized
Last Transition Time: 2024-04-01T18:55:36Z
Message: Successfully applied resources
Observed Generation: 2
Reason: ApplySucceeded
Status: True
Type: ResourceApplied
Selected Resources:
Kind: Namespace
Name: my-namespace
Version: v1
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal PlacementScheduleSuccess 108s cluster-resource-placement-controller Successfully scheduled the placement
Normal PlacementSyncSuccess 103s cluster-resource-placement-controller Successfully synchronized the placement
Normal PlacementRolloutCompleted 103s cluster-resource-placement-controller Resources have been applied to the selected clusters
No portal do Azure, acesse o Fleet Manager.
No menu de serviço, em Recursos da Frota, selecione Namespaces>+ Criar.
Note
Se você não encontrar Fleet Resources, seu Fleet Manager não tem um cluster de hub. Para obter mais informações sobre como adicionar um, consulte o tipo de cluster do hub de atualização.
No menu, selecione Namespace, insira um Nome e selecione Criar.
Após alguns instantes, a página é atualizada e o namespace aparece na lista de namespaces no cluster do Hub do Fleet Manager. Agora ele está pronto para hospedar todos os recursos que você deseja distribuir entre clusters membros.
Na parte superior da lista de namespaces, selecione + Criar>Aplicar um YAML e use os exemplos a seguir.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment namespace: test-app spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: mcr.microsoft.com/azurelinux/base/nginx:1.28@sha256:3352a36cbcab4708883a3e77b64f64159e11e1aab358c010e1c4e465dbfb4f57 ports: - containerPort: 80apiVersion: v1 kind: Service metadata: name: nginx-service namespace: test-app spec: selector: app: nginx ports: - protocol: TCP port: 80 targetPort: 80 type: LoadBalancerCopie e cole os exemplos e aplique-os um de cada vez, conforme mostrado na imagem a seguir.
O namespace e suas cargas de trabalho agora estão prontos para serem distribuídos para clusters membros. A implantação e o serviço não estão programados no cluster hub do Fleet Manager.
No menu de serviço, em Recursos da Frota, selecione Posicionamentos de recursos>+ Criar.
Na guia Básico, configure os seguintes valores:
Em Detalhes do posicionamento, insira um nome para o posicionamento.
Em Detalhes do recurso, deixe Escopo como Escopo do cluster e insira o Tipo de Versão de Grupo (GVK) e o nome do recurso a ser distribuído. Neste exemplo, use os valores a seguir.
group: "" kind: Namespace version: v1 name: test-appEm Seleção de clusters membros, em Tipo de posicionamento, escolha Todos os clusters.
Para Rollout, deixe a estratégia Rolling update selecionada.
Selecione Avançar para examinar o manifesto resultante
ClusterResourcePlacement. Você pode modificar o manifesto se necessário, validar usando a opção Validar (execução seca) ou selecionar Examinar + criar para prosseguir para a confirmação final.Selecione Criar para iniciar a distribuição do namespace imediatamente.
Note
A implantação do recurso começa imediatamente quando você aplica a alocação do recurso usando a estratégia
RollingUpdateselecionada. Para saber como ter controles adicionais sobre a distribuição, confira a definição de uma estratégia de distribuição para posicionamento de recursos.A página é atualizada e a lista Alocações de recursos exibe a alocação recém-criada. Ela mostra o número de clusters selecionados e se o agendador de frota pode cumprir a política de posicionamento.
Exiba o status de distribuição do posicionamento selecionando o nome do posicionamento na lista. Selecione clusters individuais para exibir a distribuição de recursos nesse cluster.
Nos clusters Kubernetes selecionados, você encontrará o namespace, o Deployment e o Service implantados e operacionais.
Excluir o posicionamento para remover recursos
Ao excluir o posicionamento do recurso no cluster do hub do Fleet Manager, você remove os recursos distribuídos dos clusters membros selecionados.
kubectl delete clusterresourceplacement distribute-test-app
No menu de serviço, em Recursos da Frota, selecione Colocações de recursos.
Na lista de posicionamentos de recursos, selecione o posicionamento e selecione Excluir.
Ao Excluir, verifique se você escolheu o posicionamento correto. Quando tudo estiver pronto, selecione Confirmar exclusão>Excluir.
A página é atualizada e o posicionamento não aparece mais na lista. Os recursos são removidos dos clusters de membros.
Conteúdo relacionado
Para saber mais sobre o posicionamento de recursos, consulte os seguintes recursos:
- Implantar recursos com escopo de namespace em vários clusters
- Noções básicas sobre a saída do status de posicionamento do recurso.
- Colocação inteligente de recursos do Kubernetes entre clusters com base nas propriedades dos clusters membros.
- Controlando a remoção e a interrupção para posicionamento de recursos do cluster.
- Definindo uma estratégia de implementação para alocação de recursos do cluster.
- Perguntas frequentes sobre o posicionamento de recursos do cluster.
- Documentação do ClusterResourcePlacement do KubeFleet de software livre.