Moderne softwareontwikkeling vereist snelle implementatiecycli, schaalbaarheid en veerkracht. Kubernetes is de toonaangevende orchestratieplatform geworden, dat schaalbaar beheer van containerized applicaties mogelijk maakt. Wanneer het wordt gecombineerd met GitLab CI/CD-pijplijnen, worden Kubernetes-implementaties geautomatiseerd, herhaalbaar en betrouwbaar.
Dit artikel verkent de technische details van het opzetten van CI/CD-pijplijnen voor Kubernetes met GitLab CI.
Vereisten
Voordat je je CI/CD-pijplijn configureert, zorg ervoor dat aan de volgende vereisten is voldaan:
- GitLab-account: Toegang tot een GitLab-repository waar de CI/CD-pijplijn zal worden geconfigureerd.
- Kubernetes-cluster: Een bestaand Kubernetes-cluster zoals Minikube (voor lokale tests) of beheerde clusters zoals Google Kubernetes Engine (GKE), Amazon EKS of Azure AKS.
- kubectl: De Kubernetes-opdrachtregeltool moet geïnstalleerd en geconfigureerd zijn voor interactie met het cluster.
- Helm (optioneel): Kubernetes-pakketbeheerder voor het implementeren en beheren van applicaties.
- GitLab Runner: Zorg ervoor dat GitLab Runner is geïnstalleerd en geregistreerd bij je project voor het uitvoeren van CI/CD-taken.
- Docker: Vereist voor het bouwen en pushen van containerafbeeldingen naar een containerregister.
Kubernetes-integratie instellen met GitLab
Verbind Kubernetes-cluster
Integratie van Kubernetes met GitLab maakt naadloze implementatie en resourcebeheer rechtstreeks vanuit je pipeline mogelijk. Volg deze stappen:
- Ga naar je GitLab-projectdashboard.
- Navigeer naar Infrastructuur > Kubernetes-clusters.
- Klik op Kubernetes-cluster toevoegen en verbind een bestaand cluster of maak een nieuwe aan met cloudproviders.
- Wijs de juiste machtigingen toe aan GitLab met Role-Based Access Control (RBAC).
RBAC-configuratie
RBAC definieert toegangsrechten voor Kubernetes-resources. Hieronder staat een voorbeeld van een YAML-configuratie om RBAC in te stellen:
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
Toepassen van configuratie
Pas het YAML-bestand toe met kubectl
:
kubectl apply -f gitlab-rbac.yaml
Genereer token voor authenticatie
Haal het serviceaccount-token op dat nodig is voor GitLab:
kubectl -n default get secret $(kubectl -n default get sa/gitlab-sa -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode
Plak dit token in de Kubernetes-configuratie-instellingen van GitLab.
Configureren van de GitLab CI/CD-pipeline
Definieer .gitlab-ci.yml
Het GitLab CI-configuratiebestand definieert de fasen van de pipeline, variabelen en commando’s. Hieronder staat een voorbeeldconfiguratie:
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
Uitleg van configuratie
- Stadia: De pijplijn is verdeeld in bouw-, test- en implementatiestadia voor modulaire uitvoering.
- Variabelen: Omgevingsvariabelen zoals imagetags en namespaces vereenvoudigen configuratiebeheer.
- before_script: Installeert afhankelijkheden en stelt Kubernetes-authenticatie in.
- Imagetagging: Gebruikt commit-SHA om elke versie van de afbeelding uniek te identificeren.
- Implementatie: Werkt Kubernetes-implementatie bij door de containerafbeelding in te stellen.
Beheer van geheimen
GitLab CI ondersteunt veilig geheimenbeheer met behulp van variabelen:
- Navigeer naar Instellingen > CI/CD > Variabelen.
- Voeg vereiste variabelen toe zoals
KUBE_CONFIG
,CI_REGISTRY_USER
enCI_REGISTRY_PASSWORD
.
Encodeer kubeconfig
voordat u het toevoegt als een variabele:
cat ~/.kube/config | base64 | tr -d '\n'
Voeg het resultaat toe als KUBE_CONFIG
in GitLab.
Helm-implementatie
Helm vereenvoudigt Kubernetes-implementaties met herbruikbare diagrammen. Voorbeeld van een Helm-configuratie:
apiVersion v2
name my-app
version1.0.0
appVersion1.0.0
image
repository registry.gitlab.com/username/project
tag latest
service
type ClusterIP
port80
Voeg Helm-commando’s toe aan de pijplijn:
deploy
stage deploy
script
helm upgrade --install my-app ./helm-chart --set image.tag=$IMAGE_TAG
Monitoring- en debugtools
Monitor pijplijnstatus in GitLab onder CI/CD > Pijplijnen. Gebruik tools zoals:
- Prometheus en Grafana: Voor metingen en visualisatie.
- Kubernetes-dashboard: Clusterbeheer.
- kubectl logs: Logboeken ophalen van implementatie.
kubectl logs -f deployment/my-app
Conclusie
Dit artikel beschrijft het configureren van CI/CD-pijplijnen voor Kubernetes met GitLab CI. Het behandelt de vereisten, YAML-configuraties, geheimenbeheer, Helm-implementaties en monitoringtools. Met deze opstelling kunnen ontwikkelaars containerapplicaties efficiënt en betrouwbaar bouwen, testen en implementeren.
Source:
https://dzone.com/articles/cicd-pipelines-for-kubernetes-using-gitlab-ci