Kubernetes (k8s) + Helm + GitLab CI / CD. نشر بشكل صحيح

في هذه المقالة ، أريد أن أخبرك عن كيفية نشر التطبيقات في بيئات مختلفة. في هذا المثال ، سننشر في: "اختبار" و "إنتاج". بالطبع ، يمكنك إضافة أي بيئة.

لنشر التطبيقات ، أستخدم HELM. يسمح بإدارة تكوين مرنة. ما يمكنك رؤيته أدناه. من المفترض أن لديك بالفعل عداء مهيأ مع الدفة وأنك تعرف وتعرف كيف تعمل مع HELM.

ملف مثال: .gitlab-ci.yml

.base_deploy: &base_deploy stage: deploy script: - PROJECT_NAME="${CI_PROJECT_NAME}-${CI_ENVIRONMENT_SLUG}" - helm --namespace ${CI_ENVIRONMENT_SLUG} upgrade -i ${PROJECT_NAME} helm --set "global.env=${CI_ENVIRONMENT_SLUG}"; stages: - deploy Deploy to Test: <<: *base_deploy environment: name: test Deploy to Production: <<: *base_deploy environment: name: production when: manual 

يجدر الانتباه إلى حقيقة أنه ، اعتمادًا على البيئة ، نمر متغيرًا: "اختبار" أو "إنتاج".

نقوم أيضًا بإنشاء اسم المشروع مع مراعاة اسم المتغير ، بحيث تدرك شركة Helm أن هذه مشروعات مختلفة (helm ls).

بعد ذلك ، نمرر هذا المتغير (البيئة) إلى HELM كـ: "global.env".

بالنسبة للمثال أعلاه ، يجب وضع الدفة في نفس المجلد في مستودعك.

لنلقِ نظرة الآن على مثال لكيفية استخدام متغير البيئة في مخططات HELM.

إنشاء مثل هذه القيم. yaml :

 replicas: test: 1 production: 3 domain: test: test.domain.com production: production.domain.com resources: requests: cpu: _default: 50m production: 50m memory: _default: 256Mi production: 10Mi limits: memory: _default: 1Gi production: 1Gi cpu: _default: 1000m 

هنا يمكنك أن ترى أنه في البيئات المختلفة نحدد إعدادات مختلفة.
للراحة ، يمكنك تحديد الإعدادات الافتراضية.

مثال آخر على ingress.yaml:

 apiVersion: extensions/v1beta1 kind: Ingress metadata: name: {{ .Chart.Name }} spec: rules: - host: {{ pluck .Values.global.env .Values.domain | first | default .Values.domain._default }} http: paths: - path: / backend: serviceName: {{ .Chart.Name }} servicePort: 80 

يمكنك دائمًا التحقق من سير مخططك بواسطة الأمر:

 helm template ./helm --set "global.env=test" helm template ./helm --set "global.env=production" 

يمكنك أيضًا نشر الكود الخاص بك في العقد المختلفة اعتمادًا على البيئة.

مثال:

 {{ if eq .Values.global.env "test" }} nodeSelector: nodetype: testnodes {{ else if eq .Values.global.env "production" }} nodeSelector: nodetype: productionnodes {{ else }} 

شكرا لكم جميعا. نشر بشكل صحيح.

Source: https://habr.com/ru/post/ar422493/


All Articles