تتطلب تطوير البرمجيات الحديثة دورات نشر سريعة، وقابلية التوسع، والمرونة. وقد برزت Kubernetes كمنصة التنسيق الرئيسية، مما يتيح إدارة التطبيقات المعبأة القابلة للتوسع. عند دمجها مع خطوط أنابيب CI/CD في GitLab، تصبح عمليات نشر Kubernetes مؤتمتة وقابلة للتكرار وموثوقة.
تستكشف هذه المقالة التفاصيل الفنية لإعداد خطوط أنابيب CI/CD لـ Kubernetes باستخدام GitLab CI.
المتطلبات الأساسية
قبل تكوين خط أنابيب CI/CD الخاص بك، تأكد من استيفاء المتطلبات التالية:
- حساب GitLab: الوصول إلى مستودع GitLab حيث سيتم تكوين خط أنابيب CI/CD.
- عنقود Kubernetes: عنقود Kubernetes موجود مثل Minikube (للاختبار المحلي) أو العناقيد المدارة مثل Google Kubernetes Engine (GKE) أو Amazon EKS أو Azure AKS.
- kubectl: يجب تثبيت أداة سطر الأوامر Kubernetes وتكوينها للتفاعل مع العنقود.
- Helm (اختياري): مدير حزم Kubernetes لنشر وإدارة التطبيقات.
- مشغل GitLab: تأكد من تثبيت مشغل GitLab وتسجيله بمشروعك لتنفيذ مهام CI/CD.
- دوكر: مطلوب لبناء ودفع صور الحاويات إلى سجل الحاويات.
إعداد تكامل Kubernetes مع GitLab
الاتصال بعنقود Kubernetes
دمج Kubernetes مع GitLab يتيح نشرًا سلسًا وإدارة الموارد مباشرة من خط الأنابيب الخاص بك. اتبع هذه الخطوات:
- اذهب إلى لوحة التحكم لمشروعك في GitLab.
- انتقل إلى البنية التحتية > مجموعات Kubernetes.
- انقر على إضافة مجموعة Kubernetes و إما ربط مجموعة موجودة أو إنشاء مجموعة جديدة باستخدام مقدمي الخدمات السحابية.
- خصص الأذونات المناسبة لـ GitLab باستخدام التحكم في الوصول القائم على الدور (RBAC).
تكوين RBAC
RBAC يحدد أذونات الوصول لموارد Kubernetes. أدناه مثال على تكوين YAML لإعداد 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
تطبيق التكوين
قم بتطبيق ملف YAML باستخدام kubectl
:
kubectl apply -f gitlab-rbac.yaml
توليد رمز للمصادقة
استخرج رمز حساب الخدمة المطلوب لـ GitLab:
kubectl -n default get secret $(kubectl -n default get sa/gitlab-sa -o jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | base64 --decode
الصق هذا الرمز في إعدادات تكوين Kubernetes في GitLab.
تكوين خط أنابيب CI/CD لـ GitLab
تعريف .gitlab-ci.yml
ملف تكوين CI في GitLab يحدد مراحل خط الأنابيب والمتغيرات والأوامر. أدناه مثال على التكوين:
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
تفسير التكوين
- المراحل: يتم تقسيم خط الأنابيب إلى مراحل البناء، والاختبار، والنشر للتنفيذ المودولي.
- المتغيرات: تسهل المتغيرات البيئية مثل علامات الصور والمساحات الإدارية إدارة التكوين.
- قبل السكريبت: يقوم بتثبيت التبعيات وإعداد مصادقة Kubernetes.
- وسم الصورة: يستخدم SHA الالتزام لتحديد كل إصدار صورة بشكل فريد.
- النشر: يقوم بتحديث نشر Kubernetes عن طريق تعيين صورة الحاوية.
إدارة الأسرار
يدعم GitLab CI إدارة الأسرار بشكل آمن باستخدام المتغيرات:
- انتقل إلى الإعدادات > CI/CD > المتغيرات.
- أضف المتغيرات المطلوبة مثل
KUBE_CONFIG
،CI_REGISTRY_USER
، وCI_REGISTRY_PASSWORD
.
قم بترميز kubeconfig
قبل إضافته كمتغير:
cat ~/.kube/config | base64 | tr -d '\n'
أضف النتيجة كـ KUBE_CONFIG
في GitLab.
نشر Helm
يبسط Helm عمليات نشر Kubernetes باستخدام المخططات القابلة لإعادة الاستخدام. مثال على تكوين 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
أضف أوامر Helm إلى خط الأنابيب:
deploy
stage deploy
script
helm upgrade --install my-app ./helm-chart --set image.tag=$IMAGE_TAG
أدوات المراقبة وإصلاح الأخطاء
راقب حالة خط الأنابيب في GitLab تحت CI/CD > خطوط الأنابيب. استخدم أدوات مثل:
- Prometheus و Grafana: للمقاييس والتصور.
- لوحة معلومات Kubernetes: إدارة العنقود.
- سجلات kubectl: جلب سجلات النشر.
kubectl logs -f deployment/my-app
الاستنتاج
يوضح هذا المقال كيفية تكوين أنابيب CI/CD لـ Kubernetes باستخدام GitLab CI. يغطي المقال المتطلبات الأساسية، تكوينات YAML، إدارة الأسرار، نشر Helm، وأدوات المراقبة. من خلال هذا الإعداد، يمكن للمطورين بناء، اختبار، ونشر التطبيقات المعبأة بحاويات بكفاءة وبشكل موثوق.
Source:
https://dzone.com/articles/cicd-pipelines-for-kubernetes-using-gitlab-ci