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.
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
Configure o arquivo ~/.vnode/config
-
Modifique o arquivo
~/.vnode/config.vim ~/.vnode/configAdicione sua configuração. Exemplo:
ImportanteO 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 -
Agora, defina o contexto ativo.
vnode config set-context <context-name>
Crie um VNode
-
Agora, crie um VNode.
vnode createA saída inclui o VirtualNodeId:
{"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"} -
Em seguida, verifique o nó.
kubectl get nodeO 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.
-
Primeiro, edite a configuração do DaemonSet.
kubectl -n kube-system edit ds kube-proxy -
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
Acesse o console da VPC.
No painel de navegação à esquerda, clique em Route Tables.
Selecione a região do seu cluster, encontre a tabela de rotas da VPC e clique em seu ID.
Na guia Route Entry List, clique na guia 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 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 execpara 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
Para se conectar sem o VNodectl, use o console ou a OpenAPI. Connect to VNode (Manually).