☸️ Kubernetes: مکانیزم جایگزینی متغیر مناسب برای Kustomize

Summarize this content to 400 words in Persian Lang
Kustomize یکی از ابزارهای برجسته در کنار Helm است که برای مدیریت و پیکربندی استقرار Kubernetes در چندین محیط استفاده می شود. برخلاف Helm که از قالبها استفاده میکند، Kustomize مدیریت را با تمرکز بر نمایشهای ساده بدون مقایسه مستقیم با رویکرد Helm ساده میکند.
جایگزینی متغیر زمانی که محیطها زودگذر هستند، مانند شاخههای ویژگی، یا زمانی که تنظیمات پیکربندی مانند ورودیهای DNS نیاز به تعیین پویا در زمان استقرار دارند، بسیار مهم میشود. Kustomize یک لیست محیط ثابت را در نظر می گیرد (به عنوان مثال، dev/staging/prod)، اما استفاده عملی Kubernetes اغلب به انعطاف پذیری بیشتری نیاز دارد.
بزرگترین مزیت Kustomize در رویکرد مستقیم آن برای مدیریت مانیفست ها نهفته است. این امکان دستکاری آسان فیلدهایی مانند حاشیه نویسی، نام تصاویر و کپی ها را در محیط ها فراهم می کند. با این حال، Kustomize در مورد جایگزینی متغیرها سختگیر است و مجموعه ای از گزینه های از پیش تعریف شده را ترجیح می دهد که می تواند محدود کننده باشد.
برای دور زدن این محدودیتها، روش رسمی زیر اغلب در a استفاده میشود kustomization.yml فایل، پس از ایجاد یک فایل خاص محیط:
resources:
– deployment.yml
– ingress.yml
– service.yml
– sa.yml
– role.yml
– role-binding.yml
generatorOptions:
disableNameSuffixHash: true
configMapGenerator:
– name: environment-variables
envs: [rendered/api-gateway.env]
behavior: create
replacements:
– source:
kind: ConfigMap
version: v1
name: environment-variables
fieldPath: data.API_GATEWAY_URL
targets:
– select:
kind: Ingress
name: api-gateway
fieldPaths:
– spec.rules.0.host
– spec.tls.0.hosts.0
– select:
kind: Deployment
name: api-gateway
fieldPaths:
– spec.template.spec.containers.0.env.[name=API_GATEWAY_URL].value
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
برای چنین نیاز ساده ای مانند جایگزینی متغیر بسیار زیاد است. مردم حتی هلم را در این مرحله جذاب می یابند. بیایید توضیح دهیم که چرا و چگونه راه حل ساده تری پیدا کنیم.
در حالی که Kustomize application گردش کار از جایگزینی متغیر اساسی با استفاده از ابزارهایی مانند پشتیبانی می کند envsubst در بالای kustomize build، سناریوهای پیچیده تر نیاز به راه حل های سفارشی دارند. یکی دیگر از رویکردهای اصلاح شده شامل استفاده از renvsubst برای جایگزینی انتخابی متغیرها بر اساس معیارهای خاص است (به عنوان مثال، K_* محیطی خاص یا CI_* متغیرهای خاص CI).
سپس میتوانیم در خطوط لوله خود به ترتیب صعودی از پیچیدگی استفاده کنیم:
برای موارد استفاده ساده: kustomize build . | envsubst
برای جلوگیری از جایگزینی برخی از متغیرها، آن را در مانیفست به صورت تعریف کنید ${DOLLAR}MY_VARIABLE و سپس:
kustomize build . | DOLLAR=$ envsubst
استفاده کنید renvsubst برای انتخاب متغیرها با پیشوند:
kustomize build . | renvsubst –prefix=”K_” –prefix=”CI_”
اما همه این راه حل ها دارای معایبی هستند. شما باید لوله کنید kustomize build نتیجه قبل از اعمال مانیفست برخی از ویژگی های ابزارهای بسته بندی راحت مانند به روز رسانی های محلی هوشمند را با استفاده از tilt.dev از بین می برد.
هیچ راه حل سازشی با استفاده از renvsubst به عنوان یک ترانسفورماتور وجود ندارد
برای یک راه حل بدون مصالحه با استفاده از افزونه Exec ترانسفورماتور Kustomize با استفاده از renvsubst، این مراحل را دنبال کنید.
renvsubst را نصب کنید: اطمینان حاصل شود renvsubst از اینجا نصب می شود
را تنظیم کنید KUSTOMIZE_PLUGIN_HOME متغیر برای kustomize برای پیدا کردن افزونه شما، به عنوان مثال KUSTOMIZE_PLUGIN_HOME=$PWD/devops/k8s/scripts/
Transformer Script را تنظیم کنید:
ایجاد یک اسکریپت ترانسفورماتور (renvsubst) در $KUSTOMIZE_PLUGIN_HOME/transformers/renvsubst/renvsubst:
#!/bin/sh
RENVSUBST=${RENVSUBST_PATH:-$(which renvsubst)}
if [ -z “$RENVSUBST” ]; then
echo “Error: renvsubst command not found. Please install renvsubst from https://github.com/containeroo/renvsubst/releases or set RENVSUBST_PATH.” >&2
exit 1
fi
$RENVSUBST –prefix=”K_” –prefix=”CI_” -i –
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
پیکربندی منبع سفارشی:
تعریف یک منبع سفارشی (renvsubst.transformer.yml) در کنار kustomization.yml شما با استفاده از آن:
apiVersion: transformers
kind: renvsubst
metadata:
name: renvsubst
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
ادغام با Kustomize:
خود را به روز کنید kustomization.yml برای گنجاندن منبع سفارشی:
resources:
– …
transformers:
– renvsubst.transformer.yml
وارد حالت تمام صفحه شوید
از حالت تمام صفحه خارج شوید
با دنبال کردن این مراحل، میتوانید قابلیتهای Kustomize را برای مدیریت مؤثر محیطهای پویا و نیازهای پیکربندی پیچیده افزایش دهید.
در حالی که Kustomize در مدیریت مانیفست های Kubernetes سادگی ارائه می دهد، محدودیت های پیش فرض آن در جایگزینی متغیرها را می توان از طریق سفارشی سازی استراتژیک برطرف کرد. با استفاده از ترانسفورماتورهای سفارشی و renvsubst، استقرار Kubernetes با سفارشی سازی می تواند سازگارتر با محیط های متنوع و در حال تحول باشد و از عملیات روان تر و کارآمدتر اطمینان حاصل کند.
این مقاله با کمک یک مدل زبان هوش مصنوعی برای اطمینان از وضوح و دقت در محتوا بهبود یافته است، زیرا انگلیسی زبان مادری من نیست.
Kustomize یکی از ابزارهای برجسته در کنار Helm است که برای مدیریت و پیکربندی استقرار Kubernetes در چندین محیط استفاده می شود. برخلاف Helm که از قالبها استفاده میکند، Kustomize مدیریت را با تمرکز بر نمایشهای ساده بدون مقایسه مستقیم با رویکرد Helm ساده میکند.
جایگزینی متغیر زمانی که محیطها زودگذر هستند، مانند شاخههای ویژگی، یا زمانی که تنظیمات پیکربندی مانند ورودیهای DNS نیاز به تعیین پویا در زمان استقرار دارند، بسیار مهم میشود. Kustomize یک لیست محیط ثابت را در نظر می گیرد (به عنوان مثال، dev/staging/prod)، اما استفاده عملی Kubernetes اغلب به انعطاف پذیری بیشتری نیاز دارد.
بزرگترین مزیت Kustomize در رویکرد مستقیم آن برای مدیریت مانیفست ها نهفته است. این امکان دستکاری آسان فیلدهایی مانند حاشیه نویسی، نام تصاویر و کپی ها را در محیط ها فراهم می کند. با این حال، Kustomize در مورد جایگزینی متغیرها سختگیر است و مجموعه ای از گزینه های از پیش تعریف شده را ترجیح می دهد که می تواند محدود کننده باشد.
برای دور زدن این محدودیتها، روش رسمی زیر اغلب در a استفاده میشود kustomization.yml
فایل، پس از ایجاد یک فایل خاص محیط:
resources:
- deployment.yml
- ingress.yml
- service.yml
- sa.yml
- role.yml
- role-binding.yml
generatorOptions:
disableNameSuffixHash: true
configMapGenerator:
- name: environment-variables
envs: [rendered/api-gateway.env]
behavior: create
replacements:
- source:
kind: ConfigMap
version: v1
name: environment-variables
fieldPath: data.API_GATEWAY_URL
targets:
- select:
kind: Ingress
name: api-gateway
fieldPaths:
- spec.rules.0.host
- spec.tls.0.hosts.0
- select:
kind: Deployment
name: api-gateway
fieldPaths:
- spec.template.spec.containers.0.env.[name=API_GATEWAY_URL].value
برای چنین نیاز ساده ای مانند جایگزینی متغیر بسیار زیاد است. مردم حتی هلم را در این مرحله جذاب می یابند. بیایید توضیح دهیم که چرا و چگونه راه حل ساده تری پیدا کنیم.
در حالی که Kustomize application گردش کار از جایگزینی متغیر اساسی با استفاده از ابزارهایی مانند پشتیبانی می کند envsubst
در بالای kustomize build
، سناریوهای پیچیده تر نیاز به راه حل های سفارشی دارند. یکی دیگر از رویکردهای اصلاح شده شامل استفاده از renvsubst برای جایگزینی انتخابی متغیرها بر اساس معیارهای خاص است (به عنوان مثال، K_*
محیطی خاص یا CI_*
متغیرهای خاص CI).
سپس میتوانیم در خطوط لوله خود به ترتیب صعودی از پیچیدگی استفاده کنیم:
- برای موارد استفاده ساده:
kustomize build . | envsubst
- برای جلوگیری از جایگزینی برخی از متغیرها، آن را در مانیفست به صورت تعریف کنید
${DOLLAR}MY_VARIABLE
و سپس:kustomize build . | DOLLAR=$ envsubst
- استفاده کنید
renvsubst
برای انتخاب متغیرها با پیشوند:kustomize build . | renvsubst --prefix="K_" --prefix="CI_"
اما همه این راه حل ها دارای معایبی هستند. شما باید لوله کنید kustomize build
نتیجه قبل از اعمال مانیفست برخی از ویژگی های ابزارهای بسته بندی راحت مانند به روز رسانی های محلی هوشمند را با استفاده از tilt.dev از بین می برد.
هیچ راه حل سازشی با استفاده از renvsubst به عنوان یک ترانسفورماتور وجود ندارد
برای یک راه حل بدون مصالحه با استفاده از افزونه Exec ترانسفورماتور Kustomize با استفاده از renvsubst
، این مراحل را دنبال کنید.
-
renvsubst را نصب کنید: اطمینان حاصل شود
renvsubst
از اینجا نصب می شود -
را تنظیم کنید
KUSTOMIZE_PLUGIN_HOME
متغیر برای kustomize برای پیدا کردن افزونه شما، به عنوان مثالKUSTOMIZE_PLUGIN_HOME=$PWD/devops/k8s/scripts/
-
Transformer Script را تنظیم کنید:
ایجاد یک اسکریپت ترانسفورماتور (renvsubst
) در $KUSTOMIZE_PLUGIN_HOME/transformers/renvsubst/renvsubst
:
#!/bin/sh
RENVSUBST=${RENVSUBST_PATH:-$(which renvsubst)}
if [ -z "$RENVSUBST" ]; then
echo "Error: renvsubst command not found. Please install renvsubst from https://github.com/containeroo/renvsubst/releases or set RENVSUBST_PATH." >&2
exit 1
fi
$RENVSUBST --prefix="K_" --prefix="CI_" -i -
- پیکربندی منبع سفارشی:
تعریف یک منبع سفارشی (renvsubst.transformer.yml
) در کنار kustomization.yml شما با استفاده از آن:
apiVersion: transformers
kind: renvsubst
metadata:
name: renvsubst
- ادغام با Kustomize:
خود را به روز کنید kustomization.yml
برای گنجاندن منبع سفارشی:
resources:
- ...
transformers:
- renvsubst.transformer.yml
با دنبال کردن این مراحل، میتوانید قابلیتهای Kustomize را برای مدیریت مؤثر محیطهای پویا و نیازهای پیکربندی پیچیده افزایش دهید.
در حالی که Kustomize در مدیریت مانیفست های Kubernetes سادگی ارائه می دهد، محدودیت های پیش فرض آن در جایگزینی متغیرها را می توان از طریق سفارشی سازی استراتژیک برطرف کرد. با استفاده از ترانسفورماتورهای سفارشی و renvsubst
، استقرار Kubernetes با سفارشی سازی می تواند سازگارتر با محیط های متنوع و در حال تحول باشد و از عملیات روان تر و کارآمدتر اطمینان حاصل کند.
این مقاله با کمک یک مدل زبان هوش مصنوعی برای اطمینان از وضوح و دقت در محتوا بهبود یافته است، زیرا انگلیسی زبان مادری من نیست.