Use Virtual Nodes v2 in Azure Kubernetes Service (AKS) (preview)

O Virtual Nodes v2 é uma pilha melhorada de Nós Virtuais que estende o AKS para além dos nós baseados em VM, executando pods em computação serverless no Azure Container Instances (ACI). As cargas de trabalho saltam para ACI em segundos sem esperar que novos nós sejam provisionados, e pagas apenas pelo cálculo que usas enquanto os pods estão a correr. O Virtual Nodes v2 é entregue como uma extensão de cluster AKS.

Importante

As funcionalidades de pré-visualização do AKS estão disponíveis num regime de autosserviço e de adesão voluntária. As visualizações prévias são fornecidas "como estão" e "conforme disponíveis" e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões de pré-visualização do AKS são apenas parcialmente abrangidas pelo suporte ao cliente, na medida do possível. Assim sendo, estas funcionalidades não se destinam ao uso em produção. Para obter mais informações, consulte os seguintes artigos de suporte:

Suportado

  • Contentores de inicialização
  • Alias de host
  • Ganchos do ciclo de vida do contentor (postStart e preStop)
  • kubectl exec com argumentos
  • Volumes persistentes e PVCs (apenas Ficheiros do Azure)
  • Emparelhamento VNet
  • Saída controlada por NSG
  • NAT Gateway para saída
  • Contentores confidenciais
  • Até 200 pods por nó virtual

Limitations

Os seguintes recursos não são suportados:

  • Contentores do Windows
  • Conjuntos de Daemon
  • Encaminhamento de portas
  • IPv6
  • Intervalos de IP autorizados pelo servidor API
  • Sobreposição do Azure CNI
  • Cilium ou NPM como política de rede
  • Use a sua própria rede virtual (BYO)
  • Múltiplas instâncias de extensão por cluster
  • Piscinas de reserva

Disponibilidade de recursos e limites de quotas

O Virtual Nodes v2 está disponível em todas as regiões da cloud pública do Azure onde o Azure Container Instances suporta SKUs VNet. Para mais informações, consulte Disponibilidade de recursos e limites de quotas para o ACI.

Prerequisites

  • Azure CNI em modo node-subnet
  • Calico ou nenhum como política da rede
  • Identidade da carga de trabalho ativada
  • Pelo menos um pool de nós com um tamanho de VM de 4+ vCPUs e 16+ GiB de memória. Cada nó virtual reserva cerca de 3 vCPUs e 12 GiB de memória num nó AKS no teu cluster, por isso garante que os teus nós têm recursos suficientes.
  • K8S-Extensão versão 1.8 ou superior
  • kubectl 13h30 ou depois

Registe o fornecedor de recursos ACI:

az provider register --namespace Microsoft.ContainerInstance

Note

Execute o comando seguinte se encontrar um erro em qualquer fase do processo de ativação da extensão.

az provider register --namespace Microsoft.KubernetesConfig

Ativar 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 configurações de extensão

Criar e atualizar operações suportam as seguintes definições de configuração.

Definição de configuração Description
replicaCount Número de nós virtuais.
admissionControllerReplicaCount Número de cápsulas de controlo de admissão.
podAnnotations Anotações adicionadas aos pods de infraestrutura como um mapa-chave-valor.
nodeSelector Rótulos que selecionam os nós AKS que alojam a infraestrutura e os pods de controlo de admissão.
tolerations As tolerâncias aplicavam-se à infraestrutura e aos pods de controlo de admissão.
affinity Definições adicionais de afinidade foram fundidas com as regras de afinidade exigidas do AKS.
zones Zonas de disponibilidade delimitadas por ponto e vírgula onde os pods são implantados.
nodeLabels Etiquetas adicionadas aos nós virtuais como pares separados key=value por vírgulas.

As etiquetas permitidas 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>

Verifique se provisioningState é Succeeded. Pode ficar Pending durante alguns minutos.

Verifique se os pods de extensão estão a correr no vn-system namespace:

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 --auto-upgrade-mode parâmetro suporta none, patch, ou compatible. Para fixar uma versão específica de extensão usando --version, defina --auto-upgrade-mode para none.

Azure Container Registry access

Para extrair imagens de um Azure Container Registry privado (ACR), use a extensão managed identity ou um Kubernetes image pull secret.

Use a identidade gerida da extensão

Conceda o AcrPull papel à identidade gerida gerada para a extensão. Esta função concede a todos os pods que correm nos nós virtuais da extensão acesso a extrair imagens do registo sem configuração adicional de pods. Deve ter permissão para criar atribuições de funções no registo.

Obtenha o ID principal da identidade gerida 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 o ID do recurso do registo de contentores:

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

Atribuir o AcrPull papel à identidade gerida da extensão no âmbito do registo:

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

Espere vários minutos para que a atribuição de funções se propague antes de implementar cargas de trabalho que extraem imagens do registo.

Use um segredo de pull de imagem

Para instruções, consulte Kubernetes Pull Secret para Autenticação ACR.

Implementar uma carga de trabalho para os Nós Virtuais v2

Pods de agendamento em nós virtuais usando o virtualization: virtualnode2 seletor de nós 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

Guarda o manifesto como demo.yaml, e depois aplica-o.

kubectl apply -f demo.yaml

Verifica se os pods estão a funcionar.

kubectl get pods -l app=demo -o wide

Desativar Nós Virtuais v2

Warning

Quando desativa a extensão do nó virtual, o cluster AKS desliga-se dos grupos de contentores do Azure Container Instances de apoio. Para evitar instâncias órfãs que continuam a funcionar e a incorrer em custos, elimine quaisquer cargas de trabalho que estejam a correr no nó virtual antes de desativar a extensão.

Apaga a extensão e limpa os recursos virtuais do nó.

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

Passos seguintes