O desenvolvimento de software moderno exige ciclos de implantação rápidos, escalabilidade e resiliência. O Kubernetes emergiu como a plataforma de orquestração preferida, permitindo a gestão escalável de aplicações em contêineres. Quando combinado com os pipelines CI/CD do GitLab, as implantações do Kubernetes tornam-se automatizadas, repetíveis e confiáveis.
Este artigo explora os detalhes técnicos de como configurar pipelines CI/CD para Kubernetes usando o GitLab CI.
Pré-requisitos
Antes de configurar seu pipeline CI/CD, certifique-se de que os seguintes requisitos sejam atendidos:
- Conta do GitLab: Acesso a um repositório do GitLab onde o pipeline CI/CD será configurado.
- Cluster Kubernetes: Um cluster Kubernetes existente, como Minikube (para testes locais) ou clusters gerenciados como Google Kubernetes Engine (GKE), Amazon EKS ou Azure AKS.
- kubectl: A ferramenta de linha de comando do Kubernetes deve estar instalada e configurada para interação com o cluster.
- Helm (opcional): Gerenciador de pacotes do Kubernetes para implantar e gerenciar aplicações.
- GitLab Runner: Certifique-se de que o GitLab Runner esteja instalado e registrado em seu projeto para executar trabalhos de CI/CD.
- Docker: Necessário para construir e enviar imagens de contêiner para um registro de contêiner.
Configurando a Integração do Kubernetes com o GitLab
Conectar Cluster Kubernetes
A integração do Kubernetes com o GitLab permite implantação e gerenciamento de recursos contínuos diretamente do seu pipeline. Siga estes passos:
- Acesse o painel do projeto no GitLab.
- Navegue até Infraestrutura > Clusters Kubernetes.
- Clique em Adicionar Cluster Kubernetes e conecte um cluster existente ou crie um novo usando provedores de nuvem.
- Atribua permissões adequadas ao GitLab usando o Controle de Acesso Baseado em Função (RBAC).
Configuração RBAC
O RBAC define permissões de acesso para recursos do Kubernetes. Abaixo está um exemplo de configuração YAML para configurar o RBAC:
apiVersion v1
kind ServiceAccount
metadata
name gitlab-sa
namespace default
---
apiVersion rbac.authorization.k8s.io/v1
kind ClusterRoleBinding
metadata
name gitlab-cluster-admin
roleRef
apiGroup rbac.authorization.k8s.io
kind ClusterRole
name cluster-admin
subjects
kind ServiceAccount
name gitlab-sa
namespace default
Aplicar Configuração
Aplique o arquivo YAML usando kubectl
:
kubectl apply -f gitlab-rbac.yaml
Gerar Token para Autenticação
Extraia o token da conta de serviço necessário para o GitLab:
kubectl -n default get secret $(kubectl -n default get sa/gitlab-sa -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode
Cole este token nas configurações de Kubernetes do GitLab.
Configurando o Pipeline CI/CD do GitLab
Definir .gitlab-ci.yml
O arquivo de configuração do CI do GitLab define estágios de pipeline, variáveis e comandos. Abaixo está um exemplo de configuração:
image docker20.10
stages
build
test
deploy
variables
KUBE_NAMESPACE default
KUBECONFIG"/root/.kube/config"
IMAGE_TAG $CI_COMMIT_SHA
REGISTRY registry.gitlab.com/username/project
services
docker:dind
before_script
apk add --no-cache curl jq bash git
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.22.0/bin/linux/amd64/kubectl
chmod +x ./kubectl && mv ./kubectl /usr/local/bin/kubectl
"$KUBE_CONFIG" | base64 -d > $KUBECONFIG echo
chmod 600 $KUBECONFIG
build
stage build
script
docker build -t $REGISTRY:$IMAGE_TAG .
docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
docker push $REGISTRY:$IMAGE_TAG
unit-test
stage test
script
"Running tests..." echo
./run-tests.sh
deploy
stage deploy
script
kubectl set image deployment/my-app my-app=$REGISTRY:$IMAGE_TAG -n $KUBE_NAMESPACE
only
main
Explicação da Configuração
- Fases: O pipeline é dividido em fases de construção, teste e implantação para execução modular.
- Variáveis: Variáveis de ambiente como tags de imagem e namespaces simplificam o gerenciamento de configuração.
- before_script: Instala dependências e configura a autenticação do Kubernetes.
- Marcação de Imagem: Usa o SHA do commit para identificar de forma exclusiva cada versão da imagem.
- Implantação: Atualiza a implantação do Kubernetes definindo a imagem do contêiner.
Gerenciamento de Segredos
O GitLab CI suporta o gerenciamento seguro de segredos usando variáveis:
- Navegue até Configurações > CI/CD > Variáveis.
- Adicione as variáveis necessárias como
KUBE_CONFIG
,CI_REGISTRY_USER
eCI_REGISTRY_PASSWORD
.
Codifique kubeconfig
antes de adicioná-lo como uma variável:
cat ~/.kube/config | base64 | tr -d '\n'
Adicione o resultado como KUBE_CONFIG
no GitLab.
Implantação com Helm
O Helm simplifica as implantações do Kubernetes com gráficos reutilizáveis. Exemplo de configuração do Helm:
apiVersion v2
name my-app
version1.0.0
appVersion1.0.0
image
repository registry.gitlab.com/username/project
tag latest
service
type ClusterIP
port80
Adicione comandos do Helm ao pipeline:
deploy
stage deploy
script
helm upgrade --install my-app ./helm-chart --set image.tag=$IMAGE_TAG
Ferramentas de Monitoramento e Depuração
Monitore o status do pipeline no GitLab em CI/CD > Pipelines. Use ferramentas como:
- Prometheus e Grafana: Para métricas e visualização.
- Dashboard do Kubernetes: Gerenciamento de cluster.
- kubectl logs: Buscar logs de implantação.
kubectl logs -f deployment/my-app
Conclusão
Este artigo descreve a configuração de pipelines CI/CD para Kubernetes com o GitLab CI. Ele abrange pré-requisitos, configurações YAML, gerenciamento de segredos, implantações do Helm e ferramentas de monitoramento. Com essa configuração, os desenvolvedores podem construir, testar e implantar aplicativos containerizados de forma eficiente e confiável.
Source:
https://dzone.com/articles/cicd-pipelines-for-kubernetes-using-gitlab-ci