Todos os produtos
Search
Central de documentação

:Schedule pods to run on elastic container instances through virtual nodes

Última atualização: Jun 29, 2026

Ao usar clusters do Container Service for Kubernetes (ACK), talvez seja necessário iniciar muitos pods rapidamente. O dimensionamento horizontal de nós do Elastic Compute Service (ECS) para esses pods é demorado, e manter instâncias ECS ociosas reservadas desperdiça recursos. Uma solução mais eficiente é agendar pods para execução em instâncias de contêiner elásticas por meio de nós virtuais do ACK. Assim, você não precisa adquirir ou gerenciar instâncias ECS. Este tópico descreve como agendar pods para instâncias de contêiner elásticas em clusters registrados do ACK One.

Como funciona

O Elastic Container Instance é um serviço de computação serverless da Alibaba Cloud para containerização. Ele oferece um ambiente de execução isolado, de implantação rápida e livre de operações e manutenção para seus contêineres. As instâncias de contêiner elásticas permitem que você se concentre nas aplicações containerizadas sem precisar adquirir ou gerenciar instâncias ECS. Crie instâncias de contêiner elásticas conforme a necessidade e pague pelo uso de recursos por segundo.

Geralmente, seu cluster possui pelo menos um grupo de nós de data center. Após a criação dos pods, o cluster os agenda para execução nos nós. Esse modo de agendamento é adequado para aplicações com volume de tráfego estável. Se sua carga de trabalho apresentar picos repentinos ou imprevisíveis, use nós virtuais para agendar pods diretamente em instâncias de contêiner elásticas. Essa solução elimina o tempo de criação de nós e evita custos com recursos ociosos.

image

Pré-requisitos

  • Um cluster registrado foi criado e um cluster autogerenciado com versão do Kubernetes 1.14 ou posterior está conectado ao cluster registrado.

  • A região onde o cluster está implantado deve ser compatível com o Elastic Container Instance. Para visualizar as regiões e zonas suportadas, faça login no console do Elastic Container Instance. Para mais informações sobre regiões e zonas suportadas, consulte Regiões e zonas.

Etapa 1: Conceder permissões do RAM ao ack-virtual-node

Usar onectl

  1. Instale e configure o onectl em sua máquina local. Para mais informações, consulte Gerenciar clusters registrados usando onectl.

  2. Execute o comando a seguir para conceder permissões do Resource Access Management (RAM) ao ack-virtual-node:

    onectl ram-user grant --addon ack-virtual-node

    Saída esperada:

    Ram policy ack-one-registered-cluster-policy-ack-virtual-node granted to ram user ack-one-user-ce313528c3 successfully.

Usar o console

