Se você tem um cluster Kubernetes autogerenciado em execução em um data center local (IDC) ou em instâncias ECS da Alibaba Cloud, implante um nó virtual (VNode) no cluster para usar o ECI. Este tópico descreve como configurar certificados e criar manualmente um VNode para seu cluster Kubernetes autogerenciado.
Pré-requisitos
Ter um cluster Kubernetes na versão 1,16 a 1,30.
-
Se o cluster Kubernetes estiver implantado em um data center local, garanta que a rede do data center esteja conectada à rede da Alibaba Cloud por meio do Express Connect, Smart Access Gateway (SAG) ou VPN Gateway. Para mais informações, consulte os seguintes tópicos:
Antes de começar
Antes de criar um VNode, reúna os parâmetros necessários e revise as permissões obrigatórias. A tabela a seguir descreve os parâmetros necessários.
|
Parâmetro |
Descrição |
Como obter |
|
region |
Uma região é um data center físico. Selecione uma região com base em fatores como sua localização, a localização dos usuários-alvo e os preços dos recursos. Para mais informações, consulte Regiões e zonas de disponibilidade. O ECI e seus recursos associados são criados na região selecionada. |
Encontre as regiões compatíveis com o ECI no console do Elastic Container Instance ou chame a operação DescribeRegions. |
|
VPC |
Uma VPC é uma rede privada personalizada criada na Alibaba Cloud. As VPCs são logicamente isoladas umas das outras. Para mais informações, consulte O que é uma VPC?. O ECI e seus recursos associados são criados na VPC configurada. Nota
Se o cluster Kubernetes estiver implantado em um data center local, certifique-se de que a rede do data center consiga alcançar esta VPC. |
Crie e visualize VPCs na página VPC do console VPC. |
|
vSwitch |
Um vSwitch é um dispositivo de rede básico em uma VPC que conecta diferentes recursos de nuvem. Ao criar o ECI e seus recursos associados em uma VPC, especifique um ou mais vSwitches; o sistema selecionará um automaticamente. |
Crie e visualize vSwitches na página vSwitch do console VPC. Selecione um vSwitch pertencente à VPC escolhida. |
|
security group |
Um grupo de segurança atua como firewall virtual que controla o tráfego de entrada e saída dos recursos no grupo, aumentando a segurança da rede. Para mais informações, consulte Visão geral de grupos de segurança. O ECI e seus recursos associados são adicionados ao grupo de segurança. Nota
Recomendamos usar um grupo de segurança empresarial com as seguintes regras de entrada:
|
Crie e visualize grupos de segurança na página Security Group do console ECS. Escolha um grupo de segurança pertencente à VPC selecionada. |
Ao criar um VNode, configure as permissões necessárias. Isso inclui as permissões padrão usadas por nós nativos do Kubernetes e permissões adicionais específicas para VNodes, conforme descrito na tabela a seguir.
|
Tipo |
Permissão |
Descrição |
|
Permissões padrão |
system:node |
Permissões padrão de nó. |
|
system:node-proxier |
Permissões padrão do kube-proxy. |
|
|
system:certificates.k8s.io:certificatesigningrequests:nodeclient |
Permite que um nó crie solicitações de assinatura de certificado (CSRs). |
|
|
system:certificates.k8s.io:certificatesigningrequests:selfnodeclient |
Permite que um nó solicite novos certificados com base em um certificado existente. Isso possibilita a rotação de certificados. |
|
|
Permissões adicionais |
pods update e pods patch |
Permite que o VNode atualize anotações de pods, por exemplo, para adicionar anotações computadas como |
|
pvc update e pvc patch |
Permite que o VNode atualize anotações de PersistentVolumeClaim (PVC). |
Configurar o cluster
Um VNode usa um arquivo kubeconfig para se conectar ao cluster. Portanto, emita um certificado (kubeconfig) para o VNode antes de criá-lo.
Se você usar o certificado de administrador do cluster, poderá pular esta seção.
Conecte-se ao cluster.
-
Baixe e execute o script de configuração. Escolha TLS bootstrapping ou ServiceAccount para gerar um arquivo kubeconfig.
TLS Bootstrap
Para maior segurança, recomendamos o TLS bootstrapping. Esse método implanta automaticamente o componente vnode-approver. Esse componente assina as CSRs enviadas pelos VNodes e é open source no GitHub. Para mais informações, consulte vnode-approver.
curl -fsSL https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnode-deploy.sh | bash -s -- bootstrapServiceAccount
Este método não oferece suporte à rotação de certificados. Garanta que o token tenha um longo período de validade ou que não expire. Isso evita que o VNode fique indisponível devido a um certificado expirado.
curl -fsSL https://eci-docs.oss-cn-beijing.aliyuncs.com/vnode/vnode-deploy.sh | bash -s -- common -
Verifique o arquivo kubeconfig.
O arquivo kubeconfig gerado recebe o nome vnode-config. Execute o comando a seguir para visualizar o arquivo:
cat vnode-configAo verificar o arquivo, valide os seguintes pontos:
-
Certifique-se de que a VPC onde o VNode será criado consegue alcançar o endereço do servidor (por exemplo, se estão na mesma VPC ou conectados via rede).
Se o endereço do servidor for um IP, ele deve ser acessível a partir da VPC do VNode.
Se o endereço do servidor for um nome de domínio, ele deve ser resolvido dentro da VPC da Alibaba Cloud, e o IP resultante deve ser acessível a partir da VPC do VNode.
Se o parâmetro
certificate-authority-dataestiver vazio, verifique se o campo correspondente no arquivo~/.kube/configusa um caminho de arquivo.
TLS Bootstrap
apiVersion: v1 kind: Config current-context: kubernetes-admin@kubernetes contexts: - name: kubernetes-admin@kubernetes context: cluster: kubernetes-admin@kubernetes user: vnode namespace: kube-system clusters: - name: kubernetes-admin@kubernetes cluster: certificate-authority-data: "*****************************************==" server: https://10.16.XX.XX:6443 users: - name: vnode user: token: ******.****************ServiceAccount
apiVersion: v1 kind: Config current-context: kubernetes-admin@kubernetes contexts: - name: kubernetes-admin@kubernetes context: cluster: kubernetes-admin@kubernetes user: vnode namespace: kube-system clusters: - name: kubernetes-admin@kubernetes cluster: certificate-authority-data: "*****************************************==" server: https://10.16.XX.XX:6443 users: - name: vnode user: token: *********************************************** -
Criar um VNode
Procedimento
Crie um VNode no console do Elastic Container Instance ou chame uma operação de API.
Console
Faça login no console do Elastic Container Instance.
Na barra de navegação superior, selecione uma região.
No painel de navegação à esquerda, escolha Virtual Node.
Clique em Create Virtual Node.
-
Configure os parâmetros e clique em OK.
A tabela a seguir descreve os parâmetros.
Parâmetro
Descrição
VPC, vSwitch, security group
A VPC, o vSwitch e o grupo de segurança para o VNode. Prepare esses recursos conforme descrito na seção Antes de começar.
KubeConfig
O kubeconfig do cluster Kubernetes ao qual o VNode se conecta. Gere este arquivo conforme descrito na seção Configurar o cluster.
TlsBootstrapEnabled
Define se o TLS bootstrapping será ativado.
Ative este parâmetro se você gerou o arquivo kubeconfig usando o método TLS bootstrap. Isso também habilita a rotação de certificados, permitindo que o VNode solicite automaticamente um novo certificado antes que o atual expire.
Tags
Tags para vincular ao VNode.
Use tags para alocação de custos. Após vincular uma tag personalizada ao VNode, use-a para filtrar os custos da instância do VNode durante a análise de custos. Para mais informações, consulte Visualizar faturas divididas com base em tags.
Taints
Taints a serem aplicadas ao VNode.
resource group
Um grupo de recursos permite agrupar recursos sob sua conta Alibaba Cloud. Cada conta possui um grupo de recursos padrão. Para mais informações, consulte Gerenciamento de Recursos.
Se nenhum grupo de recursos for especificado, o VNode será adicionado ao grupo de recursos padrão.
API
Chame a operação CreateVirtualNode para criar um VNode. A tabela a seguir descreve os principais parâmetros. Para mais informações, consulte CreateVirtualNode.
|
Nome |
Tipo |
Exemplo |
Descrição |
|
RegionId |
String |
cn-shanghai |
O ID da região. |
|
VSwitchId |
String |
vsw-2ze23nqzig8inprou**** |
O ID do vSwitch usado pelo VNode e suas instâncias ECI. Especifique de 1 a 10 vSwitches pertencentes à mesma VPC. |
|
SecurityGroupId |
String |
sg-2ze81zoc3yl7a3we**** |
O ID do grupo de segurança. O VNode e suas instâncias ECI são adicionados a este grupo de segurança. |
|
KubeConfig |
String |
JTVDbmFwaVZlcnNpb24lM0ElMjB2MSU1Q25jbHVzdGVycyUzQSU1Q24tJTIwY2x1c3RlciUzQSU1Q24uLi |
O kubeconfig para o cluster Kubernetes do VNode. O valor deve estar codificado em Base64. |
|
TlsBootstrapEnabled |
Boolean |
true |
Ative este parâmetro se você gerou o arquivo kubeconfig usando o método TLS bootstrap. Isso também habilita a rotação de certificados, permitindo que o VNode solicite automaticamente um novo certificado antes que o atual expire. |
Verificar o resultado
Após criar o VNode, aguarde alguns instantes. Em seguida, faça login no cluster Kubernetes e execute o comando kubectl get nodes para visualizar as informações do nó.
-
Se o VNode for encontrado, ele foi criado com sucesso. A saída esperada é semelhante à seguinte:
[root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION cn-beijing.vnd-2-xxx.sx61at Ready agent 132m v1.20.6 k8s-master Ready control-plane,master 169m v1.20.6 -
Se o VNode não for encontrado, a criação falhou. Recomendamos solucionar o problema com base nos eventos do VNode.
No console do Elastic Container Instance, acesse a página Virtual Node. Clique no ID do VNode desejado e visualize os eventos na aba Events.
A lista a seguir descreve erros comuns em eventos:
-
failed to get kubernetes server version, Get \"https://10.50.XX.XX:6443/version?timeout=32s\": net/http: request canceled (Client.Timeout exceeded while awaiting headersEsse erro indica que a VPC onde o VNode reside não consegue se conectar ao endereço IP do servidor de API do Kubernetes. Certifique-se de que o VNode e o servidor de API estejam na mesma VPC. Caso contrário, garanta que haja conectividade de rede entre eles.
-
failed to get kubernetes server version, Get \"https://lb.kubesphere.local:6443/version?timeout=32s\": dial tcp: lookup lb.kubesphere.local on 100.100.X.:53: no such hostEste erro indica que o nome de domínio do servidor de API do Kubernetes não pode ser resolvido na VPC. Configure o Alibaba Cloud DNS PrivateZone para adicionar um registro DNS para o nome de domínio.
-
Se tiver dúvidas ou problemas ao conectar um VNode a um cluster Kubernetes autogerenciado, procure pelo grupo 44666389 no DingTalk para entrar no grupo de suporte do VNode.
Impedir o agendamento de DaemonSet para um VNode
Um VNode é um nó virtual e não pode executar DaemonSets. Após criar um VNode, adicione uma nodeAffinity ao DaemonSet kube-proxy para evitar que DaemonSets sejam agendados para o VNode.
-
Edite a configuração do DaemonSet.
kubectl -n kube-system edit ds kube-proxy -
Configure a nodeAffinity.
Adicione o YAML a seguir em
spec.template.spec:affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: type operator: NotIn values: - virtual-kubelet
Agendar pods para um VNode
Depois de criar um VNode, use os métodos a seguir para agendar pods para execução como instâncias ECI no VNode.
-
Agendamento manual
Agende pods manualmente para um VNode configurando nodeSelector e tolerations, ou especificando um nodeName. Para mais informações, consulte Agendar pods para um VNode.
-
Agendamento automático
Após implantar o componente eci-profile, configure um seletor personalizado para agendar automaticamente os pods correspondentes para o VNode. Para mais informações, consulte Usar eci-profile para agendar pods para um VNode.