كيفية إعداد Gitlab CI / CD مع Google Cloud Container Registry و Kubernetes

التكامل المستمر والتسليم المستمر والحاويات والمنصات السحابية و Docker و Kubernetes ليست مصطلحات وتكنولوجيات جديدة تمامًا (بعض اللاعبين الكبار يتعاونون معهم لبضع سنوات) ، لكن ربطهم معًا ليس بالأمر السهل. خاصة عندما لا تعرف ما و / أو مكان البحث عنه. علاوة على ذلك ، فإنه يفتقر إلى الوثائق الكافية. لقد عثرت على الكثير من المقالات حول ما كان كل واحد من هذه المقالات ، بعضًا من الإرشادات الجيدة ولكن لا يوجد ما يقرب من الطريقة التي أحتاجها لعملي. لهذا السبب قررت مشاركة فكرة المفهوم لدينا: للحصول على بعض الأفكار ومساعدة الآخرين في العثور على ما يناسبهم بشكل أفضل.

التكامل المستمر مقابل التسليم المستمر مقابل التوزيع المستمر من قبل Saviant Consulting

TL، DR. دليل صغير عبر gitlab-ci.yml والحاويات و Google Cloud و kubernetes لتحقيق التكامل المستمر والتوصيل المستمر والنشر المستمر.

نُشر في 3 تموز (يوليو) 2018
تم التحديث في 5 ديسمبر 2018

باستخدام هذا الدليل ، يجب أن تكون قادرًا على دفع تغييراتك إلى مستودع Gitlab ، وبدء عملية البناء في Google Container Registry and Builder ونشر الحاويات على كتلة في Google Cloud Platform Kubernetes Engine. علاوة على ذلك ، يمكنك الحصول على بيئات مختلفة عبر الإنترنت لمراجعة الفروع وشهادات SSL أيضًا.

أنا لست DevOps ، أنا مجرد رجل علمني وفضولي ، لذلك يجب عليك أن تتطلع إلى هذا البرنامج التعليمي مع بعض السلطة التقديرية ومحاولة استخراج أفضل ما يناسبك أنت وعملك. دعونا التحقق من ذلك.

ملاحظة: لن أخوض في تعريفات كل مفهوم. أفترض أنك على الأقل مبتدء في كل هذه الأمور: Gitlab ، تعرف ما هو / يعني CI / CD ، Google Cloud Platform ، Docker ، Containers ، SSL ، Kubernetes Cluster.

المتطلبات

  • هنا يمكنك العثور على الكود المصدري لهذا المشروع النموذجي باستخدام ملفات yaml Dockerfile و Kubernetes و gitlab-ci.yml. قم بنسخه إلى مستودع Gitlab الخاص بك أو أضف هذه الملفات إلى مشروعك الحالي في Gitlab.
  • يجب أن يكون لديك حق الوصول إلى مشروع Google Cloud Platform المتصل بحساب الفاتورة
  • يجب عليك تمكين واجهات برمجة التطبيقات من Google لبناء الحاويات ومحرك حساب
  • مستودع Gitlab
  • DNS wildcard (على سبيل المثال. * .my.custom.domain.com)

أنشئ حساب خدمة في مشروع Google Cloud الخاص بك باستخدام أدوار Viewer و Cloud Builder و Admin Storage

لقد واجهت بعض الشيء مع الأذونات الصحيحة لحساب الخدمة الخاص بي ولكن بعد إجراء بعض عمليات الحفر ، وجدت هنا أن هناك مطورين آخرين يواجهون نفس المشكلة. لقد كان GC IAM عربات التي تجرها الدواب قليلاً منذ أن أضفت الأذونات الصحيحة بعد إنشاء حساب الخدمة الخاص بي (على سبيل المثال. تمت إضافة دور "المشاهد بعد") ، لم يتم تحديث الأذونات واستمرار حدوث الأخطاء. ولكن عند إنشاء حساب الخدمة مع جميع الأدوار الثلاثة ، كل شيء يعمل بشكل جيد.

  • انتقل إلى Google Cloud IAM> حسابات الخدمة
  • قم بإنشاء حساب خدمة باستخدام الأذونات الصحيحة وحدد "تقديم مفتاح خاص جديد" لتنزيل ملف json باستخدام بيانات اعتمادك

