Um cluster híbrido conecta seu cluster Kubernetes autogerenciado on-premises à Alibaba Cloud por meio de um cluster registrado. Esse recurso permite dimensionar o cluster local com nós do Elastic Compute Service (ECS) baseados em nuvem e gerenciar ambos os ambientes a partir de um único plano de controle.
Este guia usa como exemplo um cluster de data center que executa o Calico no modo route reflector. Na nuvem, o Container Service for Kubernetes (ACK) da Alibaba Cloud utiliza o plugin Terway para a rede de contêineres.
Pré-requisitos
Antes de começar, verifique se você tem:
Conectividade de rede entre o cluster on-premises e a Virtual Private Cloud (VPC) usada pelo cluster registrado. Essa conectividade deve abranger tanto a rede dos nós de computação quanto a rede de contêineres. Use a Cloud Enterprise Network (CEN) para estabelecer essa conexão. Para mais detalhes, consulte Estabelecer conexões multi-VPC em diferentes cenários.
A conectividade de rede entre o ambiente on-premises e a VPC é o requisito fundamental. Sem essa configuração, as etapas subsequentes não terão êxito.
Cluster on-premises conectado ao cluster registrado mediante a configuração do agente de importação de cluster privado fornecida pelo cluster registrado.
Nós de computação baseados em nuvem adicionados por meio do cluster registrado com acesso ao API Server do cluster on-premises.
Conexão kubectl com o cluster registrado. Consulte Obter o arquivo kubeconfig de um cluster e usar kubectl para conectar-se ao cluster.
Arquitetura do cluster híbrido
Em um cluster híbrido, o Calico roda on-premises e o Terway roda na nuvem. Os dois plugins de rede não devem interferir entre si: os pods do Calico permanecem nos nós on-premises, enquanto os pods do Terway rodam apenas nos nós ECS baseados em nuvem.
O diagrama a seguir ilustra a topologia de rede deste exemplo.
On-premises (data center):
Bloco CIDR privado:
192.168.0.0/24Bloco CIDR da rede de contêineres:
10.100.0.0/16Plugin de rede: Calico (modo route reflector)
Na nuvem:
Bloco CIDR da VPC:
10.0.0.0/8Bloco CIDR do vSwitch para nós de computação:
10.10.24.0/24Bloco CIDR do vSwitch para pods:
10.10.25.0/24Plugin de rede: Terway (modo compartilhado)
Certifique-se de que o bloco CIDR da rede de contêineres on-premises (10.100.0.0/16) não se sobreponha ao bloco CIDR da VPC (10.0.0.0/8).
Configure o cluster híbrido
A configuração envolve sete etapas:
Restringir o Calico aos nós on-premises
Conceder permissões RAM ao Terway
Instale o Terway
Verifique o DaemonSet do Terway
Configure o ConfigMap ENI do Terway
Crie um script personalizado de inicialização de nó
Crie um pool de nós e adicione nós ECS
Etapa 1: Restringir o Calico aos nós on-premises
Os nós ECS baseados em nuvem adicionados a um cluster ACK registrado recebem automaticamente o rótulo alibabacloud.com/external=true. Configure nodeAffinity no DaemonSet do Calico para garantir que os pods do Calico rodem apenas em nós on-premises (nós sem esse rótulo).
cat <<EOF > calico-ds.patch
spec:
template:
spec:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: alibabacloud.com/external
operator: NotIn
values:
- "true"
- key: type
operator: NotIn
values:
- "virtual-kubelet"
EOF
kubectl -n kube-system patch ds calico-node -p "$(cat calico-ds.patch)"
Etapa 2: Conceder permissões RAM ao Terway
O Terway requer permissões do Resource Access Management (RAM) para gerencie elastic network interfaces (ENIs) nos nós ECS.
Opção A: Usar onectl (recomendado)
Instale e configure o onectl. Consulte Gerencie clusters registrados usando onectl.
-
Execute o comando:
onectl ram-user grant --addon terway-eniipSaída esperada:
Ram policy ack-one-registered-cluster-policy-terway-eniip granted to ram user ack-one-user-ce313528c3 successfully.
Opção B: Usar o console
Conceda a seguinte política RAM ao AccessKey usado pelo Terway. Para obter instruções, consulte Gerencie permissões de usuário RAM.
{
"Version": "1",
"Statement": [
{
"Action": [
"ecs:CreateNetworkInterface",
"ecs:DescribeNetworkInterfaces",
"ecs:AttachNetworkInterface",
"ecs:DetachNetworkInterface",
"ecs:DeleteNetworkInterface",
"ecs:DescribeInstanceAttribute",
"ecs:AssignPrivateIpAddresses",
"ecs:UnassignPrivateIpAddresses",
"ecs:DescribeInstances",
"ecs:ModifyNetworkInterfaceAttribute"
],
"Resource": [
"*"
],
"Effect": "Allow"
},
{
"Action": [
"vpc:DescribeVSwitches"
],
"Resource": [
"*"
],
"Effect": "Allow"
}
]
}
Etapa 3: Instale o Terway
Opção A: Usar onectl
onectl addon install terway-eniip
Saída esperada:
Addon terway-eniip, version **** installed.
Opção B: Usar o console
Faça logon no Container Service Management Console. No painel de navegação à esquerda, clique em Clusters.
Clique no nome do cluster e selecione Add-ons no painel de navegação à esquerda.
Na página Add-ons, pesquise por terway-eniip. Clique em Install no canto inferior direito do cartão do componente e confirme clicando em OK.
Etapa 4: Verifique o DaemonSet do Terway
Antes de adicionar nós baseados em nuvem, confirme que o Terway não está agendado em nenhum nó on-premises.
kubectl -nkube-system get ds |grep terway
Saída esperada:
terway-eniip 0 0 0 0 0 alibabacloud.com/external=true 16s
O seletor de nó alibabacloud.com/external=true confirma que os pods do Terway rodarão apenas em nós ECS baseados em nuvem.
Etapa 5: Configure o ConfigMap ENI do Terway
Edite o ConfigMap eni-config no namespace kube-system para definir as credenciais AccessKey do Terway:
kubectl -n kube-system edit cm eni-config
Defina access_key e access_secret na seção eni_conf:
kind: ConfigMap
apiVersion: v1
metadata:
name: eni-config
namespace: kube-system
data:
eni_conf: |
{
"version": "1",
"max_pool_size": 5,
"min_pool_size": 0,
"vswitches": {"AZoneID":["VswitchId"]},
"eni_tags": {"ack.aliyun.com":"{{.ClusterID}}"},
"service_cidr": "{{.ServiceCIDR}}",
"security_group": "{{.SecurityGroupId}}",
"access_key": "",
"access_secret": "",
"vswitch_selection_policy": "ordered"
}
10-terway.conf: |
{
"cniVersion": "0.3.0",
"name": "terway",
"type": "terway"
}
Substitua access_key e access_secret pelo AccessKey ID e AccessKey Secret do usuário RAM com as permissões concedidas na Etapa 2.
Etapa 6: Crie um script personalizado de inicialização de nó
Ao adicionar um nó ECS, o cluster ACK registrado executa um script de inicialização e transmite variáveis de ambiente específicas da nuvem. Estenda o script de inicialização on-premises existente (init-node.sh) para processar essas variáveis.
Variáveis de ambiente transmitidas pelo cluster registrado:
|
Variável de ambiente |
Finalidade |
|
|
Defina |
|
|
Defina |
|
|
Defina |
|
|
Defina |
6a. Estender o script de inicialização
O script personalizado init-node-ecs.sh inicia com a mesma configuração do init-node.sh (instalação de containerd, kubelet, kubeadm, etc.) e adiciona uma seção para ler as variáveis de ambiente da Alibaba Cloud e passá-las ao kubelet antes de ingressar no cluster.
6b. Hospedar o script e registrá-lo no cluster
-
Carregue o arquivo
init-node-ecs.shem um servidor de arquivos HTTP acessível pela nuvem, como um bucket do Object Storage Service (OSS):https://kubelet-****.oss-cn-hangzhou-internal.aliyuncs.com/init-node-ecs.sh -
Defina
addNodeScriptPathno ConfigMapack-agent-configcomo a URL do script:apiVersion: v1 data: addNodeScriptPath: https://kubelet-****.oss-cn-hangzhou-internal.aliyuncs.com/init-node-ecs.sh kind: ConfigMap metadata: name: ack-agent-config namespace: kube-system
Etapa 7: Crie um pool de nós e adicione nós ECS
Faça logon no Container Service Management Console. No painel de navegação à esquerda, clique em Clusters.
Clique no nome do cluster e selecione Nodes > Node Pools no painel de navegação à esquerda.
Na página Node Pools, crie um pool de nós e adicione nós. Para mais detalhes, consulte Criar e gerencie um pool de nós.
Verifique o cluster híbrido
Após adicionar os nós, confirme que os novos nós ECS ingressaram no cluster com o rótulo correto:
kubectl get nodes --show-labels | grep external=true
Os nós com o rótulo alibabacloud.com/external=true são nós ECS baseados em nuvem. Nós sem esse rótulo são on-premises. Se ambos os tipos aparecerem na saída, o cluster híbrido estará operacional.
Próximos passos
Planeje blocos CIDR de rede de contêineres para o cenário Terway: Planejamento de rede para clusters gerenciados ACK
Conecte a rede do data center a uma VPC: Recursos
Crie o cluster registrado que ancora esta configuração: Criar um cluster registrado ACK One