Antes de instalar o componente em um cluster registrado, especifique um par de AccessKey no cluster Kubernetes autogerenciado. Esse par é necessário para acessar serviços da Alibaba Cloud a partir do cluster autogerenciado. Antes de definir o par de AccessKey, crie um usuário do RAM e conceda a ele as permissões necessárias para acessar recursos da Alibaba Cloud.

  1. Crie um usuário do RAM.

  2. Opcional: Crie uma política personalizada.

    Show sample code

    {
        "Version": "1",
        "Statement": [
            {
                "Action": [
                    "vpc:DescribeVSwitches",
                    "vpc:DescribeVpcs"
                ],
                "Resource": "*",
                "Effect": "Allow"
            },
            {
                "Action": [
                    "eci:CreateContainerGroup",
                    "eci:DeleteContainerGroup",
                    "eci:DescribeContainerGroups",
                    "eci:DescribeContainerGroupStatus",
                    "eci:DescribeContainerGroupEvents",
                    "eci:DescribeContainerLog",
                    "eci:UpdateContainerGroup",
                    "eci:UpdateContainerGroupByTemplate",
                    "eci:CreateContainerGroupFromTemplate",
                    "eci:RestartContainerGroup",
                    "eci:ExportContainerGroupTemplate",
                    "eci:DescribeContainerGroupMetric",
                    "eci:DescribeMultiContainerGroupMetric",
                    "eci:ExecContainerCommand",
                    "eci:CreateImageCache",
                    "eci:DescribeImageCaches",
                    "eci:DeleteImageCache",
                    "eci:DescribeContainerGroupMetaInfos",
                    "eci:UpdateImageCache",
                    "eci:RestartContainer",
                    "eci:RestartContainers"
                ],
                "Resource": [
                    "*"
                ],
                "Effect": "Allow"
            },
            {
                "Action": [
                    "acc:DescribeZones",
                    "acc:CreateInstance",
                    "acc:UpdateInstance",
                    "acc:DeleteInstance",
                    "acc:RestartInstance",
                    "acc:DescribeInstances",
                    "acc:DescribeInstanceStatus",
                    "acc:DescribeInstanceEvents",
                    "acc:DescribeInstanceDetail",
                    "acc:DescribeMultiInstanceMetric",
                    "acc:DescribeContainerLog",
                    "acc:ResizeInstanceVolume",
                    "acc:CreateCustomResource",
                    "acc:UpdateCustomResource",
                    "acc:DeleteCustomResource",
                    "acc:DescribeCustomResources",
                    "acc:DescribeCustomResourceDetail"
                ],
                "Resource": "*",
                "Effect": "Allow"
            }
        ]
    }
  3. Anexe uma política ao usuário do RAM.

    Conceda permissões aos usuários do RAM adicionando políticas de sistema, como AliyunECIFullAccess, AliyunVPCReadOnlyAccess e AliyunAccFullAccess, ou políticas de permissão personalizadas.

  4. Crie um par de AccessKey para o usuário do RAM.

    Aviso

    Recomendamos que você configure políticas baseadas em par de AccessKey para controle de acesso à rede, limitando as fontes de invocação do AccessKey a ambientes de rede confiáveis para aumentar a segurança.

  5. Utilize o par de AccessKey para criar um Secret chamado alibaba-addon-secret no cluster registrado.

    O sistema usa automaticamente o par de AccessKey para acessar recursos na nuvem durante a instalação do ack-virtual-node.

    kubectl -n kube-system create secret generic alibaba-addon-secret --from-literal='access-key-id=<your access key id>' --from-literal='access-key-secret=<your access key secret>'
    Nota

    Substitua <your access key id> e <your access key secret> pelo par de AccessKey obtido na etapa anterior.

Etapa 2: Instalar o ack-virtual-node

Usar onectl

Execute o comando a seguir para instalar o ack-virtual-node:

onectl addon install ack-virtual-node

Saída esperada:

Addon ack-virtual-node, version **** installed.

Usar o console

  1. Faça login no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Components and Add-ons.

  3. Na página Add-ons, localize o ack-virtual-node e clique em Install.

    Na caixa de diálogo Note, clique em OK. O vSwitch e o grupo de segurança padrão do cluster serão utilizados pelas instâncias de contêiner elásticas implantadas pelo ack-virtual-node. Para mais informações, consulte Próximos passos.

Etapa 3: Agendar pods para instâncias de contêiner elásticas