قم بإنشاء مجموعة Kubernetes في مشروع Google Cloud الخاص بك

ستتلقى مجموعة Kubernetes صورك وتعتني بمواردك. لن أتطرق إلى التعريفات والخصوصيات حول Kubernetes والحاويات والقرون والبرك والعُقد وما إلى ذلك ، يمكنك العثور عليها هنا ، هنا وهنا.

  • إنشاء مجموعة جديدة في Kubernetes Engine
  • املأ الحقل بالحجم ونوع الماكينة المطلوبين لاحتياجات المشروع

سأستخدم التكوين الافتراضي لجميع الحقول ولكن يجب تمكين التخويل القديم حتى يتمكن Gitlab من تثبيت التطبيقات.

  • انقر فوق الزر "إنشاء" وانتظر حتى تصبح مجموعتك جاهزة. بعد بضع دقائق ، انقر فوق اسم المجموعة الخاصة بك لمعرفة المزيد من المعلومات حول هذا الموضوع. هناك سترى عنوان نقطة نهاية نظام المجموعة ورابطًا يسمى "إظهار بيانات الاعتماد". ستحتاج إلى هذه المعلومات لاحقًا.

تثبيت Google Cloud SDK و Kubectl

نحتاج إلى Google Cloud SDK (gcloud shell) و Kubectl لتنفيذ أمرين في الجهاز.

  • اتبع هذه التعليمات من Google Cloud لتثبيت SDK
  • تثبيت مكون Kubectl على gcloud الخاص بك مع الأمر التالي
مكونات gcloud تثبيت kubectl

أضف Kubernetes Cluster إلى مشروع Gitlab CI / CD

الآن دعونا نربط Gitlab بك مع مجموعة Kubernetes الخاصة بك.

  • داخل مشروع Gitlab الخاص بك ، ستجد قائمة Kubernetes في قائمة العمليات> Kubernetes.
  • انقر فوق "إضافة مجموعة Kubernetes"> "إضافة مجموعة Kubernetes موجودة"
  • ملء الحقول بالقيم التي لديك للكتلة الخاصة بك
    - اسم كتلة Kubernetes: اسم الكتلة الخاص بك (على سبيل المثال ، عينة مشروع الكتلة)
    - نطاق البيئة: اتركه مع ذلك (البيئات ذات المجموعات المختلفة تقع خارج نطاق هذه المقالة ، في الوقت الحالي)
    - عنوان URL لواجهة برمجة التطبيقات: https: // your_cluster_endpoint_ip (يمكنك العثور على هذه المعلومات على لوحة معلومات المجموعة المعروضة من قبل)
    - شهادة المرجع المصدق (CA): يمكنك العثور على هذه المعلومات بالنقر فوق "إظهار بيانات الاعتماد" على لوحة معلومات المجموعة التي تم عرضها من قبل
    - الرمز المميز: لإحضار الرمز المميز ، سنستخدم أداة سطر الأوامر مع الأوامر التالية
## المتغيرات ##
# [KUBE_NAME]: اسم نظام المجموعة الخاص بك (على سبيل المثال ، نموذج مشروع مجموعة)
# [KUBE_URL]: https: // your_cluster_endpoint_ip
# [KUBE_USER]: مستخدم نظام المجموعة (انتقل إلى "إظهار بيانات الاعتماد" في لوحة معلومات نظام المجموعة)
# [KUBE_PASSWORD]: كلمة مرور نظام المجموعة (انتقل إلى "إظهار بيانات الاعتماد" في لوحة معلومات نظام المجموعة)
## أوامر ##
مجموعة مجموعة $ kubectl config [KUBE_NAME] --server = "[KUBE_URL]" --التأمين-skip-tls-check = true
مجموعة بيانات اعتماد مجموعة kubectl $ - admin --username = "[KUBE_USER]" --password = "[KUBE_PASSWORD]"
الإعداد الافتراضي لتكوين سياق $ $ kubectl --cluster = [KUBE_NAME] - المستخدم = مسؤول نظام المجموعة
$ kubectl config استخدام السياق الافتراضي
kubectl $ الحصول على أسرار

إذا لم يتم العثور على موارد ، فهناك ملف yml في الكود المصدري الخاص بنا مع إنشاء دور افتراضي. فقط قم بتشغيل الأوامر التالية:

