O VNodectl é uma ferramenta de CLI para implantar e gerenciar VNodes em clusters Kubernetes autogerenciados. Após a implantação do VNode, os pods agendados nele são executados como elastic container instances baseadas no Elastic Container Instance, sem necessidade de alterações no cluster existente.
Limitações
VNodes não são nós reais. DaemonSets não podem ser executados em VNodes. Após criar um VNode, configure
nodeAffinityno kube-proxy para impedir o agendamento de pods do DaemonSet nesse nó. Consulte Impedir o agendamento de DaemonSets no VNode.O modo de autenticação ServiceAccount não oferece suporte à rotação de certificados. Se você utilizar esse modo, garanta que o token tenha validade suficientemente longa para evitar falhas no VNode.
Pré-requisitos
Antes de começar, verifique se você possui os seguintes itens:
Um cluster Kubernetes nas versões 1,16 a 1,30.
Se o cluster for executado em um data center: conectividade de rede entre o data center e a Virtual Private Cloud (VPC) onde os pods baseados no Elastic Container Instance serão executados. Opções suportadas: Express Connect, Smart Access Gateway (SAG) ou VPN Gateway.
-
Os seguintes IDs de recursos e credenciais:
Recurso
Como obter
ID da região
Verifique as regiões disponíveis em Regiões e zonas, consulte o console do Elastic Container Instance ou use a API DescribeRegions.
ID da VPC
Crie ou visualize VPCs na página VPCs do console da VPC.
ID do vSwitch
Crie ou visualize vSwitches na página vSwitch do console da VPC. Selecione um vSwitch na mesma VPC.
ID do grupo de segurança
Crie ou visualize grupos de segurança na página Security Groups do console do ECS. Selecione um grupo de segurança na mesma VPC.
AccessKey ID e AccessKey secret
Consulte Criar um par de AccessKey.
Utilize um grupo de segurança avançado e adicione as seguintes regras de entrada:
Todas as portas 1–65535 dos blocos CIDR da VPC
Portas 10250 e 10255 do endpoint do servidor de API do Kubernetes
As seguintes permissões são necessárias para criar um VNode:
|
Tipo |
Permissão |
Descrição |
|
Padrão |
|
Permissões padrão de nó |
|
Padrão |
|
Permissões padrão do kube-proxy |
|
Padrão |
|
Permite que os nós solicitem a criação de certificados |
|
Padrão |
|
Permite que os nós realizem a rotação de certificados |
|
Adicional |
|
Atualiza anotações de pods, como |
|
Adicional |
|
Atualiza anotações de PersistentVolumeClaim (PVC) |
Instale o VNodectl
Instale o VNodectl no nó mestre do seu cluster Kubernetes.
Baixe o pacote correspondente ao seu sistema operacional e arquitetura de CPU:
| Sistema operacional | Arquitetura de CPU | Download |
|---|---|---|
| macOS | AMD64 | macOS_AMD64 |
| ARM64 | macOS_ARM64 | |
| Linux | AMD64 | Linux_AMD64 |
| ARM64 | Linux_ARM64 | |
| Windows | AMD64 | Windows_AMD64 |
| ARM64 | Windows_ARM64 |
Os exemplos a seguir utilizam Linux AMD64:
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
Adicione--drya qualquer comandovnodepara executar uma validação no lado do cliente sem aplicar alterações. Se ocorrer um erro de compatibilidade de versão da API, adicione--kubernetes-versionpara especificar a versão do Kubernetes do seu cluster.
Configure o cluster
Antes de criar um VNode, gere um certificado kubeconfig para ele. O VNodectl suporta dois modos de autenticação:
|
Modo |
Quando usar |
|
TLS Bootstrap |
Recomendado quando há requisitos de segurança. Implanta automaticamente o vnode-approver para aprovar solicitações de assinatura de certificado (CSRs) dos VNodes. Suporta rotação de certificados. |
|
ServiceAccount |
Não suporta rotação de certificados — certifique-se de que o token tenha validade permanente ou suficientemente longa. |
TLS Bootstrap
-
Prepare as seguintes informações do cluster:
Parâmetro Descrição Como obter Exemplo kubeconfigKubeconfig de administrador usado para conceder permissões de implantação Caminho padrão: ~/.kube/config/path/to/kubeconfigcluster-ca-pathAutoridade certificadora (CA) usada para gerar o kubeconfig do VNode Execute ps aux | grep apiservere obtenha o valor de--client-ca-file/path/to/ca.crtapiserver-addressEndpoint do servidor de API para comunicação do cluster Obtenha no seu kubeconfig https://8.134.XX.XX:6443bootstrap-token-idParte do token de bootstrap TLS Escolha uma string alfanumérica de 6 caracteres eci123bootstrap-token-secretEscolha uma string alfanumérica de 16 caracteres eci1233333333333 -
Implante o vnode-approver para aprovar automaticamente as CSRs dos VNodes.
vnode addon enable vnode-approverPara obter o código-fonte, consulte vnode-approver no GitHub.
-
Execute o comando de configuração do cluster. Substitua os valores de espaço reservado pelas informações reais do seu cluster.
vnode cluster setup \ --kubeconfig /path/to/kubeconfig \ --bootstrap \ --bootstrap-token-id <token-id> \ --bootstrap-token-secret <token-secret> \ --apiserver-address https://8.134.XX.XX:6443 \ --cluster-ca-path /path/to/ca.crt -
Valide a configuração.
vnode cluster validateA saída esperada é:
kubeconfig can't be emptyPor padrão, o certificado kubeconfig é salvo em
~/.vnode/deploy/kubeconfig.
ServiceAccount
-
Prepare as seguintes informações do cluster:
Parâmetro
Descrição
Como obter
Exemplo
kubeconfigKubeconfig de administrador usado para conceder permissões de implantação
Caminho padrão:
~/.kube/config/path/to/kubeconfigcluster-ca-pathCA usada para gerar o kubeconfig do VNode
Execute
`ps auxgrep apiserver` e obtenha o valor de
--client-ca-file/path/to/ca.crtapiserver-addressEndpoint do servidor de API para comunicação do cluster
Obtenha no seu kubeconfig
https://8.134.XX.XX:6443 -
Execute o comando de configuração do cluster. Substitua os valores de espaço reservado pelas informações reais do seu cluster.
vnode cluster setup \ --kubeconfig /path/to/kubeconfig \ --apiserver-address https://8.134.XX.XX:6443 \ --cluster-ca-path /path/to/ca.crt -
Valide a configuração.
vnode cluster validateA saída esperada é:
kubeconfig can't be emptyPor padrão, o certificado kubeconfig é salvo em
~/.vnode/deploy/kubeconfig.
Configure o arquivo ~/.vnode/config
O arquivo ~/.vnode/config armazena a configuração lida pelo VNodectl durante a execução. Configure-o antes de criar um VNode.
-
Gere o modelo de configuração padrão.
Parâmetro Obrigatório Descrição nameSim Nome do contexto vnode-nameNão Nome do VNode. Deixe em branco para permitir que o sistema gere um nome exclusivo. region-idSim ID da região onde o VNode será executado. Consulte a seção de Pré-requisitos para detalhes. access-key-idSim Seu AccessKey ID para autenticação na API. Consulte Criar um par de AccessKey. access-key-secretSim vswitch-idSim ID do vSwitch para o VNode. Especifique vários IDs para ativar a seleção automática de vSwitch. security-group-idSim ID do grupo de segurança para o VNode. resource-group-idNão Grupo de recursos para o VNode. O padrão é o grupo de recursos padrão da conta. Consulte O que é o Resource Management? kubeconfigSim Caminho para o kubeconfig gerado na etapa anterior. Padrão: ~/.vnode/deploy/kubeconfigtaintsNão Taints a serem vinculados ao VNode. tagsNão Tags para divisão de faturamento. Após vincular uma tag personalizada, filtre as cobranças por tag na visualização de análise de taxas. Consulte Visualizar contas divididas com base em tags. network-typeNão Tipo de rede para o serviço de controle do Elastic Container Instance. Deixe em branco para acesso via internet; defina como vpcpara acesso via VPC.vnode config defaultA tabela a seguir descreve os parâmetros na seção
contexts. -
Grave o modelo em
~/.vnode/confige edite-o.vnode config default > ~/.vnode/config vim ~/.vnode/configO exemplo abaixo mostra uma configuração mínima apenas com os parâmetros obrigatórios:
kind: vnode contexts: - name: default region-id: cn-guangzhou access-key-id: <yourAccessKeyID> access-key-secret: <yourAccessKeySecret> vswitch-id: vsw-7xv2yk45qp5etidgf**** security-group-id: sg-7xv5tcch4kjdr65t**** kubeconfig: ~/.vnode/deploy/kubeconfig current-context: default -
Verifique se o VNodectl lê a configuração corretamente.
vnode config -
Se houver múltiplos contextos, alterne para aquele que deseja utilizar.
vnode config set-context <context-name>
Crie um VNode
-
Crie o VNode.
vnode createO VNode é criado com base no arquivo
~/.vnode/config. Para configurarcustomResources,clusterDNSouclusterDomain, consulte Gerenciar VNodes. A saída esperada inclui o ID do VNode:{"RequestId":"AB772F9D-2FEF-5BFD-AAFB-DA3444851F29","VirtualNodeId":"vnd-7xvetkyase7gb62u****"} -
Verifique o status do VNode.
vnode listQuando
STATUSexibirReady, o VNode estará em execução:VNODE ID VNODE NAME CREATED STATUS SCHEDULABLE ZONES vnd-7xvetkyase7gb62u**** vnode-cn-guangzhou-a-7xvetkyase7gb62u**** 2 minutes ago Ready cn-guangzhou-a -
Confirme se o VNode aparece no cluster.
kubectl get nodeO VNode é listado como um nó
agent:NAME STATUS ROLES AGE VERSION cn-guangzhou.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
Impeça o agendamento de DaemonSets no VNode
Como VNodes não são nós reais, pods do DaemonSet não podem ser executados neles. Configure nodeAffinity no kube-proxy para excluir o VNode.
-
Edite o DaemonSet do kube-proxy.
kubectl -n kube-system edit ds kube-proxy -
Adicione o seguinte bloco
nodeAffinityemspec.template.spec.affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: type operator: NotIn values: - virtual-kubelet
Agende pods no VNode
Após a criação do VNode, agende pods nele utilizando um dos métodos abaixo:
Agendamento manual: Configure
nodeSelectoretolerations, ou definanodeNamena especificação do pod. Consulte Agendar pods em um VNode.Agendamento automático: Implante o componente eci-profile e especifique um
Selector. O sistema agenda automaticamente os pods correspondentes no VNode. Consulte Usar eci-profile para agendar pods em um VNode.