Após a implantação do ack-virtual-node no cluster, agende pods para instâncias de contêiner elásticas configuradas como nós virtuais. Utilize um dos métodos abaixo para agendar pods em um cluster registrado. Certifique-se de que os nós virtuais estejam no estado Ready antes de prosseguir.

  1. Execute o comando a seguir para consultar o status do nó virtual:

    kubectl  get no |grep virtual-kubelet

    Saída esperada:

    virtual-kubelet-cn-hangzhou-b   Ready    agent                  18d   v1.20.11-aliyun.1

    A saída indica que o nó virtual está no estado Ready.

  2. Escolha um dos três métodos a seguir para agendar pods em instâncias de contêiner elásticas.

    Method 1: Add labels to pods (versão do cluster superior a 1,16)

    Adicione o rótulo alibabacloud.com/eci=true ao pod que deseja criar. Um pod baseado em Elastic Container Instance será criado e agendado para o nó virtual. Exemplo:

    1. Execute o comando a seguir para adicionar um rótulo ao pod:

    2. kubectl run nginx --image nginx -l alibabacloud.com/eci=true
    3. Execute o comando a seguir para consultar o pod:

    4. kubectl get pod -o wide|grep virtual-kubelet
    5. Saída esperada:

    6. nginx-7fc9f746b6-r4xgx     0/1     ContainerCreating   0          20s   192.168.XX.XX   virtual-kubelet        <none>           <none>

    Method 2: Add labels to namespaces

    Adicione o rótulo alibabacloud.com/eci=true ao namespace ao qual o pod pertence. Um pod baseado em Elastic Container Instance será criado e agendado para o nó virtual. Exemplo:

    1. Execute o comando a seguir para criar um namespace:

    2. kubectl create ns vk
    3. Execute o comando a seguir para adicionar um rótulo ao namespace do pod:

    4. kubectl label namespace vk alibabacloud.com/eci=true
    5. Execute o comando a seguir para agendar o pod no nó virtual:

    6. kubectl -n vk run nginx --image nginx
    7. Execute o comando a seguir para consultar o pod:

    8. kubectl -n vk get pod -o wide|grep virtual-kubelet
    9. Saída esperada:

    10. nginx-6f489b847d-vgj4d      1/1     Running             0          1m   192.168.XX.XX   virtual-kubelet        <none>           <none>

    Método 3: Especificar nomes de nós

    Agende apenas pods específicos para nós virtuais. Adicione o campo nodeName: virtual-kubelet-cn-shanghai-k ao pod. Um pod baseado em Elastic Container Instance será criado e agendado para um nó virtual. Exemplo:

    1. Crie um arquivo chamado nginx-deployment.yaml e copie o conteúdo a seguir para o arquivo:

      apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
      kind: Deployment
      metadata:
        name: nginx-deployment-basic
        labels:
          app: nginx
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: nginx
        template:
          metadata:
            labels:
              app: nginx
          spec:
            nodeName: virtual-kubelet-cn-shanghai-k             # nodeName of the specified virtual kubelet
            containers:
            - name: nginx
              image: nginx:1.7.9 # replace it with your exactly <image_name:tags>
              ports:
              - containerPort: 80
              resources:
                limits:
                  cpu: "500m"
    2. Execute o comando a seguir para implantar a aplicação:

      kubectl apply -f nginx-deployment.yaml
    3. Execute o comando a seguir para consultar o pod:

      kubectl  get pod -o wide|grep virtual-kubelet
    4. Saída esperada:

      nginx-6f489b847d-XXX      1/1     Running             0          1m   192.168.XX.XX   virtual-kubelet        <none>           <none>
      nginx-6f489b847d-XXX      1/1     Running             0          1m   192.168.XX.XX   virtual-kubelet        <none>           <none>

Próximos passos

Modificar as configurações do vSwitch conectado a uma instância de contêiner elástica

Modifique a variável de ambiente ECI_VSWITCH para alterar o vSwitch dos pods agendados para o nó virtual. Recomendamos configurar múltiplos vSwitches em zonas diferentes para garantir alta disponibilidade. Quando as instâncias de contêiner elásticas na zona atual estiverem esgotadas, o controlador de nó virtual criará pods em outra zona.

Execute o comando a seguir para modificar as configurações do vSwitch conectado a uma instância de contêiner elástica:

kubectl edit configmap eci-profile -n kube-system

Exemplo de configuração:

data:
  enableClusterIp: "true"
  enableHybridMode: "false"
  enablePrivateZone: "false"
  securityGroupId: sg-2zeeyaaxlkq9sppl****
  selectors: ""
  vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****     # the vSwitch to which an elastic container instance pod is connected. Separate multiple vSwitch IDs with commas (,).
  vpcId: vpc-2zeghwzptn5zii0w7****

Para mais informações sobre como configurar um eci-profile, consulte Configurar eci-profile.

Delete a virtual node

  1. Desinstale o ack-virtual-node do cluster registrado.

    Usar onectl

    Execute o comando a seguir para desinstalar o ack-virtual-node:

    onectl addon uninstall ack-virtual-node

    Saída esperada:

    Addon ack-virtual-node uninstalled.

    Usar o console

    Acesse a página Add-ons no console do ACK e desinstale o ack-virtual-node.

  2. Execute o comando kubectl delete node <node name> para excluir os nós virtuais desnecessários.

    Nota

    Após desinstalar o ack-virtual-node, as instâncias de contêiner elásticas existentes no cluster não são excluídas.