Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a: ✔️ Fleet Manager com cluster de hub
O posicionamento de recursos do Azure Kubernetes Fleet Manager permite-lhe distribuir e sincronizar recursos com escopo de cluster – incluindo namespaces e os seus recursos filhos – entre vários clusters da sua frota. Esta funcionalidade simplifica implementações multicluster ao garantir uma configuração consistente de recursos em toda a sua infraestrutura, reduzindo a sobrecarga manual e permitindo-lhe gerir cargas de trabalho complexas em escala com uma única fonte de verdade. Este artigo explica como utilizar o ClusterResourcePlacement para distribuir um namespace e as respetivas cargas de trabalho por clusters membro.
Para distribuir recursos individuais dentro de um namespace, consulte a documentação sobre a colocação de recursos com âmbito de namespace.
Pode completar os passos deste artigo usando o portal Azure ou a CLI do Azure.
Note
Pode usar o posicionamento de recursos do Fleet Manager com clusters Kubernetes habilitados para AKS e Azure Arc.
Antes de começares
- Se não tiver uma conta do Azure, crie uma conta gratuita antes de começar.
- Leia a visão conceptual da colocação de recursos para compreender os conceitos e a terminologia usados neste artigo.
- Você precisa de um Fleet Manager com um cluster de hub e clusters de membros. Se você não tiver um, consulte Criar um recurso do Azure Kubernetes Fleet Manager e ingressar em clusters de membros usando a CLI do Azure.
- Você precisa acessar a API do Kubernetes do cluster de hub. Se você não tiver acesso, consulte Acessar a API do Kubernetes para um cluster de hub do Kubernetes Fleet Manager do Azure.
Distribuir um namespace e os seus recursos para clusters membros
Utilize o cenário simples de ter um Deployment e Service para implementar em todos os clusters da frota. Crie um namespace no seu cluster hub do Fleet Manager, adicione-lhe as cargas de trabalho e, em seguida, utilize um ClusterResourcePlacement para distribuir o namespace e todo o respetivo conteúdo por todos os clusters membros, através da política de posicionamento PickAll.
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 subscrição padrão do Azure usando o comando [
az account set][az-account-set]:az account set \ --subscription ${SUBSCRIPTION_ID}Obtenha o ficheiro kubeconfig do cluster hub Kubernetes Fleet usando o comando [
az fleet get-credentials][az-fleet-get-credentials]:az fleet get-credentials \ --resource-group ${GROUP} \ --name ${FLEET}O seu resultado deve parecer semelhante ao seguinte.
Merged "hub" as current context in /home/fleet/.kube/configNote
Se receber um erro do tipo
InvalidHubOperationcom a mensagem a indicar que a frota está sem hub, adicione um cluster de hubs. Para mais informações, consulte tipo de cluster do hub de atualização.Cria um namespace no cluster do hub.
kubectl create namespace test-appGuardar o YAML seguinte 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: LoadBalancerEspalhe a carga de trabalho de teste para o cluster hub do Gestor de Frotas usando
kubectl.kubectl apply -f test-workload.yamlGuardar o YAML seguinte 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 colocação ao cluster do hub do Gestor de Frotas.
kubectl apply -f crp-distribute-workload.yamlNote
A implementação de recursos começa imediatamente após a aplicação do manifesto. É utilizada uma estratégia implícita
RollingUpdate. Para aprender a ter controlo adicional sobre o lançamento, veja definir uma estratégia de implementação para a colocação de recursos.Verifique o progresso da colocação de recursos.
kubectl get clusterresourceplacement distribute-test-app
O resultado deverá ter um aspeto semelhante ao seguinte exemplo:
NAME GEN SCHEDULED SCHEDULEDGEN APPLIED APPLIEDGEN AGE
distribute-test-app 2 True 2 True 2 10s
- Consulte os detalhes da colocação.
kubectl describe clusterresourceplacement distribute-test-app
O resultado deverá ter um aspeto 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 Azure, aceda ao seu Gestor de Frotas.
No menu de serviço, em Recursos da Frota, selecione Namespaces>+ Criar.
Note
Se não vires Recursos de Frota, o teu Gestor de Frotas não tem um cluster de hubs. Para mais informações sobre como adicionar um, veja o tipo de cluster do hub de atualização.
No menu, selecione Namespace, introduza um Nome e depois selecione Criar.
Após alguns instantes, a página é atualizada e o namespace aparece na lista de namespaces no cluster hub do Fleet Manager. Agora está pronto para alojar quaisquer recursos que queira distribuir entre clusters de membros.
No topo da lista de namespace, selecione + Criar>Aplicar um YAML e use os seguintes exemplos.
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 as amostras e aplique-as uma de cada vez, como mostrado na imagem seguinte.
O namespace e as suas cargas de trabalho estão agora prontos para serem distribuídos para clusters membros. O Deployment e o Service não estão programados no cluster hub do Fleet Manager.
No menu de serviço, em Recursos da Frota, selecione Colocação>de Recursos + Criar.
Na guia Noções básicas, configure as seguintes opções:
Nos detalhes da colocação, insira um nome para a colocação.
Em Detalhes do recurso, deixe Âmbito como Âmbito do cluster e introduza o Grupo, versão e tipo (GVK) e o nome do recurso a distribuir. Neste exemplo, use os seguintes valores.
group: "" kind: Namespace version: v1 name: test-appNa seleção de clusters de membros, para o tipo de colocaçãoescolhe Todos os clusters.
Para Rollout, mantenha selecionada a estratégia de atualização progressiva.
Selecione Seguinte para rever o manifesto resultante
ClusterResourcePlacement. Pode modificar o manifesto se necessário, validar usando a opção Validar (ensaio geral), ou selecionar Rever + criar para avançar para a confirmação final.Selecione Criar para iniciar imediatamente a distribuição do namespace.
Note
O lançamento de recursos começa imediatamente quando aplicas a colocação de recursos usando a estratégia selecionada
RollingUpdate. Para aprender a ter controlos adicionais sobre o lançamento, veja definir uma estratégia de implementação para a colocação de recursos.A página atualiza-se e a lista de Posicionamentos de Recursos mostra a nova colocação criada. Mostra o número de clusters selecionados e se o programador da frota consegue cumprir a política de colocação.
Consulte o estado de implementação da colocação selecionando o nome da colocação na lista. Selecione clusters individuais para ver a implementação de recursos nesse cluster.
Nos clusters do Kubernetes selecionados, encontram-se o espaço de nomes, a Implementação e o Serviço, implementados e operacionais.
Eliminar a colocação para remover recursos
Quando elimina o posicionamento de recursos no cluster de hub do Fleet Manager, 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 Posicionamentos de recursos.
Na lista de colocação de recursos, selecione a colocação e selecione Eliminar.
Ao Apagar, verifica se escolheste a posição correta. Quando estiver pronto, selecione Confirmar exclusão>Excluir.
A página atualiza-se e a posição deixa de aparecer na lista. Os recursos são removidos dos clusters membros.
Conteúdos relacionados
Para saber mais sobre a colocação de recursos, consulte os seguintes recursos:
- Implementar recursos com âmbito de namespace em múltiplos clusters
- Compreendendo o resultado do status de posicionamento de recursos
- Posicionamento inteligente de recursos do Kubernetes entre clusters com base nas propriedades dos clusters membros.
- Controlando o desalojamento e a perturbação para o posicionamento de recursos do cluster.
- Definição de uma estratégia de distribuição para alocação de recursos de cluster.
- Perguntas frequentes sobre posicionamento de recursos de cluster.
- Documentação open-source do KubeFleet ClusterResourcePlacement.