تطبيق kubectl $ -f kubernetes.roles.yml
kubectl $ تصف الأسرار

بعد ذلك يمكنك نسخ الرمز المميز الخاص بك إلى الحقل المذكور أعلاه.
- مساحة اسم المشروع (اختياري ، فريد): اتركه فارغًا ، وسوف نستخدم مساحة الاسم الافتراضية لهذا المشروع النموذجي.

أخيرًا انقر فوق إضافة كتلة kubernetes.

تثبيت Gitlab عداء والتطبيقات الأخرى في الكتلة الخاصة بك

ستعرض الشاشة التالية معلومات حول نظامك وخيارات تثبيت عدد قليل من التطبيقات لمراقبة kubernetes وإدارتها. تثبيت التطبيقات التالية:

  • هيلم تيلر: سوف تدير وتثبيت التطبيقات القادمة.
  • الدخول: سيؤدي ذلك إلى إدارة طرق عناوين url وبيئات مراجعة ssl والفروع. انتظر حتى يعرض ip دخولك وحفظه في وقت لاحق.
  • Gitlab Runner: عداء سوف يتصل بمستودعنا ويقوم بتشغيل CI / CD.
  • تلك الأخرى اختيارية.

ضبط المتغيرات

سنقوم بتعيين بعض متغيرات Gitlab Project لاستخدامها في ملفات نشر Kubernetes الخاصة بنا. باستخدامه بهذه الطريقة ، يمكننا أن نجعل ملفات النشر جاهزة للاستخدام في مشروع آخر بسهولة أكبر. انتقل إلى الإعدادات> CI / CD> المتغيرات.

أضف مفتاح المتغيرات التالية والقيم:
- KUBE_NAME: اسم الكتلة
- KUBE_USER: مستخدم نظام المجموعة kubernetes
- KUBE_PASSWORD: كلمة مرور مسؤول نظام kubernetes
- GCP_PROJECT_ID: معرف مشروع سحابة Google (أو الاسم)
- GCP_SERVICE_KEY: بيانات اعتماد حساب الخدمة الخاص بك JSON (الحساب الذي أنشأناه وتنزيله في الخطوة الأولى). يمكنك نسخ بنية الملف بالكامل هنا:

{
  "النوع": "service_account" ،
  "project_id": "sample-project-id"،
  "private_key_id": "xxxxx" ،
  "private_key": "----- BEGIN PRIVATE KEY ----- \ n ----- END PRIVATE KEY ----- \ n"،
  "client_email": "email@iam.gserviceaccount.com"،
  "client_id": "1234567890" ،
  "auth_uri": "https://accounts.google.com/o/oauth2/auth" ،
  "token_uri": "https://accounts.google.com/o/oauth2/token" ،
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs" ،
  "client_x509_cert_url": ""
}

- GCP_APP_NAME: اسم التطبيق أو الصورة (على سبيل المثال ، تطبيق my-sample-app و my-sample-image)
- MY_DOMAIN: نطاقك (على سبيل المثال ، sample-project.my.custom.domain.com)
- USE_SSL: صواب أم خطأ (حسب ما إذا كنت تخطط لاستخدام https لنشرك)

ملاحظة: لا يمكن حماية المتغيرات الخاصة بك لأننا سوف نستخدم بيئات مختلفة لفروع مختلفة.

سنستخدم هذه المتغيرات لاستبدالها في ملفات قوالب Kubernetes yml:
- kubernetes.tpl.deployment.yaml
- kubernetes.tpl.ingress.yaml أو kubernetes.tpl.ingress-ssl.yaml
- kubernetes.tpl.service.yaml

يمكنك التحقق من كل من هذه الملفات للحصول على فهم أفضل لكل واحد من هذه الملفات. في الأساس ، ما عليك سوى نشر. yaml هو قرون Kubernetes ونسخ طبق الأصل داخل مجموعتنا. إن ingress.yaml هو باب الدخول إلى برنامج LoadBalancer الخاص بنا و service.yaml هي الخدمة التي تربط برنامج loadbalancer بأقراصنا.

SSL واستعراض الفرع

