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 ideal, permitindo a gestão de aplicações em contêineres escaláveis. Quando combinado com os pipelines CI/CD do GitLab, as implantações do Kubernetes se tornam 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 os 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 o Cluster Kubernetes
Integrar o 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 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 Controle de Acesso Baseado em Função (RBAC).
Configuração RBAC
RBAC define permissões de acesso para recursos do Kubernetes. Abaixo está um exemplo de configuração YAML para configurar 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 CI do GitLab define estágios do 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
- Etapas: O pipeline é dividido em etapas 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 SHA do commit para identificar de forma única 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:
- Acesse Configurações > CI/CD > Variáveis.
- Adicione variáveis necessárias como
KUBE_CONFIG
,CI_REGISTRY_USER
eCI_REGISTRY_PASSWORD
.
Encode kubeconfig
antes de adicioná-lo como 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.
- Painel do Kubernetes: Gerenciamento do cluster.
- kubectl logs: Buscar logs de implantação.
kubectl logs -f deployment/my-app
Conclusão
Este artigo descreve a configuração de pipelines de CI/CD para Kubernetes com GitLab CI. Abrange pré-requisitos, configurações YAML, gerenciamento de segredos, implantações Helm e ferramentas de monitoramento. Com esta configuração, os desenvolvedores podem construir, testar e implantar aplicações conteinerizadas de forma eficiente e confiável.
Source:
https://dzone.com/articles/cicd-pipelines-for-kubernetes-using-gitlab-ci