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

۱. اهداف

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

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

شما:

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

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

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

https://ide.cloud.google.com

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

mkdir kustomize-lab

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

cd kustomize-lab && cloudshell workspace .

۳. استفاده از کلاینت خط فرمان kustomize

قدرت kustomize از توانایی آن در همپوشانی و تغییر yaml های پایه 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 به عنوان نقطه ورود می‌گردد. این فایل شامل ارجاعاتی به فایل‌های پایه و override مختلف و همچنین مقادیر override خاص است.

یک فایل 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 منتقل می‌کند.

(اجرا نکنید - فقط جهت اطلاع ارائه شده است)

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

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

به عنوان یک روش جایگزین، kustomize را می‌توان با ابزارهای یکپارچه‌شده در خود kubectl اجرا کرد. مانند مثال زیر.

(اجرا نکنید - فقط جهت اطلاع ارائه شده است)

kubectl apply -k chat-app/base

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

اکنون که فضای کاری شما پیکربندی شده و تأیید کرده‌اید که 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

۵. وصله کردن ساختارهای بزرگتر yaml

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. حالا با دستور زیر پچ پروداکشن را بنویسید

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 که در مرحله قبل ایجاد کردید، ارائه شده است. با این حال، این پچ‌ها حاوی متغیرهای محیطی منحصر به فرد برای dev و prod هستند.

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

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

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

bases:

- deployment.yaml

commonLabels:

app: chat-app

EOF

  1. پیاده‌سازی فایل‌های 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. پیاده‌سازی فایل‌های 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

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

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

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

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

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

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-kustomize از برنامه خود ارجاع دهید

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

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

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 . به‌طور خاص، می‌توانید در بخش کانتینرها مقادیر هر سه مکان را مشاهده کنید.

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

<pre>

`containers:`

      `- env:`

        `- name: ENVIRONMENT`

          `value: dev`

        `name: chat-app`

      `- image: image`

        `name: app`

      `- image: logging-agent-image`

        `name: logging-agent`

</pre>