Content
Setup Flux Operator em Produção
Essa página detalha como, a partir de um Linux qualquer, instalar o k3s e configurá-lo para sincronizar com o GitLab via FluxCD + Flux operator.
Esses são os passos seguidos para inicializar os ambientes de dev e de prd disponíveis publicamente.
Setup com um nó
Seguindo esse setup você terá um k3s rodando em uma máquina Linux, se tornando um "cluster" de apenas um nó.
Requisitos
Requisitos do K3s: Requirements | K3s
Flux Operator CLI instalado na sua máquina
Conta no GitLab
Repositório já criado no GitLab
Passo-a-passo
Entre na máquina onde será instalado o K3s via SSH.
Instalação do K3s
Baseada na documentação oficial. Aqui apenas descrevo o passo a passo para o nosso caso de uso.
Execute o seguinte comando para instalar o K3s: curl -sfL https://get.k3s.io | sh -
Após a finalização, confirme o funcionamento: sudo k3s kubectl get node:
~$ sudo k3s kubectl get node
NAME STATUS ROLES AGE VERSION
caronashow-dev-0 Ready control-plane 40m v1.34.6+k3s1
Acesso remoto do cluster
Para acessar o cluster sem precisar ficar manualmente entrando no shell da máquina via SSH, copie o kubeconfig do k3s via SSH.
O kubeconfig fica localizado em /etc/rancher/k3s/k3s.yaml
Após copiar, abra o arquivo e altere o IP do server no YAML para apontar para o IP da máquina remota.
Configure seu kubectl para usar esse kubeconfig. Pronto!
Bootstrap do Flux Operator
Agora vamos instalar o Flux Operator no cluster de produção utilizando o repositório Git que já estamos usando para o cluster de dev.
Para isso, na pasta clusters/prd, crie o flux-instance.yaml baseado no arquivo do cluster de dev. Basta copiar o arquivo e mudar o .spec.sync.path para a pasta de prd.
Após criar o arquivo novo, dê commit e mande para o GitLab as mudanças para a pasta existir quando o Flux for inicializar (a instalação falha caso a pasta não exista)
Agora, no cluster de produção, precisamos criar o secret para o Flux poder acessar o GitLab. Crie um PAT (Personal Access Token) e use-o para criar o secret flux-system no cluster com o comando abaixo (referenciado pelo flux-instance.yaml em .spec.sync.pullSecret):
kubectl create ns flux-system || true && \
kubectl create secret generic \
--from-literal=username='CaronaShow FluxCD Prd' \
--from-literal=password="$(read)" \
-n flux-system flux-system
Com o secret criado, inicialize o flux usando o flux-operator via cli:
flux-operator install -f flux-instance.yaml
Após a inicialização do Flux, basta configurar os apps para executar em produção!
Conclusão
Agora o cluster vai observar os arquivos dentro do clusters/prd e aplicar automaticamente no cluster.