مقیاس بندی با Kustomize

1. اهداف

Kustomize ابزاری است که روشی بدون قالب برای سفارشی کردن پیکربندی برنامه معرفی می کند و استفاده از برنامه های کاربردی را ساده می کند. این به عنوان یک ابزار مستقل در دسترس است و در kubectl apply -k ساخته شده است. برای جزئیات بیشتر در kustomize.io بیشتر بخوانید.

در این آموزش شما بر روی برخی از مفاهیم اصلی Kustomize کار می کنید و از آن برای مدیریت تغییرات در برنامه ها و محیط ها استفاده می کنید.

شما:

  • از سرویس گیرنده خط فرمان kustomize استفاده کنید
  • نادیده گرفتن عناصر مشترک
  • ساختارهای یامل بزرگتر را وصله کنید
  • از لایه های متعدد پوشش استفاده کنید

2. آماده سازی فضای کاری

  1. ویرایشگر Cloud Shell را با مراجعه به آدرس زیر باز کنید

https://ide.cloud.google.com

  1. در پنجره ترمینال یک پوشه کاری برای این آموزش ایجاد کنید

mkdir kustomize-lab

  1. به دایرکتوری تغییر دهید و فضای کاری IDE را تنظیم کنید

cd kustomize-lab && cloudshell workspace .

3. استفاده از سرویس گیرنده خط فرمان kustomize

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

در این بخش شما یک پیکربندی پایه kustomize ایجاد کرده و فایل ها را با سرویس گیرنده خط فرمان kustomize به تنهایی پردازش می کنید.

  1. برای شروع، یک پوشه برای نگهداری فایل های پیکربندی پایه خود ایجاد خواهید کرد

mkdir -p chat-app/base

  1. یک kubernetes ساده deployment.yaml در پوشه پایه ایجاد کنید

cat <<EOF > chat-app/base/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`metadata:`

  `name: chat-app`

`spec:`

  `containers:`

  `- name: chat-app`

    `image: chat-app-image`

EOF

  1. پایه kustomization.yaml را ایجاد کنید

Kustomize به دنبال فایلی به نام kustomization.yaml به عنوان نقطه ورودی است. این فایل حاوی ارجاعاتی به فایل‌های پایه و بازنویسی مختلف و همچنین مقادیر نادیده‌گیری خاص است.

یک فایل kustomization.yaml ایجاد کنید که به deployment.yaml به عنوان منابع پایه اشاره می کند.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. دستور kustomize را در پوشه پایه اجرا کنید. با انجام این کار، فایل‌های YAML استقرار بدون هیچ تغییری خروجی می‌شود، که انتظار می‌رود، زیرا هنوز هیچ گونه تغییری را وارد نکرده‌اید.

kustomize build chat-app/base

این کلاینت مستقل را می توان با مشتری kubectl ترکیب کرد تا خروجی را مستقیماً مانند مثال زیر اعمال کند. با انجام این کار خروجی دستور build مستقیماً به دستور kubectl application ارسال می شود.

(اجرا نشود - فقط برای مرجع گنجانده شده است)

kustomize build chat-app/base | kubectl apply -f -

این تکنیک در صورت نیاز به نسخه خاصی از مشتری kustomize مفید است.

از طرف دیگر kustomize را می توان با ابزارهای ادغام شده در خود kubectl اجرا کرد. مانند مثال زیر.

(اجرا نشود - فقط برای مرجع گنجانده شده است)

kubectl apply -k chat-app/base

4. نادیده گرفتن عناصر مشترک

اکنون که فضای کاری شما پیکربندی شده است و تأیید کردید که kustomize کار می کند، وقت آن است که برخی از مقادیر پایه را لغو کنید.

تصاویر، فضاهای نام و برچسب ها معمولاً برای هر برنامه و محیط شخصی سازی می شوند. از آنجایی که معمولاً تغییر می‌کنند، Kustomize به شما امکان می‌دهد آنها را مستقیماً در kustomize.yaml اعلام کنید، و نیازی به ایجاد وصله‌های بسیاری برای این سناریوهای رایج را از بین می‌برد.

این تکنیک اغلب برای ایجاد یک نمونه خاص از یک الگو استفاده می شود. اکنون می توان از یک مجموعه پایه از منابع برای اجرای چندگانه با تغییر نام و فضای نام آن استفاده کرد.

در این مثال، شما یک فضای نام، پیشوند نام و تعدادی برچسب به kustomization.yaml خود اضافه می کنید.

  1. فایل kustomization.yaml را به‌روزرسانی کنید تا شامل برچسب‌ها و فضاهای نام رایج باشد.

دستورات زیر را در ترمینال خود کپی و اجرا کنید

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

namespace: my-namespace

nameprefix: my-

commonLabels:

app: my-app

EOF

  1. دستور build را اجرا کنید

اجرای بیلد در این مرحله نشان می‌دهد که فایل YAML حاصل اکنون شامل فضای نام، برچسب‌ها و نام‌های پیشوندی در هر دو تعریف سرویس و استقرار است.

kustomize build chat-app/base

توجه داشته باشید که چگونه خروجی شامل برچسب‌ها و فضاهای نامی است که در فایل YAML استقرار نیستند. همچنین به نحوه تغییر نام از chat-app به my-chat-app توجه کنید

(خروجی کپی نشود)

kind: Deployment

metadata:

labels:

`app: my-app`

name: my-chat-app

namespace: my-namespace

5. وصله سازه های یامل بزرگتر

