Neste documento, mostramos como migrar do balanceador de carga Seesaw para o balanceador de carga MetalLB nas versões 1.16 a 1.29. Se os clusters estiverem na versão 1.30 ou mais recente, recomendamos que você siga as instruções em Planejar a migração de clusters para recursos recomendados.
O MetalLB oferece vários benefícios em comparação com outras opções de balanceamento de carga.
1.28 e 1.29: GA
1.16: pré-lançamento
Para verificar o externalTrafficPolicy, execute este comando:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get svc -A -o yaml | grep "externalTrafficPolicy: Local"
Entre em contato com o Suporte do Google para receber ajuda com esse problema.
Observações sobre o tempo de inatividade
Há um tempo de inatividade da carga de trabalho durante a migração. As observações a seguir só se aplicam a clusters de administrador sem alta disponibilidade (não HA), porque o balanceador de carga SeeSaw não funciona com clusters de administrador HA.
Ao migrar um cluster de administrador:
Há um tempo de inatividade do plano de controle para clusters de usuário kubeception, porque o
controlPlaneVIPé migrado. O tempo de inatividade deve ser inferior a 10 minutos, mas a duração depende da sua infraestrutura.Há um tempo de inatividade para o plano de controle do cluster de administrador, porque o nó mestre de administrador precisa ser recriado com o
controlPlaneVIPdiretamente anexado à VM. O tempo de inatividade precisa ser inferior a 20 minutos, mas a duração dele depende da sua infraestrutura.
Ao migrar um cluster de usuário, há uma interrupção dos VIPs depois que o balanceador de carga do Seesaw é desativado e antes que os pods do MetalLB apareçam. Esse processo geralmente leva cerca de um minuto.
Migração de cluster de usuário
Você precisa escolher um pool de nós e ativá-lo para uso com o MetalLB. O MetalLB será implantado nos nós desse pool de nós.
No arquivo de configuração do cluster de usuário, escolha um pool de nós e defina
enableLoadBalancer como true:
nodePools: - name: pool-1 replicas: 3 enableLoadBalancer: true
Atualize o cluster:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
Substitua:
ADMIN_CLUSTER_KUBECONFIG: o caminho do arquivo kubeconfig do cluster de administrador
USER_CLUSTER_CONFIG: é o caminho do arquivo de configuração do cluster de usuário
Depois, remova as seções do Seesaw do arquivo e adicione uma seção do MetalLB.
Em seguida, atualize o cluster de novo:
gkectl update cluster --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config USER_CLUSTER_CONFIG
Verifique se os componentes MetalLB estão sendo executados corretamente:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get pods \
--namespace kube-system --selector app=metallb
A saída mostra pods do controlador e alto-falante do MetalLB. Por exemplo:
metallb-controller-744884bf7b-rznr9 1/1 Running metallb-speaker-6n8ws 1/1 Running metallb-speaker-nb52z 1/1 Running metallb-speaker-rq4pp 1/1 Running
Após a migração, exclua manualmente as VMs do Seesaw
desativadas do cluster de usuário. É possível encontrar os nomes de VMs do Seesaw na
seção vmnames do arquivo seesaw-for-[USERCLUSTERNAME].yaml no
diretório de configuração.
Exemplo: cluster de usuário, endereços IP estáticos
Suponha que você tenha um cluster de usuário que use endereços IP estáticos para os nós
do cluster. Suponha também que o cluster tenha dois Serviços do tipo LoadBalancer
e os endereços externos desses serviços sejam 172.16.21.41 e 172.16.21.45.
Ajuste o arquivo de configuração do cluster de usuário da seguinte maneira:
- Mantenha a seção
network.hostConfig. - Defina
loadBalancer.kindcomoMetalLB. - Remova a seção
loadBalancer.seesaw. - Adicione uma seção
loadBalancer.metalLB.
Exemplo:
network:
hostConfig:
dnsServers:
- "172.16.255.1"
- "172.16.255.2"
ntpServers:
- "216.239.35.0"
loadBalancer:
vips:
controlPlaneVIP: "172.16.20.30"
ingressVIP: "172.16.20.31"
kind: MetalLB Seesaw
seesaw:
ipBlockFilePath: "user-cluster-1-ipblock.yaml"
vrid: 1
masterIP: ""
cpus: 4
memoryMB: 3072
metalLB:
addressPools:
- name: "address-pool-1"
addresses:
- "172.16.20.31/32"
- "172.16.20.40 - 172.16.21.49"
Pontos principais do exemplo anterior:
Mesmo que o cluster não use mais o balanceador de carga do Seesaw, a seção
network.hostConfigé necessária porque os nós do cluster usam endereços IP estáticos.O valor de
ingressVIPaparece no pool de endereços do MetalLB.Os endereços IP externos, 172.16.21.41 e 172.16.21.45, dos Serviços atuais do tipo
LoadBalancerestão incluídos no pool de endereços do MetalLB.
Exemplo: cluster de usuário kubeception, DHCP
Suponha que você tenha um cluster de usuário que use DHCP para os nós do cluster. Suponha também que o cluster tenha dois Serviços do tipo LoadBalancer
e os endereços externos desses serviços sejam 172.16.21.61 e 172.16.21.65.
Ajuste o arquivo de configuração do cluster de usuário da seguinte maneira:
- Remova a seção
network.hostConfig. - Defina
loadBalancer.kindcomoMetalLB. - Remova a seção
loadBalancer.seesaw. - Adicione uma seção
loadBalancer.metalLB.
Exemplo:
enableControlplaneV2: false network:hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0"loadBalancer: vips: controlPlaneVIP: "172.16.20.50" ingressVIP: "172.16.20.51" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-2-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072metalLB: addressPools: - name: "address-pool-1" addresses: - "172.16.20.51/32" - "172.16.20.60 - 172.16.21.69"
Pontos principais do exemplo anterior:
O cluster não vai mais usar o balanceador de carga do Seesaw, e o cluster não vai usar endereços IP estáticos para os nós do cluster. Portanto, a seção
network.hostConfignão será necessária.O valor de
ingressVIPaparece no pool de endereços do MetalLB.Os endereços IP externos, 172.16.21.61 e 172.16.21.65, dos Serviços atuais do tipo
LoadBalancerestão incluídos no pool de endereços do MetalLB.
Exemplo: cluster de usuário do Controlplane V2, DHCP
Suponha que você tenha um cluster de usuário com o Controlplane V2 ativado e que use DHCP
para os nós de worker. Suponha também que o cluster tenha dois Serviços do tipo LoadBalancer
e os endereços externos desses serviços sejam 172.16.21.81
e 172.16.21.85.
Ajuste o arquivo de configuração do cluster de usuário da seguinte maneira:
- Mantenha a seção
network.hostconfig. - Defina
loadBalancer.kindcomoMetalLB. - Remova a seção
loadBalancer.seesaw. - Adicione uma seção
loadBalancer.metalLB.
Exemplo:
enableControlplaneV2: true
network:
hostConfig:
dnsServers:
- "172.16.255.1"
- "172.16.255.2"
ntpServers:
- "216.239.35.0"
loadBalancer:
vips:
controlPlaneVIP: "172.16.20.70"
ingressVIP: "172.16.20.71"
kind: MetalLB Seesaw
seesaw:
ipBlockFilePath: "user-cluster-2-ipblock.yaml"
vrid: 1
masterIP: ""
cpus: 4
memoryMB: 3072
metalLB:
addressPools:
- name: "address-pool-1"
addresses:
- "172.16.20.71/32"
- "172.16.20.80 - 172.16.21.89"
Pontos principais do exemplo anterior:
O cluster não vai mais usar endereços IP estáticos para os nós de trabalho, mas vai usar endereços IP estáticos para os nós do plano de controle. Portanto, a seção
network.hostConfigé necessária.O valor de
ingressVIPaparece no pool de endereços do MetalLB.Os endereços IP externos, 172.16.21.81 e 172.16.21.85, dos Serviços atuais do tipo
LoadBalancerestão incluídos no pool de endereços do MetalLB.
Migração de cluster de administrador
No arquivo de configuração do cluster de administrador, defina loadBalancer.kind como MetalLB
e remova a seção loadBalancer.seesaw.
Atualize o cluster:
gkectl update admin --kubeconfig ADMIN_CLUSTER_KUBECONFIG --config ADMIN_CLUSTER_CONFIG
Substitua:
ADMIN_CLUSTER_KUBECONFIG: o caminho do arquivo kubeconfig do cluster de administrador
ADMIN_CLUSTER_CONFIG: é o caminho do arquivo de configuração do cluster de administrador
Verifique se os componentes MetalLB estão sendo executados corretamente:
kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods \
--namespace kube-system --selector app=metallb
A saída mostra pods do controlador e alto-falante do MetalLB. Por exemplo:
metallb-controller-744884bf7b-rznr9 1/1 Running metallb-speaker-6n8ws 1/1 Running metallb-speaker-nb52z 1/1 Running metallb-speaker-rq4pp 1/1 Running
Após a migração, exclua manualmente as VMs do Seesaw
desativadas do cluster de administrador. É possível encontrar os nomes de VMs do Seesaw na
seção vmnames do arquivo seesaw-for-gke-admin.yaml no
diretório de configuração.
Exemplo: cluster de administrador, endereços IP estáticos
Suponha que você tenha um cluster de administrador que use endereços IP estáticos para os nós do cluster.
Ajuste o arquivo de configuração do cluster de administrador da seguinte maneira:
- Mantenha a seção
network.hostConfig. - Defina
loadBalancer.kindcomoMetalLB. - Remova a seção
loadBalancer.seesaw.
Exemplo:
network:
hostConfig:
dnsServers:
- "172.16.255.1"
- "172.16.255.2"
ntpServers:
- "216.239.35.0"
loadBalancer:
vips:
controlPlaneVIP: "172.16.20.30"
kind: MetalLB Seesaw
seesaw:
ipBlockFilePath: "user-cluster-1-ipblock.yaml"
vrid: 1
masterIP: ""
cpus: 4
memoryMB: 3072
Ponto principal do exemplo anterior:
- Mesmo que o cluster não use mais o balanceador de carga do Seesaw, a
seção
network.hostConfigé necessária porque os nós do cluster usam endereços IP estáticos.
Exemplo: cluster de administrador, DHCP
Suponha que você tenha um cluster de administrador que use DHCP para os nós do cluster.
Ajuste o arquivo de configuração do cluster de administrador da seguinte maneira:
- Remova a seção
network.hostConfig. - Defina
loadBalancer.kindcomoMetalLB. - Remova a seção
loadBalancer.seesaw.
Exemplo:
network:hostConfig: dnsServers: - "172.16.255.1" - "172.16.255.2" ntpServers: - "216.239.35.0"loadBalancer: vips: controlPlaneVIP: "172.16.20.30" kind: MetalLBSeesawseesaw: ipBlockFilePath: "user-cluster-1-ipblock.yaml" vrid: 1 masterIP: "" cpus: 4 memoryMB: 3072
Ponto principal do exemplo anterior:
- O cluster não vai mais usar o balanceador de carga do Seesaw, e o cluster não
vai usar endereços IP estáticos para os nós do cluster. Portanto, a seção
network.hostConfignão será necessária.
Solução de problemas
Se gkectl update falhar durante a migração do cluster de usuário e os pods MetalLB não
estiverem em execução no cluster de usuário, as VMs do Seesaw deste último precisam ser ativadas manualmente.
Isso vai restabelecer o tráfego para os VIPs usados atualmente. No entanto, pode ser que os VIPs recém-criados
não sejam mostrados pelas VMs do Seesaw se o pod load-balancer-seesaw não estiver
em execução. Se esse for o caso, crie um tíquete de suporte.
Se gkectl update falhar durante a migração do cluster de administrador e os pods MetalLB
não estiverem em execução no cluster de administrador, as VMs do Seesaw deste último precisam ser
ativadas manualmente. Assim, o tráfego pode usar os VIPs do plano de controle no momento para que os clusters
de usuário voltem a funcionar. No entanto, pode ser que o VIP para o plano de controle do cluster de administrador
não funcione. Nesse caso, edite o arquivo kubeconfig do cluster
de administrador para usar o endereço IP diretamente do nó do plano de controle do cluster de administrador.
Além disso, no namespace kube-system, mude o tipo de serviço kube-apiserver
de ClusterIP para LoadBalancer. Se necessário, crie um tíquete de suporte.