Usar nós virtuais v2 em AKS (Serviço de Kubernetes do Azure) (versão prévia)

Os Nós Virtuais v2 são uma pilha de Nós Virtuais aprimorada que estende o AKS além dos nós baseados em VM executando pods na computação sem servidor na ACI (Instâncias de Contêiner do Azure). As cargas de trabalho rompem nas ACIs em segundos sem esperar que novos nós sejam provisionados, e você paga apenas pela computação usada enquanto os pods estão em execução. Os Nós Virtuais v2 são fornecidos como uma extensão de cluster do AKS.

Importante

As funcionalidades em versão preliminar do AKS estão disponíveis de forma optativa e por autoatendimento. 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. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:

Supported

  • Contêineres de inicialização
  • Alias de host
  • Ganchos de ciclo de vida do contêiner (postStart e preStop)
  • kubectl exec com argumentos
  • PVCs e volumes persistentes (somente nos Arquivos do Azure)
  • Emparelhamento de VNet
  • Saída controlada por NSG
  • Gateway da NAT para saída
  • Contêineres confidenciais
  • Até 200 pods por nó virtual

Limitations

Não há suporte aos seguintes recursos:

  • Contêineres do Windows
  • Conjuntos de Daemon
  • Encaminhamento de porta
  • IPv6
  • Intervalos de IP autorizados do servidor de API
  • CNI Overlay do Azure
  • Cilium ou NPM como a política de rede
  • Traga sua própria (BYO) rede virtual
  • Várias instâncias de extensão por cluster
  • Pools de reserva

Limites de cota e disponibilidade de recursos

Os Nós Virtuais v2 estão disponíveis em todas as regiões de nuvem pública do Azure nas quais as Instâncias de Contêiner do Azure dão suporte a SKUs de VNet. Para obter mais informações, consulte Disponibilidade de recursos e limites de cota para as ACIs.

Prerequisites

  • CNI do Azure no modo nó-subrede
  • Calico ou nenhum como a política de rede
  • Identidade da carga de trabalho habilitada
  • Pelo menos um pool de nós com um tamanho de VM de mais de 4 vCPUs e mais de 16 GiB de memória. Cada nó virtual reserva cerca de 3 vCPUs e 12 GiB de memória em um nó do AKS em seu cluster; portanto, verifique se os nós têm recursos suficientes.
  • Versão de k8s-extension 1.8 ou posterior
  • kubectl 1.30 ou posterior

Registre o provedor de recursos das ACIs:

az provider register --namespace Microsoft.ContainerInstance

Note

Execute o comando a seguir se você encontrar um erro em qualquer etapa do processo de habilitação da extensão.

az provider register --namespace Microsoft.KubernetesConfig

Habilitar os Nós Virtuais v2

Instale a extensão:

az k8s-extension create \
    --name <extension-name> \
    --extension-type Microsoft.virtualnodes \
    --cluster-name <cluster-name> \
    --resource-group <resource-group> \
    --cluster-type managedClusters \
    --configuration-settings replicaCount=1   # specifies number of virtual nodes - optional

Definir as configurações da extensão

As operações de criação e atualização dão suporte às seguintes configurações.

Definição de configuração Description
replicaCount Número de Nós Virtuais.
admissionControllerReplicaCount Número de pods do controlador de admissão.
podAnnotations Anotações adicionadas a pods de infraestrutura como um mapa de valores-chave.
nodeSelector Rótulos que selecionam os nós do AKS que hospedam pods de infraestrutura e do controlador de admissão.
tolerations Tolerâncias aplicadas a pods de controlador de infraestrutura e admissão.
affinity Configurações de afinidade adicionais mescladas com as regras de afinidade necessárias do AKS.
zones Zonas de disponibilidade delimitadas por ponto e vírgula em que os pods são implantados.
nodeLabels Rótulos adicionados a Nós Virtuais como pares separados por vírgulas key=value .

