1. اهداف
Skaffold ابزاری است که گردش کار را برای ایجاد، فشار دادن و استقرار برنامه شما مدیریت می کند. شما می توانید از Skaffold برای پیکربندی آسان یک فضای کاری توسعه محلی، ساده کردن حلقه توسعه داخلی خود و ادغام با ابزارهای دیگر مانند Kustomize و Helm برای کمک به مدیریت مانیفست های Kubernetes خود استفاده کنید.
در این آموزش شما بر روی برخی از مفاهیم اصلی Skaffold کار می کنید، از آن برای خودکار کردن حلقه توسعه داخلی خود استفاده می کنید، سپس یک برنامه کاربردی را اجرا می کنید.
شما:
- Skaffold را برای توسعه محلی پیکربندی و فعال کنید
- یک برنامه ساده گلانگ بسازید و اجرا کنید
- مدیریت استقرار برنامه های محلی با Skaffold
- مانیفست ها را رندر کنید و برنامه خود را مستقر کنید
2. قبل از شروع
آماده سازی فضای کاری شما
- با مراجعه به url زیر، ویرایشگر Cloud Shell را باز کنید:
https://shell.cloud.google.com
کوکی های شخص ثالث را مجاز کنید. روی "سایت کار نمی کند" و سپس "اجازه کوکی ها" را کلیک کنید.
- اگر قبلاً این کار را انجام نداده اید، در پنجره ترمینال منبع برنامه را با دستور زیر شبیه سازی کنید:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
- به دایرکتوری مخزن کلون شده تغییر دهید:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
- با اجرای دستور زیر فضای کاری Cloud Shell خود را روی دایرکتوری فعلی تنظیم کنید:
cloudshell workspace .
در حال آماده سازی پروژه شما
- با اجرای دستور زیر مطمئن شوید که پروژه Google Cloud شما به درستی تنظیم شده است:
gcloud config set project {{project-id}}
3. شروع کار با Skaffold
- دستور زیر را برای ایجاد فایل پیکربندی سطح بالای Skaffold،
skaffold.yaml
اجرا کنید:
cat <<EOF > skaffold.yaml
apiVersion: skaffold/v2beta21
kind: Config
metadata:
name: getting-started-kustomize
build:
tagPolicy:
gitCommit:
ignoreChanges: true
artifacts:
- image: skaffold-kustomize
context: app
docker:
dockerfile: Dockerfile
deploy:
kustomize:
paths:
- overlays/dev
profiles:
- name: staging
deploy:
kustomize:
paths:
- overlays/staging
- name: prod
deploy:
kustomize:
paths:
- overlays/prod
EOF
- فایل
skaffold.yaml
را در قسمت IDE باز کنید. این فایل پیکربندی سطح بالایی است که خط لوله Skaffold را تعریف می کند.
به قالب YAML شبیه Kubernetes و بخش های زیر در YAML توجه کنید:
-
build
-
deploy
-
profiles
این بخش ها نحوه ساخت و استقرار برنامه و همچنین نمایه های هر هدف استقرار را مشخص می کند.
شما می توانید در مورد لیست کامل مراحل Skaffold در مستندات Skaffold Pipeline Stages بیشتر بخوانید.
4. بسازید
بخش build
شامل پیکربندی است که نحوه ساخت برنامه را مشخص می کند. در این مورد، میتوانید پیکربندی نحوه استفاده از تگهای git
و همچنین بخش artifacts
که تصاویر ظرف را که برنامه را تشکیل میدهند، تعریف میکند.
علاوه بر این، در این بخش می توانید مرجع Dockerfile
را که برای ساخت تصاویر استفاده می شود، مشاهده کنید. Skaffold علاوه بر این از ابزارهای ساخت دیگری مانند Jib
، Maven
، Gradle
، Cloud-native Buildpacks
، Bazel
و اسکریپت های سفارشی پشتیبانی می کند. می توانید اطلاعات بیشتری در مورد این پیکربندی در مستندات Skaffold Build بخوانید.
5. مستقر کنید
بخش deploy
شامل پیکربندی است که نحوه استقرار برنامه را مشخص می کند. در این مورد میتوانید نمونهای برای استقرار پیشفرض ببینید که Skaffold را برای استفاده از ابزار Kustomize
پیکربندی میکند.
ابزار Kustomize
با ترکیب مجموعهای از فایلهای مؤلفه مشترک YAML (زیر دایرکتوری base
) با یک یا چند «همپوشانی» که معمولاً با یک یا چند هدف استقرار مطابقت دارند - معمولاً توسعهدهنده ، آزمایش ، مرحلهبندی و تولید، عملکردی را برای تولید نمایشهای Kubernetes فراهم میکند یا مشابه
در این مثال می توانید دو همپوشانی برای سه هدف، dev , staging و prod مشاهده کنید. پوشش توسعه دهنده در طول توسعه محلی و روکش های مرحله بندی و تولید برای هنگام استقرار با استفاده از Skaffold استفاده می شود.
6. پروفایل ها
بخش profiles
شامل پیکربندی است که پیکربندی های ساخت، آزمایش و استقرار را برای زمینه های مختلف تعریف می کند. زمینههای مختلف معمولاً محیطهای متفاوتی در خط لوله استقرار برنامه شما هستند، مانند staging
یا prod
در این مثال. این بدان معنی است که می توانید به راحتی مانیفست هایی را مدیریت کنید که محتویات آنها برای محیط های هدف مختلف باید متفاوت باشد، بدون اینکه پیکربندی دیگ بخار را تکرار کنید.
پیکربندی در بخش profiles
میتواند هر آیتمی را از پیکربندی اصلی جایگزین یا وصله کند (مثلاً بخشهای build
، test
یا deploy
).
به عنوان مثال، فایل overlays > prod > deployment.yaml
را باز کنید. توجه داشته باشید که تعداد کپیها برای برنامه در اینجا به صورت سه تنظیم شده است که بر پیکربندی پایه حذف میشود.
پیمایش کد منبع برنامه
-
app > main.go
را در صفحه IDE باز کنید. این یک برنامه گلانگ ساده است که هر ثانیه یک رشته برایstdout
می نویسد. - توجه داشته باشید که برنامه همچنین نام غلاف Kubernetes را که در آن اجرا می شود را خروجی می دهد.
مشاهده Dockerfile
-
app > Dockerfile
را در صفحه IDE باز کنید. این فایل حاوی مجموعه ای از دستورالعمل ها برای ساخت تصویر کانتینر برنامه برای فایلmain.go
است و در فایل سطح بالایskaffold.yaml
به آن ارجاع داده شده است.
7. در حال توسعه با Skaffold
پیکربندی محیط Kubernetes شما
- دستور زیر را اجرا کنید تا مطمئن شوید که خوشه محلی Kubernetes شما در حال اجرا و پیکربندی است:
minikube start
ممکن است چند دقیقه طول بکشد. اگر خوشه با موفقیت شروع شده باشد باید خروجی زیر را ببینید:
Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
- دستور زیر را برای ایجاد فضای نام Kubernetes برای
dev
،staging
وprod
اجرا کنید:
kubectl apply -f namespaces.yaml
شما باید خروجی زیر را ببینید:
namespace/dev created namespace/staging created namespace/prod created
استفاده از Skaffold برای توسعه محلی
- دستور زیر را برای ساختن برنامه و استقرار آن در یک خوشه محلی Kubernetes که در Cloud Shell اجرا می شود اجرا کنید:
skaffold dev
باید مشاهده کنید که فرآیند ساخت کانتینر برنامه اجرا می شود، که ممکن است یک دقیقه طول بکشد، و سپس خروجی برنامه هر ثانیه تکرار می شود:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx
توجه داشته باشید که نام دقیق غلاف با خروجی عمومی داده شده در بالا متفاوت است.
ایجاد تغییرات در برنامه
اکنون که برنامه در کلاستر محلی Kubernetes شما اجرا می شود، می توانید تغییراتی در کد ایجاد کنید و Skaffold به طور خودکار برنامه را بازسازی کرده و مجدداً در کلاستر قرار می دهد.
- فایل
app > main.go
را در صفحه IDE باز کنید و رشته خروجی را تغییر دهید:
"Hello world from pod %s!\n"
به:
"Hello Skaffold world from pod %s!\n"
هنگامی که تغییر را انجام دادید، باید Skaffold را ببینید که تصویر را بازسازی کرده و آن را مجدداً در خوشه قرار می دهد، با تغییر در خروجی در پنجره ترمینال قابل مشاهده است.
- اکنون، همچنین در فایل "app > main.go" در صفحه IDE، خط را تغییر دهید:
time.Sleep(time.Second * 1)
به
time.Sleep(time.Second * 10)
مجدداً باید ببینید که برنامه بازسازی شده و مجدداً مستقر شده است و خط خروجی هر 10 ثانیه یک بار ظاهر می شود.
ایجاد تغییرات در پیکربندی Kubernetes
در مرحله بعد، تغییری در پیکربندی Kubernetes ایجاد میکنید و یک بار دیگر Skaffold به طور خودکار مجدداً مستقر میشود.
- فایل
base > deployment.yaml
در IDE باز کنید و خط را تغییر دهید:
replicas: 1
به
replicas: 2
هنگامی که برنامه مجدداً مستقر شد، باید دو پاد در حال اجرا را مشاهده کنید - هر کدام نام متفاوتی دارند.
- اکنون همان خط را در file
base > deployment.yaml
تغییر دهید به:
replicas: 1
باید ببینید یکی از غلاف ها از سرویس حذف شده است تا فقط یکی از آنها باقی بماند.
- در نهایت،
Ctrl-C
در پنجره ترمینال فشار دهید تا توسعه محلی Skaffold متوقف شود.
برش رهاسازی
در مرحله بعد، با ساختن یک تصویر انتشار و استقرار آن در یک خوشه، یک نسخه را ایجاد خواهید کرد.
- دستور زیر را برای ساخت نسخه اجرا کنید:
skaffold build --file-output artifacts.json
این دستور تصویر نهایی را (در صورت لزوم) می سازد و جزئیات انتشار را در فایل artifacts.json
خروجی می دهد.
اگر میخواهید از ابزاری مانند Cloud Deploy برای استقرار در خوشههای خود استفاده کنید، این فایل حاوی اطلاعات انتشار است. این بدان معنی است که مصنوعات در مسیر زندگی تغییرناپذیر هستند.
- برای مشاهده محتویات فایل
artifacts.json
دستور زیر را اجرا کنید:
cat artifacts.json | jq
توجه داشته باشید که فایل حاوی ارجاع به تصویری است که در استقرار نهایی استفاده خواهد شد.
استقرار به صحنه سازی
- دستور زیر را برای استقرار نسخه با استفاده از نمایه
staging
اجرا کنید:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail
پس از تکمیل استقرار، باید خروجی دو پاد مشابه زیر را مشاهده کنید:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
- Ctrl-C را در پنجره ترمینال فشار دهید تا خروجی Skaffold متوقف شود.
- دستور زیر را اجرا کنید تا برنامه خود را در حال اجرا در کلاستر مشاهده کنید:
kubectl get all --namespace staging
شما باید دو نام غلاف متمایز را ببینید، زیرا نمایه staging
برای برنامه مشخص میکند که باید دو کپی در استقرار وجود داشته باشد.
استقرار به تولید
- اکنون دستور زیر را برای استقرار نسخه با استفاده از پروفایل
prod
اجرا کنید:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail
پس از تکمیل استقرار، باید خروجی سه پاد مشابه زیر را مشاهده کنید:
[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
- Ctrl-C را در پنجره ترمینال فشار دهید تا خروجی Skaffold متوقف شود.
شما باید سه نام غلاف متمایز را ببینید، زیرا پروفایل prod
برای برنامه مشخص میکند که باید سه نسخه مشابه در استقرار وجود داشته باشد.
- دستور زیر را اجرا کنید تا برنامه خود را در حال اجرا در کلاستر مشاهده کنید:
kubectl get all --namespace prod
شما باید خروجی را ببینید که حاوی خطوطی شبیه به زیر است که استقرار prod را نشان می دهد:
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/skaffold-kustomize-prod 3/3 3 3 16m
همچنین باید سه پاد برنامه در حال اجرا را مشاهده کنید.
NAME READY STATUS RESTARTS AGE pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m pod/skaffold-kustomize-prod-xxxxxxxxxx-xxxxx 1/1 Running 0 10m
8. تبریک می گویم!
تبریک می گویم! شما آزمایشگاه Understanding Skaffold
را تکمیل کرده اید و نحوه پیکربندی و استفاده از Skaffold را برای توسعه محلی و استقرار برنامه یاد گرفته اید.
بعدش چیه:
درباره Skaffold بیشتر بدانید:
پاکسازی
- دستور زیر را برای خاموش کردن کلاستر محلی اجرا کنید:
minikube delete