Usando o Flux CD para implementar a abordagem GitOps nos clusters Kubernetes

Em outro tutorial, eu falei sobre a abordagem GitOps e uso do ArgoCD… Recomendo a leitura para entender alguns conceitos antes de partir para o uso da ferramenta que será explicado aqui.

Neste tutorial você aprenderá a instalar o Flux, que é conjunto de soluções de entrega contínua e progressiva para Kubernetes. Fonte: https://fluxcd.io.

O Flux pode se conectar a repositórios git públicos e privados, é gratuito, tem o código fonte aberto, é um projeto incubado pela CNCF. Até hoje (Março/2022), o Flux não possui uma interface web, mas pode ser configurado via linha de comando.

Requisitos

Para a execução deste tutorial, partirei da premissa que você está usando alguma distribuição GNU/Linux e já tem instaladas as seguintes ferramentas:

Além disso, você precisa ter acesso a 1 ou 2 clusters Kubernetes (sejam eles no ambiente on-premisse, cloud (EKSGKE ou AKS ou ainda, usando minikubekindk0smicrok8s ou k3s).

Instalando o Flux

Estando conectado em um cluster Kubernetes, execute os seguintes comandos para instalar o Flux no GNU/Linux:

curl -s https://fluxcd.io/install.sh | sudo bash
flux --version
. <(flux completion bash)

Visualize as opções da linha de comando do flux:

flux --help

flux subcommand --help

Neste tutorial, eu estou integrando o uso do Flux ao GitHub e para isso foi necessário criar um Personal Access Token (PAT), seguindo as instruções deste tutorial: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

Se você utiliza o repositório Git em outros serviços, tais como: Gitlab, Bitbucket, AWS Code Commit, sugiro ler as instruções de configuração disponíveis em: https://fluxcd.io/docs/installation/#bootstrap

Exporte o seu PAT com o seguinte comando:

PS.: Lembre-se de alterar os valores nas seguintes variáveis de acordo com o seu ambiente.

export GITHUB_TOKEN=<your-token>
export GITHUB_USER=<your-username>
export GITHUB_REPO=<repository-url>

O repositório https://github.com/fluxcd/flux2-kustomize-helm-example possui vários exemplos de aplicações que podem ser implantados usando o Flux. Eu fiz um clone desse repositório em: https://github.com/aeciopires/flux2-kustomize-helm-example

Execute o seguinte comando para instalar o Flux no cluster Kubernetes e configurar a integração com um repositório no GitHub:

flux bootstrap github \
  --owner=${GITHUB_USER} \
  --repository=${GITHUB_REPO} \
  --path=clusters/production \
  --personal

Esse comando além de instalar os componentes de software do Flux no namespace flux-system, instalará também algumas aplicações que estão sendo definidas nos seguintes arquivos e diretórios:

O arquivo README.md explica em detalhes o conteúdo de cada arquivo e diretório.

O resultado dessa instalação pode ser visto com os seguintes comandos (destaque para os namespaces: flux-system, nginx, podinfo e redis):

flux get helmreleases --all-namespaces

helm list -A

kubectl get all -A

Verifique se o aplicativo de demonstração pode ser acessado por meio do ingress:

kubectl -n nginx port-forward svc/nginx-ingress-controller 8080:80 &

curl -H "Host: podinfo.production" http://localhost:8080

A página https://fluxcd.io/docs/guides/repository-structure/ apresenta sugestões e instruções de como pode ser organizado o conteúdo do repositório git para armazenar as configurações do cluster, ambiente e apps.

Removendo o Flux do cluster Kubernetes

Você pode desinstalar o Flux com o seguinte comando:

flux uninstall --namespace=flux-system

Para remover as aplicações instaladas pelo Flux, utilize o comando:

kubectl delete namespace nginx podinfo redis

Para saber mais informações sobre o uso do Flux, acesse os links que estão na seção Referências deste tutorial.

Referências

Categories: , , , , ,

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *