Ali
Ali
خواندن ۳ دقیقه·۲ ماه پیش

پیاده سازی Gitlab-Runner روی کلاستر Kubernetes

بیشترین جاهای استفاده شده از Gitlab-Runner روی سرورها به صورت native بوده یا نهایتش Docker.

خیلی دیگه نهایتش، این بود که یه تغییری روی executorش میدادیم (مثلا میزاشتیم روی داکر یا shell) و استفاده میکردیم.

از kubernetes executor استفاده میکنیم در کلاستر kubernetes برای ساخت اپلیکیشن، این executor با کال کردن API کلاستر یک pod به ازای هر CI job بالا میاره.


در واقع kubernetes executor مراحل ساخت رو به چند مرحله تقسیم میکنه:

  • آماده سازی: یک pod در کلاستر ایجاد میشه، این پاد نیاز هستش جهت ساخت و یا اجرای سرویس ساخته بشه.
  • پیش-ساخت یا قبلِ-ساخت: این مرحله بابت کلون کردن یا ریستور cache و یا حتی گرفتن artifact از جاب stage های قبلی هستش، این مرحله یک کانتینر به خصوصی رو به عنوان بخشی از pod ایجاد میکنه.
  • ساخت: مرحله ساختن، مخصوص کاربر جهت بررسی دسترسی (توی کوبر با serviceaccount شناخته میشه).
  • پس از ساخت - بعد از ساخت: ساخت cache یا آپلود کردن artifact در Gitlab. این مرحله هم یک کانتینر به خصوصی رو به عنوان بخشی از pod بالا میاره.

پیش نیاز

قبل از این که سراغ نصب و پیاده سازی اصل داستان بریم، برای تمیز پیش رفتن و بجای این که بریم همه چی رو به insecure تغییری بدیم، cert-manager رو نصب میکنیم.

انتظار میره روی کلاسترتون ingress رو داشته باشین

برای نصب cert-manager به صورت خوشگل و best-practice مثل همیشه با Helm پیش میریم.

install cert-manager
install cert-manager

بعد از نصب cert-manager ما یک ClusterIssuer تعریف میکنیم که بتونیم گواهینامه ssl رو دریافت کنیم، (این کار رو کنین تا هر وقت نیاز به ssl داشتین به صورت خودکار خودِ cert-manager براتون اوکی کنه)

clusterissuer yaml file
clusterissuer yaml file



پیاده سازی Gitlab Runner Operator

در واقع operator برای مدیریت چرخه حیات (lifecycle) هستش، چرخه حیاتِ gitlab runner در کلاستر kubernetes و یا open-shift.

هدف از operator این هستش که وظایف (tasks) مورد نیاز برای اجرای CI/CD در کلاستر رو خودکار کنه.

برای نصب operator نیاز هستش کلاستر کوبر از ورژن 1.27 به بعد باشه و همین طور operator ما هم ورژنی که معرفی شده 0.28 هستش که نصب میکنیم.

نصب Gitlab Runner Operator

در مرحله اول، نصب Operator Lifecycle Manager (OLM)، که ابزاری برای کمک به مدیریت operatorهای در حال اجرا روی کلاستر هستش و بعد از آن نصب خودِ Operator.

در نظر داشته باشید operator ما روی نیم اسپیس operators هستش
install OLM and Operator
install OLM and Operator

نمونه خروجی بعد از نصب موفق آمیز:

get all operators namespace
get all operators namespace


پیاده سازی Gitlab Runner

مثل همیشه ما از Helm استفاده کردیم و تغییراتی که نیاز هستش رو روش اعمال کردیم، یک سری تغییرات نیاز هستش که انجام بشه، مثلا اجازه این که رانر بتونه در کل کلاستر اپلیکیشن رو اجرا کنه نه فقط در namespaceی که بهش داده شده (یعنی دسترسی داشته باشه به بقیه namespaceها) - همین طور رولی که دسترسی داشته باشه به ساخت یا آپدیت و یا حتی دیلیت resourceهایی که در pipeline تعریف میشه، این مورد بسته به نیاز شما و pipeline شما تغییر میکنه:

GitLab Runner Helm Chart
GitLab Runner Helm Chart


در تصویر بالا تمامی نمونه تغییراتی هستش که نیاز داشتیم روی values فایل برای runner بدیم.

بعد از تغییراتی که خواستیم و اعمال کردیم میریم سراغ نصب gitlab-runner:

 install gitlab-runner
install gitlab-runner

بعد از نصب هم میتونیم ازش با دستور kubectl get all -n gitlab-runner مطمئن بشیم:

get all gitlab-runner namespace
get all gitlab-runner namespace


خلاصه مطلب

بعد از مراحل بالا شما gitlab-runnerتون به صورت کامل اماده هستش و میتونین pipelineهای خودتون رو اجرا کنین، شاید سوال باشه که چرا cert-manager استفاده شده چون یکی از پیش نیاز های operator هستش و باید از ورژن 1.7.1 به بعد هم باشه.

سعی کردم تمام مراحل رو به صورت جزئی بزارم، ولی اگه جایی اشتباهی وجود داره و یا موردی هستش خودشحال میشم باهام در ارتباط باشین.


منابع:

Install GitLab Runner Operator

GitLab Runner Helm Chart

Kubernetes executor

gitlabkubernetesgitlab runneroperatorscontainer
خلاصه‌ای از همه چی، یه DevOps ساده که سعی میکنه چیزای جدید رو یاد بگیره، و با لبخند ادامه میده.
شاید از این پست‌ها خوشتان بیاید