1. اهداف
Kustomize ابزاری است که روشی بدون قالب برای سفارشی کردن پیکربندی برنامه معرفی می کند و استفاده از برنامه های کاربردی را ساده می کند. این به عنوان یک ابزار مستقل در دسترس است و در kubectl apply -k
ساخته شده است. برای جزئیات بیشتر در kustomize.io بیشتر بخوانید.
در این آموزش شما بر روی برخی از مفاهیم اصلی Kustomize کار می کنید و از آن برای مدیریت تغییرات در برنامه ها و محیط ها استفاده می کنید.
شما:
- از سرویس گیرنده خط فرمان kustomize استفاده کنید
- نادیده گرفتن عناصر مشترک
- ساختارهای یامل بزرگتر را وصله کنید
- از لایه های متعدد پوشش استفاده کنید
2. آماده سازی فضای کاری
- ویرایشگر Cloud Shell را با مراجعه به آدرس زیر باز کنید
https://ide.cloud.google.com
- در پنجره ترمینال یک پوشه کاری برای این آموزش ایجاد کنید
mkdir kustomize-lab
- به دایرکتوری تغییر دهید و فضای کاری IDE را تنظیم کنید
cd kustomize-lab && cloudshell workspace .
3. استفاده از سرویس گیرنده خط فرمان kustomize
قدرت Kustomize از توانایی همپوشانی و اصلاح یامل های پایه Kubernetes با مقادیر سفارشی ناشی می شود. برای انجام این Kustomize نیاز به یک فایل پایه با دستورالعمل هایی در مورد مکان بودن فایل ها و مواردی که باید لغو شود. Kustomize در اکوسیستم Kubernetes گنجانده شده است و می تواند از طریق روش های مختلف اجرا شود.
در این بخش شما یک پیکربندی پایه kustomize ایجاد کرده و فایل ها را با سرویس گیرنده خط فرمان kustomize به تنهایی پردازش می کنید.
- برای شروع، یک پوشه برای نگهداری فایل های پیکربندی پایه خود ایجاد خواهید کرد
mkdir -p chat-app/base
- یک 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
- پایه
kustomization.yaml
را ایجاد کنید
Kustomize به دنبال فایلی به نام kustomization.yaml به عنوان نقطه ورودی است. این فایل حاوی ارجاعاتی به فایلهای پایه و بازنویسی مختلف و همچنین مقادیر نادیدهگیری خاص است.
یک فایل kustomization.yaml
ایجاد کنید که به deployment.yaml
به عنوان منابع پایه اشاره می کند.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
EOF
- دستور 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
خود اضافه می کنید.
- فایل
kustomization.yaml
را بهروزرسانی کنید تا شامل برچسبها و فضاهای نام رایج باشد.
دستورات زیر را در ترمینال خود کپی و اجرا کنید
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
namespace: my-namespace
nameprefix: my-
commonLabels:
app: my-app
EOF
- دستور 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 همچنین توانایی اعمال وصله هایی را که منابع پایه را پوشش می دهند، فراهم می کند. این تکنیک اغلب برای ایجاد تنوع بین برنامه ها و محیط ها استفاده می شود.
در این مرحله، تغییرات محیطی را برای یک برنامه کاربردی ایجاد خواهید کرد که از منابع پایه یکسانی استفاده می کنند.
- با ایجاد پوشه برای محیط های مختلف شروع کنید
mkdir -p chat-app/dev
mkdir -p chat-app/prod
- با دستور زیر پچ مرحله را بنویسید
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
- حالا با دستور زیر پچ 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 که در مرحله قبل ایجاد کردید ارائه شده است. با این حال، این وصلهها حاوی متغیرهای محیطی منحصربهفردی برای توسعهدهندگان و تولیدکنندگان هستند.
- Kustomize فایل های YAML را برای دایرکتوری پایه پیاده سازی کنید
پایگاه kustomization.yaml را بازنویسی کنید، فضای نام و پیشوند نام را حذف کنید زیرا این فقط پیکربندی پایه است که هیچ گونه تغییری ندارد. این فیلدها در یک لحظه به فایل های محیط منتقل می شوند.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- 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 باید آن فایل ها را در بالای منابع پایه قرار دهد.
- Kustomize فایل های YAML را برای دایرکتوری prod پیاده سازی کنید
cat <<EOF > chat-app/prod/kustomization.yaml
bases:
- ../base
namespace: prod
nameprefix: prod-
commonLabels:
env: prod
patches:
- deployment.yaml
EOF
- برای ادغام فایل ها kustomize را اجرا کنید
با ایجاد فایل های پایه و محیطی، می توانید فرآیند kustomize را برای وصله فایل های پایه اجرا کنید.
دستور زیر را برای dev اجرا کنید تا نتیجه ادغام شده را ببینید.
kustomize build chat-app/dev
توجه داشته باشید که خروجی شامل نتایج ادغام شده مانند برچسبهای پیکربندی پایه و توسعهدهنده و همچنین نام تصویر ظرف از پایه و متغیر محیطی از پوشههای توسعهدهنده است.
6. استفاده از چند لایه پوشش
بسیاری از سازمان ها تیمی دارند که به پشتیبانی از تیم های برنامه و مدیریت پلت فرم کمک می کند. غالباً این تیمها میخواهند جزئیات خاصی را که باید در همه برنامهها در همه محیطها گنجانده شوند، مانند یک عامل گزارش، درج کنند.
در این مثال، شما یک پوشه و منابع shared-kustomize
ایجاد می کنید که توسط همه برنامه ها و صرف نظر از اینکه در کدام محیط مستقر هستند، گنجانده می شود.
- پوشه shared-customize را ایجاد کنید
mkdir shared-kustomize
- یک
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
- یک kustomization.yaml در پوشه مشترک ایجاد کنید
cat <<EOF > shared-kustomize/kustomization.yaml
bases:
- deployment.yaml
EOF
- به پوشه 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
- 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>