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.
Conecte-se ao seu cluster Kubernetes.
-
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 -
Extraia o pacote.
tar xvf vnodectl.tar.gz -
Mova o binário para um diretório no seu PATH.
cp vnodectl /usr/local/bin/vnode
Configurar o arquivo ~/.vnode/config
-
Modifique o arquivo
~/.vnode/config.vim ~/.vnode/configAdicione sua configuração. Exemplo:
ImportanteO 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 -
Defina o contexto ativo.
vnode config set-context <context-name>
Criar um VNode
-
Crie um VNode.
vnode createA saída inclui o VirtualNodeId:
{"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"} -
Verifique o nó.
kubectl get nodeO 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.
-
Edite a configuração do DaemonSet.
kubectl -n kube-system edit ds kube-proxy -
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
Faça login no console da VPC.
No painel de navegação à esquerda, clique em Route Tables.
Mude para a região do seu cluster, localize a tabela de rotas da VPC e clique no respectivo ID.
Na aba Route Entry List, clique na aba Custom Route.
Clique em Add Route Entry.
-
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 execpara 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
Para conectar sem o VNodectl, use o console ou a OpenAPI. Consulte Conectar ao VNode (Manualmente).