Escrito por

Estagiário de Customização e Integração at Shift
Artigo Aziz Cotrim · 4 h atrás 3m read

IKO Plus: IrisCluster Distribuído Entre Múltiplas Nuvens e Regiões com Tailscale

Mais um passo nessa jornada: IrisCluster distribuído entre múltiplas nuvens e regiões com Mirroring + Disaster Recovery usando o Intersystems Kubernetes Operator (IKO) e Tailscale

Embora seja algo relativamente simples, quero ir multi-cloud com o IrisCluster distribuído por algumas razões — para demonstrar o poder do WireGuard quando ele fornece a rede para um IrisCluster devidamente zonificado, adicionando mais um papel de mirror na Amazon Web Services no datacenter da costa oeste dos Estados Unidos, em Oregon.

 

Vamos listar os requisitos da solução e verificar se conseguimos marcá-los depois de fazer algumas alterações na topologia do IrisCluster.

A Continuidade de Negócios exige:

⬜  Alta Disponibilidade, implementa Mirror

⬜  A instância/dados de Disaster Recovery deve estar a pelo menos 4.000 km do Mirror de HA mais próximo

⬜   A instância/dados de Disaster Recovery deve estar hospedada por um fornecedor alternativo

Vamos lá

Como recapitulação do post anterior, já temos um cluster distribuído rodando no Google Cloud Platform.

 

 

Computação existente do IrisCluster

Criar Computação

Na região us-west-2 da AWS, crie uma instância:
 

aws ec2 run-instances \
  --region us-west-2 \
  --instance-type c6i.xlarge \
  --image-id ami-03aa99ddf5498ceb9 \
  --block-device-mappings DeviceName=/dev/sda1,Ebs={VolumeSize=200} \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=ikoplus-worker-aws}]'

Entre na sua Tailnet

Simplifique sua conectividade com as tecnologias baseadas em WireGuard:

curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list
sudo apt-get update
sudo apt-get install tailscale
sudo tailscale up
tailscale ip -4


Inspecione sua Tailnet


Kubernetes para Todo Mundo

Feito da forma certa com o Canonical k8s.

 

k8s

# on control plane
sudo k8s get-join-token --worker

# on our new aws node
sudo k8s join-cluster eyJ0b2tlbiI6IiI.....

... Please allow some time for initial Kubernetes node registration, its coming over the pond so give it a break.

Nova Zona para o Novo Nó

Adicione a nova zona ao nó...

kubectl label node ip-10-129-0-182.ec2.internal topology.kubernetes.io/zone=us-aws -n ikoplus


Atualizar a Topologia do IrisCluster Distribuído

Duas coisas a atualizar aqui:

  • Adicionar `asyncdr` ao mirrorMap
  • Adicionar a nova zona


Pronto.

Atestado

Status do Mirror

Armadilhas

Isso não foi sem percalços. Fiquei surpreso, pois a distribuição entre regiões no GCP funcionou perfeitamente, fora os ajustes de sincronização de tempo... então quero compartilhar algumas coisas que foram necessárias para fazer funcionar entre regiões e nuvens diferentes.
 

AWS

  • Desabilitei os hostnames DNS na VPC e adicionei entradas de host com os IPs do Tailscale
  • Afunilei o polling do chronyd
  • Recriei a VPC sem NAT gateway, apenas com IGW

Instância

  • Foi necessário habilitar o encaminhamento de IP
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
echo 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-tailscale.conf
sudo sysctl -p /etc/sysctl.d/99-tailscale.conf

Tailnet

Na Tailnet, foi necessário anunciar as subnets nas máquinas e aceitar as rotas.

sudo tailscale up --advertise-routes=10.150.0.0/20 --accept-routes
sudo tailscale up --advertise-routes=10.154.0.0/20 --accept-routes
sudo tailscale up --advertise-routes=10.129.0.0/20 --accept-routes

Em seguida, cada máquina precisou de aprovação na Tailnet.


IKO

Preciso trabalhar na automação dos nós e garantir que eles permaneçam nos lugares corretos após uma exclusão e recriação do IrisCluster distribuído. Eu estava confortável em ter o control plane no centro dos EUA, o DR em Oregon e o HA no Reino Unido — mas após um delete e recriação, os papéis acabaram em lugares diferentes. Da mesma forma, quero fazer algo diferente com o árbitro também.


We Had One Job

Vamos verificar nossos requisitos de Continuidade de Negócios:

✅  Alta Disponibilidade — implementa Mirror (obrigado, IKO)

✅  A instância/dados de DR está a mais de 4.000 km do Mirror de HA mais próximo (4.092 km até o próximo DC)

✅  A instância/dados de DR está hospedada por um fornecedor alternativo (tem dois ícones de nuvem aí em cima)

Avante! Adoro as Tailnets!