Os rótulos permitidos kubernetes.io são:

  • beta.kubernetes.io/arch
  • beta.kubernetes.io/instance-type
  • beta.kubernetes.io/os
  • failure-domain.beta.kubernetes.io/region
  • failure-domain.beta.kubernetes.io/zone
  • kubernetes.io/arch
  • kubernetes.io/hostname
  • kubernetes.io/os
  • node.kubernetes.io/instance-type
  • topology.kubernetes.io/region
  • topology.kubernetes.io/zone

Verifique a extensão:

az k8s-extension show \
    --name <extension-name> \
    --cluster-type managedClusters \
    --cluster-name <cluster-name> \
    --resource-group <resource-group>

Confirme se provisioningState é Succeeded. Pode ficar Pending por alguns minutos.

Verifique se os pods de extensão estão em execução no namespace vn-system:

kubectl get pods --namespace vn-system

Atualizar uma extensão

az k8s-extension update --name <extension-name> --cluster-name <aks-cluster-name> --resource-group <aks-resource-group> --cluster-type managedClusters

Note

O parâmetro --auto-upgrade-mode dá suporte a none, patch ou compatible. Para fixar uma versão de extensão específica usando --version, defina --auto-upgrade-mode como none.

Acesso ao Registro de Contêiner do Azure

Para efetuar pull de imagens de um ACR (Registro de Contêiner do Azure) privado, use a identidade gerenciada da extensão ou um segredo de pull de imagens do Kubernetes.

Usar a identidade gerenciada da extensão

Conceda a AcrPull função à identidade gerenciada gerada para a extensão. Essa função concede a todos os pods em execução nos Nós Virtuais da extensão acesso para efetuar pull de imagens do Registro sem configuração de pod extra. Você deve ter permissão para criar atribuições de função no Registro.

Obtenha a ID principal da identidade gerenciada da extensão:

$extensionPrincipalId = az k8s-extension show --name <extension-name> --cluster-name <aks-cluster-name> --resource-group <aks-resource-group> --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv

Obtenha a ID do recurso do registro de contêiner:

$acrId = az acr show --name <acr-name> --resource-group <acr-resource-group> --query id --output tsv

Atribua a AcrPull função à identidade gerenciada da extensão no escopo do Registro:

az role assignment create --assignee-object-id $extensionPrincipalId --assignee-principal-type ServicePrincipal --role AcrPull --scope $acrId

Aguarde alguns minutos para que a atribuição de função se propague antes de implantar cargas de trabalho que efetuem pull de imagens do Registro.

Usar um segredo de pull de imagens

Para obter instruções, consulte Segredo de pull do Kubernetes para a autenticação do ACR.

Implantar uma carga de trabalho em Nós Virtuais v2

Agende pods em nós virtuais usando o virtualization: virtualnode2 seletor de nó e a virtual-kubelet.io/provider tolerância:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demo
  template:
    metadata:
      labels:
        app: demo
    spec:
      containers:
        - name: hello
          image: mcr.microsoft.com/azuredocs/aci-helloworld
          resources:
            requests:
              cpu: 100m
              memory: 128Mi
            limits:
              cpu: "1"
              memory: 1Gi
      nodeSelector:
        virtualization: virtualnode2
        kubernetes.io/os: linux
      tolerations:
        - key: virtual-kubelet.io/provider
          operator: Exists
          effect: NoSchedule

Salve o manifesto como demo.yamle, em seguida, aplique-o.

kubectl apply -f demo.yaml

Verifique se os pods estão em execução.

kubectl get pods -l app=demo -o wide

Desabilitar Nós Virtuais v2

Warning

Quando você desabilitar a extensão do nó virtual, o cluster do AKS se desconecta do backup dos grupos de contêineres das Instâncias de Contêiner do Azure. Para evitar instâncias órfãs que continuam em execução e incorrendo em encargos, exclua todas as cargas de trabalho em execução no nó virtual antes de desabilitar a extensão.

Exclua a extensão e limpe os recursos de nó virtual.

az k8s-extension delete \
    --name <extension-name> \
    --cluster-name <cluster-name> \
    --resource-group <resource-group> \
    --cluster-type managedClusters
kubectl delete node <virtual-node-name>

Próximas Etapas