يمكنك تخطي طبقة المقابس الآمنة وتعيين USE_SSL على خطأ. ومع ذلك ، بالنسبة لهذا النشر ، اخترت الذهاب مع دعم طبقة المقابس الآمنة (SSL) واستخدمت يتيح تشغيل تشفير و certbot على Ubuntu 16.04 و NGINX. يتيح لك Letsencrypt.org إنشاء شهادتك والتحقق من صحتها مجانًا والحصول على دعم DNS wildcards. ولكن يمكنك اختيار مزود آخر كذلك. فقط قم بتخزين المفاتيح الخاصة بك تحت المجلد ssl_certs /. دعونا تشفير المكالمات ملف cert.crt كـ fullchain.pem و key.crt كـ privkey.pem. إذا كنت تستخدم مزودًا آخر ، فما عليك سوى إعادة تسمية ملفاتك.

أمر إنشاء شهادة wildcard لنطاقك (أوبونتو 16.04 و nginx مع تثبيت certbot):

sudo certbot certonly - server https://acme-v02.api.letsencrypt.org/directory - اليدوية - التحديات المفضلة لنظام أسماء النطاقات - d '* .my.custom.domain.com، my.custom.domain.com '

سيساعدنا نطاق البدل على إعداد عناوين URL لمراجعات فرع البيئة. من خلال التكوين الخاص بنا ، سننتهي بالهيكل التالي:
- production.my.custom.domain.com
- التدريج. my.custom.domain.com
- review-my- custom-branch-1.my.custom.domain.com
- review-my- custom-branch-2.my.custom.domain.com

لتحقيق ذلك ، انتقل إلى موفر DNS الخاص بك وقم بتوجيه مجال البدل لـ IP Ingress الخاص بك. قمت بحفظ الملكية الفكرية من قبل لهذه الخطوة ؛)

شاهد السحر يحدث

قم بإجراء بعض التغييرات على ملف src / index.html ، وادفع الرمز إلى مستودعك وشاهد سحر CI والأقراص المضغوطة يحدث.

إذا كان كل شيء يسير وفقًا لذلك ، يجب أن تشاهد خط أنابيب التشغيل 3 خطوات دون أي أخطاء: اختبار وبناء ونشر على خشبة المسرح. سيستخدم Gitlab ملف .gitlab-ci.yml لإنشاء وتشغيل خط الأنابيب. هذا هو سر السحر !!

بالنسبة إلى نموذج التعليمة البرمجية هذا ، فقد استخدمت العدائين المشتركين وحساب Gitlab المجاني واستغرق الأمر حوالي 5 دقائق لتشغيل كل شيء. في شركتنا لدينا حساب مستضاف من Gitlab ونستخدم عدائين محددين ويعمل نفس خط الأنابيب في 42 ثانية.

بعد ذلك ، انتقل إلى https://staging.gitlab-ci-google-cloud-kubernetes.sample-project.subdomain.domain.com وانظر الرسالة "نموذج مشروع". يمكنك تعديل عناوين URL بالطريقة التي تفضلها. يمكن أن يكون شيء مثل staging.mydomain.com أو مجرد mydomain.com.

لاستخدام مراجعات الفرع ، ما عليك سوى إنشاء فرع جديد وإجراء بعض التغييرات في ملف index.html ، ودفع الرمز الخاص بك وانتظر تشغيل خط الأنابيب. بعد ذلك انتقل إلى العمليات> البيئات. سترى بيئة جديدة ضمن مجلد المراجعة وزر لزيارة عنوان URL للفرع.

الخلاصة والخطوات التالية

آمل أن يساعدك هذا البرنامج التعليمي في إعداد خط أنابيب CI / CD صغير ونشر حاوياتك على Google Cloud Platform Kubernetes. كما كتبت من قبل ، أنا لست DevOps وكان كل ما وضعته هنا هو ثمرة بعض الدراسة والتفاني والقهوة. هناك مجال للتحسين في هذا الرمز ويمكنك تعديل الطريقة التي تفضلها وتناسبك بشكل أفضل. خطواتي التالية هي نشر الكناري ، واستعادة قواعد البيانات ، ومراقبة الأداء ، والاختبارات ، إلخ. ليس بالضرورة بهذا الترتيب.

إذا كنت تريد أن تدير مجموعتك شهادات SSL الخاصة بك وأنشئها وتجديدها ، فهناك برنامج تعليمي آخر حول كيفية إعداد مدير الشهادات باستخدام Let’s Encrypt في نظام Kubernetes الخاص بك.

اراك لاحقا!