Configurando Kubernetes GitOps com FluxCD – Parte 1

A prática de GitOps permite definir a infraestrutura como código de forma declarativa. Ela serve como uma fonte única e auditada para o estado da nuvem ou cluster, trazendo benefícios como controle de versão, trilhas de auditoria para mudanças na infraestrutura e reconciliação automatizada entre os estados desejado e real. Além disso, melhora a segurança através de credenciais criptografadas e controle de acesso, simplifica a reversão de alterações e aprimora a colaboração através de fluxos de trabalho Git.

FluxCD é um projeto graduado pela CNCF que habilita práticas de GitOps no ecossistema Kubernetes. Ele automatiza a implantação, monitoramento e reconciliação de recursos do cluster com base em repositórios Git. Este artigo aborda a configuração inicial e a funcionalidade principal do FluxCD em um cluster Kubernetes.

Configuração de Dependências Git

Vamos começar criando um repositório Git no Github. Em seguida, é necessário gerar um token de acesso granular que o FluxCD usará para interagir com o repositório. Esses tokens oferecem um controle mais preciso sobre as permissões do repositório em comparação com os tokens de acesso pessoal clássicos.

Manteremos a permissão Read and write para acesso de Administration e Contents, e Read-only para acesso de Metadata, limitado ao repositório que criamos. As permissões seguem as recomendações da documentação oficial do FluxCD para esta configuração inicial.

Configuração do Flux CLI

Para começar, vamos instalar o FluxCD cli. O próximo passo é exportar as variáveis de detalhe do usuário e token github.

sudo zypper in flux2-cli
export GITHUB_TOKEN=******
export GITHUB_USER=*****

Para este artigo, estamos usando um cluster k3s hospedado localmente em uma máquina virtual. Vamos verificar se temos acesso a ele com kubectl.

# 1. Point to specific cluster we are setting up
export KUBECONFIG=~/.kube/local.config
# 2. Check for access and version
kubectl version

Vamos verificar com o Flux cli se ele também tem acesso.

flux check --pre

Bootstrap do GitOps com FluxCD

Instalaremos todos os componentes, incluindo os extras para automação de imagem.

flux bootstrap github \
    --owner=$GITHUB_USER \
    --repository=k8s-gitops \
    --branch=main \
    --path=./cluster/default \
    --read-write-key \
    --components source-controller,kustomize-controller,helm-controller,notification-controller \
    --components-extra image-reflector-controller,image-automation-controller \
    --personal

Vamos verificar a configuração do Flux passo a passo:

  1. O Bootstrap criou uma chave de implantação no repositório Github e a armazenou como flux-system/flux-secret.

Verificando a chave de implantação no Github e o segredo com kubectl -n flux-system get secrets.

  1. O Flux inicializou o repositório com o commit inicial contendo a definição dos componentes em cluster/default, conforme especificado no comando bootstrap.

3 – O FluxCD reconciliou com o repositório Git e instalou os componentes no namespace flux-system. Vamos verificar com kubectl.

Verificação da Instalação do GitOps com FluxCD

Vamos verificar nossa instalação criando uma implantação de amostra.

apps/nginx/deployment.yaml

apiVersion: apps/v1
metadata:
  name: nginx-deployment
  namespace: default
kind: Deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
        resources:
          requests:
            memory: "64Mi"
            cpu: "50m"
          limits:
            memory: "64Mi"
            cpu: "50m"

apps/nginx/kustomization.yaml

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
  - deployment.yaml

cluster/default/nginx.yaml

apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: nginx
  namespace: flux-system
spec:
  interval: 5m
  path: ./apps/nginx
  prune: true
  retryInterval: 2m
  sourceRef:
    kind: GitRepository
    name: flux-system
  targetNamespace: default
  timeout: 3m
  wait: true

O recurso Kustomization possui vários campos importantes:

  • interval: Com que frequência o Flux deve reconciliar este recurso (5m = 5 minutos).
  • path: Diretório contendo os manifestos Kubernetes.
  • prune: Se o Flux deve excluir recursos que não estão mais definidos no Git.
  • retryInterval: Quanto tempo esperar entre as tentativas se a reconciliação falhar.
  • wait: Se o Flux deve esperar que os recursos estejam prontos antes de concluir a reconciliação.
  • timeout: Tempo máximo para aguardar a reconciliação.

Vamos enviar essas mudanças e esperar que a reconciliação termine. Após a finalização, podemos verificar se o nginx foi implantado.

O Que Acontece Se…?

Um dos principais objetivos do GitOps com FluxCD é garantir que o estado do nosso cluster sempre corresponda aos recursos definidos no nosso repositório git. Esse processo contínuo de reconciliação é o que torna o GitOps com FluxCD poderoso para manter a consistência do sistema.

Para demonstrar essa funcionalidade, excluiremos nossa implantação nginx usando kubectl e observaremos como o processo de reconciliação do Flux a restaura automaticamente ao estado desejado definido no Git. Isso mostra a capacidade de “auto cura” da abordagem GitOps com FluxCD.

No exemplo acima, o primeiro passo é verificar a implantação com kubectl get deployments para verificar se o nginx está em execução. O segundo passo é excluir a implantação com kubectl delete deployment/nginx-deployment e o terceiro passo é confirmar se a implantação nginx foi excluída com kubectl get deployment. O quarto passo é observar a reconciliação do FluxCD entrar em ação e o quinto passo é verificar se o nginx foi reimplantado após a reconciliação do Flux.

Próximos Passos

Publicações futuras explorarão padrões avançados de GitOps com FluxCD, incluindo:

  • Automação de gráfico Helm.
  • Automação de atualização de imagem.
  • Configuração de notificação e alerta.
  • Gerenciamento de segredos com SOPS.

Continue acompanhando para saber mais sobre esses tópicos. Se você busca entender mais sobre automação, veja este artigo sobre o que é automação de marketing e como usar na prática.

Este conteúdo foi auxiliado por Inteligência Artificial, mas escrito e revisado por um humano.

Via Dev.to

Leave a Comment

Exit mobile version