Todos os produtos
Search
Central de documentação

Elastic Container Instance:Integrar um VNode a um cluster Kubernetes auto-gerenciado no ECS

Última atualização: Jun 28, 2026

Implante um nó virtual (VNode) em seu cluster Kubernetes auto-gerenciado no ECS para agendar pods por meio do Elastic Container Instance (ECI) na mesma VPC.

Contexto

O ECI gerencia o agendamento de pods e os recursos na camada de infraestrutura, enquanto o Kubernetes cuida do gerenciamento de cargas de trabalho acima dessa camada. Adicione um VNode ao seu cluster auto-gerenciado no ECS para utilizar o ECI. O tópico Conectar um cluster Kubernetes auto-gerenciado ao ECI aborda todo o processo de integração.

Pré-requisitos

  • Um cluster Kubernetes auto-gerenciado (v1.13–1.30) no ECS, criado com kubeadm.

  • Plug-in de rede Flannel, Calico ou Cilium implantado no cluster.

Instalar o vnodectl

O ECI fornece o vnodectl para conectar e gerenciar VNodes. Recomendamos instalá-lo em um nó do plano de controle do seu cluster.

  1. Conecte-se ao seu cluster Kubernetes.

  2. Baixe o pacote do VNodectl.

    wget https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnodectl_0.0.5-beta_linux_amd64.tar.gz -O vnodectl.tar.gz
  3. Extraia o pacote.

    tar xvf vnodectl.tar.gz
  4. Mova o binário para um diretório no seu PATH.

    cp vnodectl /usr/local/bin/vnode

Configurar o arquivo ~/.vnode/config

  1. Modifique o arquivo ~/.vnode/config.

    vim ~/.vnode/config

    Adicione sua configuração. Exemplo:

    Importante
    • O kubeconfig requer permissões de cluster-admin. Alternativas com permissões limitadas são abordadas em Configurar o cluster.

    • O VNode deve conseguir acessar o endereço do servidor de API no kubeconfig.

    kind: vnode
    contexts:
        - name: default                                          # The name of the context.
          region-id: cn-hangzhou                                 # The region ID.
          access-key-id: <yourAccessKeyID>                       # The AccessKey ID.
          access-key-secret: <yourAccessKeySecret>               # The AccessKey secret.
          vswitch-id: vsw-7xv2yk45qp5etidgf****                  # The ID of the vSwitch to which the VNode belongs.
          security-group-id: sg-7xv5tcch4kjdr65t****             # The ID of the security group to which the VNode belongs.
          kubeconfig: /path/to/kubeconfig                        # The path to the cluster's kubeconfig file.
    current-context: default
  2. Defina o contexto ativo.

    vnode config set-context <context-name>

Criar um VNode

  1. Crie um VNode.

    vnode create

    A saída inclui o VirtualNodeId:

    {"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"}
  2. Verifique o nó.

    kubectl get node

    O VNode aparece com STATUS Ready:

    NAME                                    STATUS     ROLES                  AGE    VERSION
    cn-hangzhou.vnd-7xvetkyase7gb62u****    Ready      agent                  174m   v1.20.6
    vnode-test001                           Ready      control-plane,master   23h    v1.20.6
    vnode-test002                           Ready      <none>                 22h    v1.20.6

Impedir o agendamento de DaemonSet em um VNode

Como o VNode é um nó virtual, ele não pode executar DaemonSets. Após criar um VNode, adicione uma nodeAffinity ao DaemonSet kube-proxy para evitar que DaemonSets sejam agendados nesse VNode.

  1. Edite a configuração do DaemonSet.

    kubectl -n kube-system edit ds kube-proxy
  2. Configure a nodeAffinity.

    Adicione o seguinte YAML em spec.template.spec:

    affinity:
      nodeAffinity:
        requiredDuringSchedulingIgnoredDuringExecution:
          nodeSelectorTerms:
          - matchExpressions:
            - key: type
              operator: NotIn
              values:
              - virtual-kubelet

Agendar pods em um VNode

Após criar um VNode, utilize os métodos abaixo para agendar pods e executá-los como instâncias do ECI no VNode.

  • Agendamento manual

    Para agendar pods manualmente em um VNode, configure nodeSelector e tolerations ou especifique um nodeName. Para mais informações, consulte Agendar pods em um VNode.

  • Agendamento automático

    Ao implantar o componente eci-profile, configure um seletor personalizado para agendar automaticamente os pods correspondentes no VNode. Para mais informações, consulte Usar eci-profile para agendar pods em um VNode.

Estabelecer conectividade de rede dos pods

Os pods no VNode recebem uma ENI e um endereço IP interno do vSwitch da VPC.

Por padrão, os pods do VNode não conseguem alcançar os pods na rede de sobreposição do cluster (Flannel, Calico ou Cilium), embora o caminho inverso funcione. Adicione uma entrada de rota na tabela de rotas da VPC para direcionar o tráfego de saída dos pods do VNode aos nós ECS corretos.

Exemplo de configuração de rota:

  • Cenário de exemplo

    Neste exemplo, test1 executa no VNode e test2 em um nó ECS. Por padrão, test2 consegue alcançar test1, mas não o contrário.

    NAME      READY     RESTARTS    AGE    IP                NODE                                   NOMINATED NODE   READINESS NODE
    test1     1/1       0           58s    192.168.0.245     cn-hangzhou.vnd-7xvetkyase7gb62u****   <none>           <none>
    test2     1/1       0           35s    10.88.1.4         vnode-test002                          <none>           <none>
  • Procedimento

    1. Faça login no console da VPC.

    2. No painel de navegação à esquerda, clique em Route Tables.

    3. Mude para a região do seu cluster, localize a tabela de rotas da VPC e clique no respectivo ID.

    4. Na aba Route Entry List, clique na aba Custom Route.

    5. Clique em Add Route Entry.

    6. No painel Add route entry, configure a entrada de rota e clique em OK.

      Exemplo de configuração:

      • Destination CIDR Block: Insira o bloco CIDR dos pods no nó ECS de destino, como 10.88.1.0/24.

      • Next Hop Type: Selecione ECS Instance.

      • ECS Instance: Selecione o nó ECS de destino.

  • Verificar o resultado

    Execute kubectl exec para abrir um shell no test1 e faça ping no test2. Uma resposta bem-sucedida confirma que o test1 agora consegue alcançar o test2.

Documentos relacionados