Helm — Kubernetes applicationlarini package, konfiguratsiya va release ko‘rinishida boshqarishga mo‘ljallangan vosita. U ko‘p Kubernetes resource manifestlarini bitta chart ichida birlashtiradi va turli environmentlar uchun parametrlar bilan qayta ishlatishga yordam beradi.
Helm Kubernetes’ning o‘rnini bosmaydi. U Kubernetes API uchun YAML resource’larni yaratadi va release lifecycle’ini boshqaradi.
Chart
Chart — Helm package’i.
Chart tarkibi odatda:
- metadata;
- default qiymatlar;
- template’lar;
- dependency;
- schema;
- yordamchi template;
- documentation
dan iborat.
Chart applicationning Kubernetes’da qanday joylashtirilishini ifodalaydi.
Chart tuzilishi
Keng tarqalgan fayllar:
Chart.yaml
values.yaml
templates/
charts/
Chart.yaml chart nomi, versiyasi va dependency metadata’sini saqlaydi.
values.yaml default configuration qiymatlarini beradi.
templates/ ichida Kubernetes manifest template’lari mavjud.
Template
Helm template qiymatlar asosida yakuniy YAML hosil qiladi.
Misol qiymatlar:
replicaCount
image.repository
image.tag
service.port
resources
Template mantiqi:
- condition;
- loop;
- function;
- include;
- default
ishlatishi mumkin.
Juda murakkab template chartni tushunish va testlashni qiyinlashtiradi.
Values
Values chartning parametrlarini boshqaradi.
Qiymatlar:
- default
values.yaml; - environment fayli;
- command-line parameter;
- parent chart;
- boshqa override
orqali berilishi mumkin.
Precedence yuqoriroq manba oldingi qiymatni bosadi.
Release
Chart clusterga o‘rnatilganda release hosil bo‘ladi.
ga ega.
Bitta chart bir clusterda bir necha release nomi bilan o‘rnatilishi mumkin.
Install
Install jarayonida Helm:
- chartni yuklaydi;
- dependencylarni tekshiradi;
- values’ni birlashtiradi;
- template render qiladi;
- Kubernetes APIga resource’larni yuboradi;
- release ma’lumotini saqlaydi.
Resource yaratish muvaffaqiyati application to‘liq sog‘lom ekanini har doim anglatmaydi.
Upgrade
Chart yoki values o‘zgarganda release upgrade qilinadi.
Helm yangi manifestlarni oldingi revision bilan solishtirib Kubernetesga yuboradi.
Upgrade:
- rolling update;
- resource replacement;
- hook;
- migration;
- timeout
kabi jarayonlarni ishga tushirishi mumkin.
Revision
Har muvaffaqiyatli yoki qayd qilingan release o‘zgarishi revision raqamiga ega.
Revision history rollback uchun ishlatiladi.
History storage hajmi va maxfiy values mavjudligi sabab retention boshqariladi.
Rollback
Rollback release’ni oldingi revision manifest va values’iga qaytaradi.
Bu database yoki tashqi side effectlarni avtomatik qaytarmaydi.
Agar yangi release schema migration qilgan bo‘lsa, oldingi application versiyasi yangi schema bilan mos bo‘lishi kerak.
Uninstall
Uninstall release’ga tegishli Kubernetes resource’larni olib tashlaydi.
Persistent volume, CRD yoki hook orqali yaratilgan ayrim resource’lar policy sabab saqlanishi mumkin.
Data yo‘qolish xavfi oldindan tekshiriladi.
Chart dependency
Chart boshqa chartlarga tayanishi mumkin.
Masalan, application charti cache yoki database chartini dependency sifatida ko‘rsatadi.
Dependency versiyasi pin qilinadi va lock file bilan saqlanishi mumkin.
Production database lifecycle’ini application release’iga qattiq bog‘lash ehtiyotkorlik talab qiladi.
Repository va registry
Chart package repository yoki OCI-compatible registryda saqlanishi mumkin.
- version;
- authentication;
- signature;
- retention;
- access
ni boshqaradi.
Chart source va package checksum orqali tekshiriladi.
Chart version va app version
Chart version package va template o‘zgarishini bildiradi.
App version esa chart deploy qiladigan application versiyasi haqida ma’lumot berishi mumkin.
Ikkalasi bir xil lifecycle’ga ega bo‘lishi shart emas.
Namespace
Release ma’lum Kubernetes namespace’da o‘rnatiladi.
Bir xil release nomi turli namespace’da mavjud bo‘lishi mumkin.
Cluster-scoped resource’lar esa namespace bilan cheklanmaydi va bir nechta release orasida conflict qilishi mumkin.
Hook
Hook release lifecycle’ining ma’lum bosqichida resource ishga tushiradi.
Misollar:
Database migration Job hook orqali bajarilishi mumkin.
Hook failure va qayta bajarilish idempotency talab qiladi.
CRD
Custom Resource Definition chart bilan o‘rnatilishi mumkin.
CRD lifecycle oddiy namespaced resource’dan farq qiladi.
CRDni o‘chirish unga tegishli barcha custom resource ma’lumotini yo‘qotishi mumkin.
Upgrade va ownership siyosati alohida boshqariladi.
Secrets
Values ichida secret saqlash xavfli bo‘lishi mumkin.
Helm release metadata’si cluster ichida values va manifestlarni saqlashi mumkin.
Secret manager, encrypted values yoki external secret operator ishlatilishi mumkin.
Repositoryga ochiq token qo‘shilmaydi.
Lint va template tekshiruvi
Chart release’dan oldin:
- metadata;
- template syntax;
- required value;
- YAML;
- schema;
- Kubernetes validation
bo‘yicha tekshiriladi.
Rendered manifestni ko‘rish values precedence va noto‘g‘ri indentationni aniqlashga yordam beradi.
Atomic upgrade
Atomic rejim upgrade muvaffaqiyatsiz bo‘lsa release’ni oldingi holatga qaytarishga urinadi. Bu Kubernetes resource’lariga tegishli bo‘lib, tashqi database migration yoki yuborilgan xabarlarni avtomatik bekor qilmaydi.
Schema validation
Values uchun JSON schema ishlatilsa type, required field va allowed qiymatlar install’dan oldin tekshiriladi. Bu template ichidagi kech xatolarni kamaytiradi.
Ownership
Bir Kubernetes resource’ni ikki release boshqarmasligi kerak. Existing resource label va annotationlari release ownershipini ko‘rsatishi mumkin.
Helm test
Chart maxsus test Pod yoki Job yaratib service DNS, port va oddiy application amallarini tekshirishi mumkin. Test release health checkining faqat bir qismi.
Release nomlash
Release nomi environment va applicationni aniq ko‘rsatadi. Barqaror nom monitoring, secret va tashqi integratsiya bilan bog‘lanishni soddalashtiradi.
Bog‘liq tushunchalar
Kubernetes, Helm chart, Release, Values, Template, Revision, Rollback, Chart repository, Hook, Custom Resource Definition