Kustomize همچنین توانایی اعمال وصله هایی را که منابع پایه را پوشش می دهند، فراهم می کند. این تکنیک اغلب برای ایجاد تنوع بین برنامه ها و محیط ها استفاده می شود.

در این مرحله، تغییرات محیطی را برای یک برنامه کاربردی ایجاد خواهید کرد که از منابع پایه یکسانی استفاده می کنند.

  1. با ایجاد پوشه برای محیط های مختلف شروع کنید

mkdir -p chat-app/dev

mkdir -p chat-app/prod

  1. با دستور زیر پچ مرحله را بنویسید

cat <<EOF > chat-app/dev/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: chat-app`

    `env:`

    `- name: ENVIRONMENT`

      `value: dev`

EOF

  1. حالا با دستور زیر پچ prod را بنویسید

cat <<EOF > chat-app/prod/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: chat-app`

    `env:`

    `- name: ENVIRONMENT`

      `value: prod`

EOF

توجه داشته باشید که وصله های بالا حاوی نام تصویر ظرف نیستند. این مقدار در base/deployment.yaml که در مرحله قبل ایجاد کردید ارائه شده است. با این حال، این وصله‌ها حاوی متغیرهای محیطی منحصربه‌فردی برای توسعه‌دهندگان و تولیدکنندگان هستند.

  1. Kustomize فایل های YAML را برای دایرکتوری پایه پیاده سازی کنید

پایگاه kustomization.yaml را بازنویسی کنید، فضای نام و پیشوند نام را حذف کنید زیرا این فقط پیکربندی پایه است که هیچ گونه تغییری ندارد. این فیلدها در یک لحظه به فایل های محیط منتقل می شوند.

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. Kustomize فایل های YAML را برای دایرکتوری dev پیاده سازی کنید

اکنون با اجرای دستورات زیر در ترمینال خود، تغییرات مربوط به dev و prod را پیاده سازی کنید.

cat <<EOF > chat-app/dev/kustomization.yaml

bases:

- ../base

namespace: dev

nameprefix: dev-

commonLabels:

env: dev

patches:

- deployment.yaml

EOF

به افزودن patches : بخش فایل توجه کنید. این نشان می دهد که kustomize باید آن فایل ها را در بالای منابع پایه قرار دهد.

  1. Kustomize فایل های YAML را برای دایرکتوری prod پیاده سازی کنید

cat <<EOF > chat-app/prod/kustomization.yaml

bases:

- ../base

namespace: prod

nameprefix: prod-

commonLabels:

env: prod

patches:

- deployment.yaml

EOF

  1. برای ادغام فایل ها kustomize را اجرا کنید

با ایجاد فایل های پایه و محیطی، می توانید فرآیند kustomize را برای وصله فایل های پایه اجرا کنید.

دستور زیر را برای dev اجرا کنید تا نتیجه ادغام شده را ببینید.

kustomize build chat-app/dev

توجه داشته باشید که خروجی شامل نتایج ادغام شده مانند برچسب‌های پیکربندی پایه و توسعه‌دهنده و همچنین نام تصویر ظرف از پایه و متغیر محیطی از پوشه‌های توسعه‌دهنده است.

6. استفاده از چند لایه پوشش

بسیاری از سازمان ها تیمی دارند که به پشتیبانی از تیم های برنامه و مدیریت پلت فرم کمک می کند. غالباً این تیم‌ها می‌خواهند جزئیات خاصی را که باید در همه برنامه‌ها در همه محیط‌ها گنجانده شوند، مانند یک عامل گزارش، درج کنند.

در این مثال، شما یک پوشه و منابع shared-kustomize ایجاد می کنید که توسط همه برنامه ها و صرف نظر از اینکه در کدام محیط مستقر هستند، گنجانده می شود.

  1. پوشه shared-customize را ایجاد کنید

mkdir shared-kustomize

  1. یک deployment.yaml ساده در پوشه مشترک ایجاد کنید

cat <<EOF > shared-kustomize/deployment.yaml

kind: Deployment

apiVersion: apps/v1

metadata:

name: app

spec:

template:

`spec:`

  `containers:`

  `- name: logging-agent`

    `image: logging-agent-image`

EOF

  1. یک kustomization.yaml در پوشه مشترک ایجاد کنید

cat <<EOF > shared-kustomize/kustomization.yaml

bases:

- deployment.yaml

EOF

  1. به پوشه shared-customize از برنامه خود ارجاع دهید

از آنجایی که می خواهید پوشه shared-kustomize پایه همه برنامه های شما باشد، باید chat-app/base/kustomization.yaml خود را به روز کنید تا از shared-kustomize به عنوان پایه استفاده کنید. سپس deployment.yaml خودش را در بالا وصله کنید. سپس پوشه های محیطی مجدداً در بالای آن وصله می شوند.

دستورات زیر را در ترمینال خود کپی و اجرا کنید

cat <<EOF > chat-app/base/kustomization.yaml

bases:

- ../../shared-kustomize

commonLabels:

app: chat-app

patches:

- deployment.yaml

EOF

  1. kustomize را اجرا کنید و نتایج ادغام شده برای dev را مشاهده کنید

kustomize build chat-app/dev

توجه داشته باشید که خروجی شامل نتایج ادغام شده از پایه برنامه، محیط برنامه و پوشه‌های shared-kustomize . به طور خاص، می توانید در بخش کانتینر مقادیر هر سه مکان را مشاهده کنید.

(خروجی کپی نشود)

<پیش>

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

</pre>