Kubernetes (k8s) + Helm + GitLab CI / CD. Sebarkan dengan benar

Pada artikel ini saya ingin memberi tahu cara menggunakan aplikasi ke lingkungan yang berbeda. Dalam contoh ini, kami akan menyebarkan ke: "Uji" dan "Produksi". Tentu saja, Anda dapat menambahkan lingkungan apa pun.

Untuk menyebarkan aplikasi, saya menggunakan HELM. Ini memungkinkan manajemen konfigurasi yang fleksibel. Apa yang bisa Anda lihat di bawah ini. Diasumsikan bahwa Anda sudah memiliki pelari yang dikonfigurasi dengan helm dan Anda tahu dan tahu cara bekerja dengan HELM.

Contoh file: .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 

Perlu memperhatikan fakta bahwa, tergantung pada lingkungan, kita melewati variabel: "test" atau "production".

Kami juga membuat nama proyek dengan mempertimbangkan nama variabel, sehingga helm memahami bahwa ini adalah proyek yang berbeda (helm ls).

Selanjutnya, kami meneruskan variabel ini (lingkungan) ke HELM sebagai: "global.env".

Untuk contoh di atas, helm harus berada di folder yang sama di repositori Anda.

Sekarang mari kita lihat contoh bagaimana menggunakan variabel lingkungan di HELM Charts.

Buat nilai- nilai tersebut.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 

Di sini Anda dapat melihat bahwa untuk lingkungan yang berbeda kami tentukan pengaturan yang berbeda.
Untuk kenyamanan, Anda dapat menentukan pengaturan default.

Contoh lain untuk 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 

Anda selalu dapat memeriksa bagaimana Grafik Anda berjalan dengan perintah:

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

Anda juga dapat menggunakan kode Anda ke beberapa node tergantung pada lingkungan.

Contoh:

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

Terima kasih semuanya. Sebarkan dengan benar.

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


All Articles