Todos os produtos
Search
Central de documentação

Elastic Container Instance:Integrate a VNode with a self-managed Kubernetes cluster on ECS

Última atualização: Sep 21, 2026

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

Contexto

O ECI gerencia o agendamento e os recursos dos pods na camada de infraestrutura, enquanto o Kubernetes gerencia as cargas de trabalho na camada superior. Adicione um VNode ao seu cluster autogerenciado no ECS para usar o ECI. Connect a self-managed Kubernetes cluster to ECI aborda todo o processo de integração.

Pré-requisitos

  • Um cluster Kubernetes autogerenciado (v1.13–1.30) no ECS, criado com o kubeadm.

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

Instale o vnodectl

O ECI fornece o vnodectl para conectar e gerencie 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

Configure 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. Para alternativas com permissões limitadas, consulte Configure the cluster.

    • O VNode deve ter acesso ao 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. Agora, defina o contexto ativo.

    vnode config set-context <context-name>

Crie um VNode

  1. Agora, crie um VNode.

    vnode create

    A saída inclui o VirtualNodeId:

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

    kubectl get node

    O VNode aparece com o 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 DaemonSets em um VNode

Um VNode é um nó virtual e não pode executar DaemonSets. Após criar um VNode, adicione um nodeAffinity ao DaemonSet kube-proxy para impedir o agendamento de DaemonSets no VNode.

  1. Primeiro, edite a configuração do DaemonSet.

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

    Adicione o seguinte YAML a 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, use os seguintes métodos para agendar pods como instâncias do ECI no VNode.

  • Agendamento manual

    Agende pods manualmente em um VNode ao configurar o nodeSelector e as tolerations ou ao especificar um nodeName. Para mais informações, consulte Schedule pods to a VNode.

  • Agendamento automático

    Após implantar o componente eci-profile, configure um seletor personalizado para agendar automaticamente os pods correspondentes no VNode. Para mais informações, consulte Use eci-profile to schedule pods to a VNode.

Estabelecer a 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 acessam os pods na rede de sobreposição do cluster (Flannel, Calico ou Cilium), embora o caminho inverso funcione. Adicione uma entrada de rota à tabela de rotas da VPC para direcionar o tráfego de saída dos pods do VNode para os nós ECS corretos.

Exemplo de configuração de rota:

  • Cenário de exemplo

    Neste exemplo, o test1 está em execução no VNode e o test2 em um nó ECS. Por padrão, o test2 consegue acessar o 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. Acesse o console da VPC.

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

    3. Selecione a região do seu cluster, encontre a tabela de rotas da VPC e clique em seu ID.

    4. Na guia Route Entry List, clique na guia 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 para os 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.

  • Verifique o resultado

    Agora execute kubectl exec para abrir um shell no test1 e envie um ping para o test2. Uma resposta bem-sucedida confirma que o test1 agora consegue acessar o test2.

Documentos relacionados