برنامه نویسی

☸️ 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، این مراحل را دنبال کنید.

  1. renvsubst را نصب کنید: اطمینان حاصل شود renvsubst از اینجا نصب می شود

  2. را تنظیم کنید KUSTOMIZE_PLUGIN_HOME متغیر برای kustomize برای پیدا کردن افزونه شما، به عنوان مثال KUSTOMIZE_PLUGIN_HOME=$PWD/devops/k8s/scripts/

  3. 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 -
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. پیکربندی منبع سفارشی:

تعریف یک منبع سفارشی (renvsubst.transformer.yml) در کنار kustomization.yml شما با استفاده از آن:

apiVersion: transformers
kind: renvsubst
metadata:
  name: renvsubst
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. ادغام با Kustomize:

خود را به روز کنید kustomization.yml برای گنجاندن منبع سفارشی:

resources:
  - ...

transformers:
  - renvsubst.transformer.yml
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

با دنبال کردن این مراحل، می‌توانید قابلیت‌های Kustomize را برای مدیریت مؤثر محیط‌های پویا و نیازهای پیکربندی پیچیده افزایش دهید.

در حالی که Kustomize در مدیریت مانیفست های Kubernetes سادگی ارائه می دهد، محدودیت های پیش فرض آن در جایگزینی متغیرها را می توان از طریق سفارشی سازی استراتژیک برطرف کرد. با استفاده از ترانسفورماتورهای سفارشی و renvsubst، استقرار Kubernetes با سفارشی سازی می تواند سازگارتر با محیط های متنوع و در حال تحول باشد و از عملیات روان تر و کارآمدتر اطمینان حاصل کند.

این مقاله با کمک یک مدل زبان هوش مصنوعی برای اطمینان از وضوح و دقت در محتوا بهبود یافته است، زیرا انگلیسی زبان مادری من نیست.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا