Criar e configurar um cluster dos Serviços Kubernetes do Azure (AKS) para usar nós virtuais usando a CLI do Azure
Os nós virtuais permitem a comunicação de rede entre pods executados em Instâncias de Contêiner do Azure (ACI) e clusters AKS. Para fornecer essa comunicação, crie uma sub-rede de rede virtual e atribua permissões delegadas. Os nós virtuais só funcionam com clusters AKS criados usando redes avançadas (Azure CNI). Por padrão, os clusters AKS são criados com rede básica (kubenet). Este artigo mostra como criar uma rede virtual e sub-redes e, em seguida, implantar um cluster AKS que usa rede avançada.
Este artigo mostra como usar a CLI do Azure para criar e configurar recursos de rede virtual e um cluster AKS habilitado com nós virtuais.
Antes de começar
Importante
Antes de usar nós virtuais com AKS, revise as limitações dos nós virtuais AKS e as limitações de rede virtual do ACI. Essas limitações afetam a localização, a configuração de rede e outros detalhes de configuração do cluster AKS e dos nós virtuais.
Você precisa do provedor de serviços ACI registrado com sua assinatura. Você pode verificar o status do registro do provedor ACI usando o
az provider list
comando.az provider list --query "[?contains(namespace,'Microsoft.ContainerInstance')]" -o table
O provedor Microsoft.ContainerInstance deve relatar como Registered, conforme mostrado na saída de exemplo a seguir:
Namespace RegistrationState RegistrationPolicy --------------------------- ------------------- -------------------- Microsoft.ContainerInstance Registered RegistrationRequired
Se o provedor mostrar como NotRegistered, registre o provedor usando o
az provider register
.az provider register --namespace Microsoft.ContainerInstance
Se estiver usando a CLI do Azure, este artigo exigirá a CLI do Azure versão 2.0.49 ou posterior. Executar
az --version
para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI). Você também pode usar o Azure Cloud Shell.
Iniciar o Azure Cloud Shell
O Azure Cloud Shell é um shell interativo gratuito que você pode usar para executar as etapas neste artigo. Tem ferramentas comuns do Azure pré-instaladas e configuradas.
Para abrir o Cloud Shell, selecione Experimente no canto superior direito de um bloco de código. Também pode iniciar o Cloud Shell num separador do browser separado ao aceder a https://shell.azure.com/bash. Selecione Copiar para copiar os blocos de código, cole-o no Cloud Shell e prima Enter para executá-lo.
Criar um grupo de recursos
Um grupo de recursos do Azure é um grupo lógico, no qual os recursos do Azure são implementados e geridos.
Crie um grupo de recursos usando o
az group create
comando.az group create --name myResourceGroup --location eastus
Criar uma rede virtual
Importante
O nó virtual requer uma rede virtual personalizada e uma sub-rede associada. Ele não pode ser associado à mesma rede virtual que o cluster AKS.
Crie uma rede virtual usando o
az network vnet create
comando. O exemplo a seguir cria uma rede virtual chamada myVnet com um prefixo de endereço de 10.0.0.0/8 e uma sub-rede chamada myAKSSubnet. O prefixo de endereço dessa sub-rede tem como padrão 10.240.0.0/16.az network vnet create \ --resource-group myResourceGroup \ --name myVnet \ --address-prefixes 10.0.0.0/8 \ --subnet-name myAKSSubnet \ --subnet-prefix 10.240.0.0/16
Crie uma sub-rede extra para os nós virtuais usando o
az network vnet subnet create
comando. O exemplo a seguir cria uma sub-rede chamada myVirtualNodeSubnet com um prefixo de endereço de 10.241.0.0/16.az network vnet subnet create \ --resource-group myResourceGroup \ --vnet-name myVnet \ --name myVirtualNodeSubnet \ --address-prefixes 10.241.0.0/16
Criar um cluster AKS com identidade gerenciada
Obtenha o ID da sub-rede usando o
az network vnet subnet show
comando.az network vnet subnet show --resource-group myResourceGroup --vnet-name myVnet --name myAKSSubnet --query id -o tsv
Crie um cluster AKS usando o
az aks create
comando e substitua<subnetId>
pelo ID obtido na etapa anterior. O exemplo a seguir cria um cluster chamado myAKSCluster com cinco nós.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --node-count 5 \ --network-plugin azure \ --vnet-subnet-id <subnetId> \ --generate-ssh-keys
Ao fim de vários minutos, o comando é concluído e devolve informações sobre o cluster no formato JSON.
Para obter mais informações sobre identidades gerenciadas, consulte Usar identidades gerenciadas.
Ativar o addon de nós virtuais
Nota
Se você tiver um Cluster de Serviço Kubernetes do Azure existente criado que usa o Azure CNI para a Rede Avançada, deverá ser capaz de habilitar nós virtuais como um complemento usando a CLI.
Habilite nós virtuais usando o
az aks enable-addons
comando. O exemplo a seguir usa a sub-rede chamada myVirtualNodeSubnet criada em uma etapa anterior.az aks enable-addons \ --resource-group myResourceGroup \ --name myAKSCluster \ --addons virtual-node \ --subnet-name myVirtualNodeSubnet
Ligar ao cluster
Configure
kubectl
para se conectar ao cluster do Kubernetes usando oaz aks get-credentials
comando. Este passo transfere credenciais e configura a CLI do Kubernetes para as utilizar.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Verifique a conexão com o cluster usando o
kubectl get
comando, que retorna uma lista dos nós do cluster.kubectl get nodes
A saída de exemplo a seguir mostra o único nó de VM criado e o nó virtual para Linux, virtual-node-aci-linux:
NAME STATUS ROLES AGE VERSION virtual-node-aci-linux Ready agent 28m v1.11.2 aks-agentpool-14693408-0 Ready agent 32m v1.11.2
Implantar um aplicativo de exemplo
Crie um arquivo nomeado
virtual-node.yaml
e copie no seguinte YAML. O YAML agenda o contêiner no nó definindo um nodeSelector e tolerância.apiVersion: apps/v1 kind: Deployment metadata: name: aci-helloworld spec: replicas: 1 selector: matchLabels: app: aci-helloworld template: metadata: labels: app: aci-helloworld spec: containers: - name: aci-helloworld image: mcr.microsoft.com/azuredocs/aci-helloworld ports: - containerPort: 80 nodeSelector: kubernetes.io/role: agent beta.kubernetes.io/os: linux type: virtual-kubelet tolerations: - key: virtual-kubelet.io/provider operator: Exists - key: azure.com/aci effect: NoSchedule
Execute o aplicativo usando o
kubectl apply
comando.kubectl apply -f virtual-node.yaml
Obtenha uma lista de pods e o nó agendado usando o
kubectl get pods
comando com o-o wide
argumento.kubectl get pods -o wide
O pod é agendado no nó virtual virtual-node-aci-linux, conforme mostrado na saída de exemplo a seguir:
NAME READY STATUS RESTARTS AGE IP NODE aci-helloworld-9b55975f-bnmfl 1/1 Running 0 4m 10.241.0.4 virtual-node-aci-linux
O pod recebe um endereço IP interno da sub-rede de rede virtual do Azure delegada para uso com nós virtuais.
Nota
Se você usar imagens armazenadas no Registro de Contêiner do Azure, configure e use um segredo do Kubernetes. Uma limitação atual dos nós virtuais é que você não pode usar a autenticação de entidade de serviço integrada do Microsoft Entra. Se você não usar um segredo, os pods agendados em nós virtuais não serão iniciados e relatarão o erro HTTP response status code 400 error code "InaccessibleImage"
.
Teste o pod do nó virtual
Teste o pod em execução no nó virtual navegando até o aplicativo de demonstração com um web client. Como o pod recebe um endereço IP interno, você pode testar rapidamente essa conectividade de outro pod no cluster AKS.
Crie um pod de teste e anexe uma sessão de terminal a ele usando o comando a seguir
kubectl run -it
.kubectl run -it --rm testvk --image=mcr.microsoft.com/dotnet/runtime-deps:6.0
Instale
curl
no pod usandoapt-get
.apt-get update && apt-get install -y curl
Acesse o endereço do seu pod usando
curl
, como http://10.241.0.4. Forneça seu próprio endereço IP interno mostrado no comando anteriorkubectl get pods
.curl -L http://10.241.0.4
O aplicativo de demonstração é exibido, como mostrado na seguinte saída de exemplo condensado:
<html> <head> <title>Welcome to Azure Container Instances!</title> </head> [...]
Feche a sessão do terminal no seu pod de teste com
exit
o . Quando a sessão termina, o pod é excluído.
Remover nós virtuais
Exclua o
aci-helloworld
pod em execução no nó virtual usando okubectl delete
comando.kubectl delete -f virtual-node.yaml
Desative os nós virtuais usando o
az aks disable-addons
comando.az aks disable-addons --resource-group myResourceGroup --name myAKSCluster --addons virtual-node
Remova os recursos de rede virtual e o grupo de recursos usando os seguintes comandos.
# Change the name of your resource group, cluster and network resources as needed RES_GROUP=myResourceGroup AKS_CLUSTER=myAKScluster AKS_VNET=myVnet AKS_SUBNET=myVirtualNodeSubnet # Get AKS node resource group NODE_RES_GROUP=$(az aks show --resource-group $RES_GROUP --name $AKS_CLUSTER --query nodeResourceGroup --output tsv) # Get network profile ID NETWORK_PROFILE_ID=$(az network profile list --resource-group $NODE_RES_GROUP --query "[0].id" --output tsv) # Delete the network profile az network profile delete --id $NETWORK_PROFILE_ID -y # Grab the service association link ID SAL_ID=$(az network vnet subnet show --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --query id --output tsv)/providers/Microsoft.ContainerInstance/serviceAssociationLinks/default # Delete the service association link for the subnet az resource delete --ids $SAL_ID --api-version 2021-10-01 # Delete the subnet delegation to Azure Container Instances az network vnet subnet update --resource-group $RES_GROUP --vnet-name $AKS_VNET --name $AKS_SUBNET --remove delegations
Próximos passos
Neste artigo, você agendou um pod no nó virtual e atribuiu um endereço IP interno privado. Em vez disso, você pode criar uma implantação de serviço e rotear o tráfego para seu pod por meio de um balanceador de carga ou controlador de entrada. Para obter mais informações, consulte Criar um controlador de entrada básico no AKS.
Os nós virtuais geralmente são um componente de uma solução de dimensionamento no AKS. Para obter mais informações sobre soluções de dimensionamento, consulte os seguintes artigos:
Azure Kubernetes Service