۱. اهداف
Kustomize ابزاری است که روشی بدون الگو برای سفارشیسازی پیکربندی برنامه معرفی میکند و استفاده از برنامههای آماده را ساده میکند. این ابزار به عنوان یک ابزار مستقل در دسترس است و از طریق kubectl apply -k of در kubectl تعبیه شده است و میتواند به عنوان یک رابط خط فرمان مستقل استفاده شود. برای اطلاعات بیشتر، به kustomize.io مراجعه کنید.
در این آموزش، شما با برخی از مفاهیم اصلی Kustomize آشنا میشوید و از آن برای مدیریت تغییرات در برنامهها و محیطها استفاده میکنید.
شما:
- از کلاینت خط فرمان kustomize استفاده کنید
- عناصر رایج را نادیده بگیرید
- ساختارهای بزرگتر yaml را وصله کنید
- از چندین لایه روکش استفاده کنید
۲. آمادهسازی فضای کاری
- با مراجعه به آدرس زیر، ویرایشگر Cloud Shell را باز کنید.
https://ide.cloud.google.com
- در پنجره ترمینال، یک دایرکتوری کاری برای این آموزش ایجاد کنید.
mkdir kustomize-lab
- به دایرکتوری بروید و فضای کاری IDE را تنظیم کنید
cd kustomize-lab && cloudshell workspace .
۳. استفاده از کلاینت خط فرمان kustomize
قدرت kustomize از توانایی آن در همپوشانی و تغییر yaml های پایه 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 به عنوان نقطه ورود میگردد. این فایل شامل ارجاعاتی به فایلهای پایه و override مختلف و همچنین مقادیر override خاص است.
یک فایل 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 منتقل میکند.
(اجرا نکنید - فقط جهت اطلاع ارائه شده است)
kustomize build chat-app/base | kubectl apply -f -
این تکنیک در صورتی مفید است که به نسخه خاصی از کلاینت kustomize نیاز باشد.
به عنوان یک روش جایگزین، kustomize را میتوان با ابزارهای یکپارچهشده در خود kubectl اجرا کرد. مانند مثال زیر.
(اجرا نکنید - فقط جهت اطلاع ارائه شده است)
kubectl apply -k chat-app/base
۴. نادیده گرفتن عناصر مشترک
اکنون که فضای کاری شما پیکربندی شده و تأیید کردهاید که 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
۵. وصله کردن ساختارهای بزرگتر yaml
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
- حالا با دستور زیر پچ پروداکشن را بنویسید
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 هستند.
- پیادهسازی فایلهای YAML سفارشیسازیشده برای دایرکتوری پایه
فایل پایه kustomization.yaml را بازنویسی کنید، فضای نام و پیشوند نام را حذف کنید زیرا این فقط پیکربندی پایه است و هیچ تغییری ندارد. این فیلدها به زودی به فایلهای محیط منتقل میشوند.
cat <<EOF > chat-app/base/kustomization.yaml
bases:
- deployment.yaml
commonLabels:
app: chat-app
EOF
- پیادهسازی فایلهای 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 باید آن فایلها را روی منابع پایه قرار دهد.
- پیادهسازی فایلهای 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
توجه داشته باشید که خروجی شامل نتایج ادغامشدهای مانند برچسبها از پیکربندیهای پایه و توسعه و همچنین نام تصویر کانتینر از پایه و متغیر محیطی از پوشههای توسعه است.
۶. استفاده از چندین لایه پوشش
بسیاری از سازمانها تیمی دارند که به پشتیبانی از تیمهای برنامه و مدیریت پلتفرم کمک میکند. اغلب این تیمها میخواهند جزئیات خاصی را که قرار است در همه برنامهها در همه محیطها گنجانده شود، مانند یک عامل ثبت وقایع، در نظر بگیرند.
در این مثال، شما یک پوشه و منابع shared-kustomize ایجاد خواهید کرد که توسط همه برنامهها، صرف نظر از محیطی که در آن مستقر هستند، در نظر گرفته میشود.
- پوشه shared-kustomize را ایجاد کنید
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-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
- دستور 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>