وقتی صحبت از مدیریت پیکربندی Kubernetes میشود، Helm یکی از ابزارهای کلیدی مورد استفاده بسیاری از سازمانها است. این مطلب بخشهای ساده اما ضروری از بهترین تمرینهای هلم (Helm) و نکات ضرروی آن را که باید هنگام استفاده از آنها در پروژههای سازمانی خود بدانید، پوشش میدهد.
استفاده از کامیونیتی چارت
نیازی به نوشتن تک تک نمودارهای Helm از ابتدا نیست زیرا ما نمودارهای Helm رسمی و انجمنی زیادی داریم که از همه بهترین تمرینها پیروی میکنند.
معمولا همه از این community charts به عنوان مرجع استفاده میکنند یا آنها را مستقیم برای مطابقت با نیازهای پروژه خود با رعایت دستورالعملهای امنیتی تغییر میدهند. این نمودارهای سفارشی سپس در یک رجیستری داخلی Helm (مانند JFrog، S3 و غیره) میزبانی میشوند.
با این حال، بدون درک چارت کامیونیتی Helm، اگر سعی در نصب و پیکربندی آن داشته باشید، احتمالا بدون درک روشنی از آنچه اتفاق میافتد، به طور گسترده عیبیابی خواهید شد.
برای توضیح بیشتر، از Prometheus Helm Chart به عنوان مثال استفاده خواهیم کرد.
درک SubCharts
فرض کنید چارت Prometheus Helm را نصب میکنید. این نمودار اجزای زیر را نصب خواهد کرد:
- Prometheus Server
- AlertmanagerKube State Metrics
- Node Exporter
- Pushgateway
با این حال، این چارت فقط شامل تمپلیتهایی برای Prometheus Server است.
برای سایر کامپوننتها، مانند Alertmanager، Kube State Metrics، Node Exporter و Pushgateway، از چارتهای وابستگی (subcharts) نصب میشوند.
اگر فایل Chart.yaml را بررسی کنید، وابستگیهای چارت اضافه شده را در آنجا مشاهده خواهید کرد.
این بدان معناست که هنگام استفاده از نمودار در شبکههای داخلی پروژه، باید زیرچارتهای استفاده شده به عنوان وابستگی (مثلا Alertmanager، Kube State Metrics، Node Exporter و غیره) را از مخازن مربوطه دانلود کنید.
پس از دانلود و بررسی این چارتهای وابستگی (مثلا Alertmanager، Kube State Metrics)، آنها را به charts/ دایرکتوری نمودار اصلی خود منتقل کنید.
در مرحله بعد، فایل اصلی Chart.yaml را تغییر دهید تا وابستگیهای خارجی حذف شوند و فقط به زیرنمودارهای محلی ارجاع داده شوند.
Public Registry Images
تمام کامیونتی هلم چارتها به طور پیشفرض از public registry images استفاده میکنند.
با این حال، سازمانهایی که از رعایت دقیق امنیت پیروی میکنند، هرگز اجازه استفاده از ایمیجهای عمومی را نمیدهند.
در عوض، شما باید ایمیجهای خود را با استفاده از ایمیجهای پایه تایید شده سازمان بسازید. دلیل این امر این است که حتی Docker images نیز باید چرخههای عمر وصلهگذاری (patching lifecycles) را برای رعایت استانداردهای امنیتی طی کنند.
برخی از سازمانها ممکن است اجازه استفاده از ایمیج پایه رسمی را بدهند، اما این ایمیج هم باید به طور منظم، معمولا ظرف ۱ تا ۳ ماه، بسته به چرخه عمر وصلهگذاری، وصله شود.
شناسایی ایمیجهای استفاده شده
اگر چارت Prometheus Helm را به عنوان مثال در نظر بگیرید، ممکن است فرض کنید که فقط کامپوننتهای Prometheus را نصب میکند.
با این حال، اگر chart و subchartهای آن را با دقت بررسی و ایمیج استفاده شده را لیست کنید، ایمیجهای اضافی مانند ایمیج Config Reloader و موارد دیگر را خواهید یافت.
به عنوان مثال،
$ helm list-images prometheus-community/Prometheus quay.io/prometheus-operator/prometheus-config-reloader:v0.73.2 quay.io/prometheus/alertmanager:v0.27.0 quay.io/prometheus/node-exporter:v1.8.0 quay.io/prometheus/prometheus:v2.52.0 quay.io/prometheus/pushgateway:v1.8.0 registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.12.0
اگر استقرار را از یک شبکه اشتراکی اجرا میکنید، ممکن است به دلیل محدودیتهای شبکه یا سیاستهای امنیتی به ایمیجهای عمومی دسترسی نداشته باشید.
برای استقرار چارت در چنین محیطهایی، ابتدا باید این ایمیجهای مورد نیاز را به رجیستری کانتینر خصوصی سازمان خود ارسال کنید.
اگر دستورالعملهای امنیتی به شما اجازه نمیدهد community images را مستقیم به رجیستریهای خصوصی (Private) ارسال کنید، باید ایمیجهای خود را با استفاده از Dockerfiles ارجاع شده توسط community charts بسازید.
تبدیل چارت به مانیفست YAML
اگر میخواهید همه چیز را در مورد Helm chart، مانند اشیاء ایجاد شده، مقادیر پیشفرض و پیکربندیهای آنها، درک کنید، میتوانید چارت را به مانیفستهای YAML تبدیل کنید.
برای مثال، برای مشاهده تمام مانیفستهای YAML نمودار Prometheus، میتوانید چارت را با استفاده از دستور زیر به فایلهای YAML ساده تبدیل کنید:
$ helm template prometheus-community prometheus-community/prometheus --output-dir prometheus-manifests
در اینجا ساختار درختی مانیفست آمده است که به شما ایده روشنی از تمام اشیاء مورد استفاده میدهد.
➜ prometheus-manifests tree . └── prometheus ├── charts │ ├── alertmanager │ │ └── templates │ │ ├── configmap.yaml │ │ ├── serviceaccount.yaml │ │ ├── services.yaml │ │ └── statefulset.yaml │ ├── kube-state-metrics │ │ └── templates │ │ ├── clusterrolebinding.yaml │ │ ├── deployment.yaml │ │ ├── role.yaml │ │ ├── service.yaml │ │ └── serviceaccount.yaml │ ├── prometheus-node-exporter │ │ └── templates │ │ ├── daemonset.yaml │ │ ├── service.yaml │ │ └── serviceaccount.yaml │ └── prometheus-pushgateway │ └── templates │ ├── deployment.yaml │ ├── service.yaml │ └── serviceaccount.yaml └── templates ├── clusterrole.yaml ├── clusterrolebinding.yaml ├── cm.yaml ├── deploy.yaml ├── pvc.yaml ├── service.yaml └── serviceaccount.yaml
مقادیر پیشفرض
هنگام استقرار Helm chart ، درک مقادیر پیشفرض تعریف شده در فایل values.yaml مهم است.
اگر از کامیونیتی چارت برای پروژه خود استفاده میکنید، باید فایل values.yaml را برای برآورده کردن نیازهای خاص محیط خود سفارشی کنید.
به عنوان مثال،
میتوانید با استفاده از دستور زیر، تمام مقادیر پیشفرض را از چارت در یک فایل values.yaml استخراج کنید:
helm show values prometheus-community/prometheus > values.yaml
معمولا پروژهها برای محیطهای توسعه، مرحلهبندی و پروداکشن به پیکربندیهای متفاوتی نیاز دارند.
با ایجاد فایلهای values.yaml جداگانه برای هر محیط، میتوانید تنظیمات را متناسب با نیازهای خاص سفارشی کنید.
به عنوان مثال،
• values-dev.yaml: از کپیهای کوچک و بدون ماندگاری برای صرفهجویی در هزینه استفاده کنید.
• values-prod.yaml: از محدودیتهای منابع بالا استفاده کنید و برای قابلیت اطمینان، پایداری را فعال کنید.
خرید سرور مجازی با منابع قابل انتخاب، تحویل آنی، و کنترل کامل روی سیستمعامل؛ همین حالا پلن مناسب خود را انتخاب کنید.
بهترین شیوههای Chart.yaml
از نسخهبندی معنایی (مثلا ۱.۰.۰) هم برای چارت (version) و هم برای اپلیکیشن (appVersion) استفاده کنید.
version: 1.2.3 # Chart version appVersion: 4.5.6 # Application version
همچنین، توضیحات معنادار، کلمات کلیدی و فیلدهای maintainer را برای قابل کشف و قابل نگهداری کردن چارت خود اضافه کنید.
تست و اعتبارسنجی
برای گرفتن خطاها و اجرای قراردادها قبل از انتشار، helm lint را اجرا کنید.
helm lint ./my-chart
این دستور موارد زیر را بررسی میکند:
• فرمت مناسب YAML
• فیلدهای الزامی در Chart.yaml
• خطاهای رایج سینتکس تمپلیت
• نقض بهترین شیوهها
قبل از استقرار در هر محیطی، از ویژگی dry-run برای تایید آنچه Helm واقعا تولید میکند استفاده کنید:
helm install my-release ./my-chart --dry-run --debug
نتیجهگیری
این فقط نکات اساسی برای کمک به شما در صرفهجویی در زمان و پیروی از شیوههای خوب هنگام کار با کامیونیتی چارت Helm است.
شیوههای برتر بسیار بیشتری برای بررسی وجود دارد، اما آنها خارج از محدوده این مطلب هستند.