درک Skaffold

1. اهداف

Skaffold ابزاری است که گردش کار را برای ایجاد، فشار دادن و استقرار برنامه شما مدیریت می کند. شما می توانید از Skaffold برای پیکربندی آسان یک فضای کاری توسعه محلی، ساده کردن حلقه توسعه داخلی خود و ادغام با ابزارهای دیگر مانند Kustomize و Helm برای کمک به مدیریت مانیفست های Kubernetes خود استفاده کنید.

در این آموزش شما بر روی برخی از مفاهیم اصلی Skaffold کار می کنید، از آن برای خودکار کردن حلقه توسعه داخلی خود استفاده می کنید، سپس یک برنامه کاربردی را اجرا می کنید.

شما:

  • Skaffold را برای توسعه محلی پیکربندی و فعال کنید
  • یک برنامه ساده گلانگ بسازید و اجرا کنید
  • مدیریت استقرار برنامه های محلی با Skaffold
  • مانیفست ها را رندر کنید و برنامه خود را مستقر کنید

2. قبل از شروع

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

  1. با مراجعه به url زیر، ویرایشگر Cloud Shell را باز کنید:
https://shell.cloud.google.com

کوکی های شخص ثالث را مجاز کنید. روی "سایت کار نمی کند" و سپس "اجازه کوکی ها" را کلیک کنید.

7b702066a2135a3d.png

3394f82132eb4fd4.png

  1. اگر قبلاً این کار را انجام نداده اید، در پنجره ترمینال منبع برنامه را با دستور زیر شبیه سازی کنید:
git clone https://github.com/GoogleCloudPlatform/software-delivery-workshop.git
  1. به دایرکتوری مخزن کلون شده تغییر دهید:
cd software-delivery-workshop/labs/understanding-skaffold/getting-started
  1. با اجرای دستور زیر فضای کاری Cloud Shell خود را روی دایرکتوری فعلی تنظیم کنید:
cloudshell workspace .

در حال آماده سازی پروژه شما

  1. با اجرای دستور زیر مطمئن شوید که پروژه Google Cloud شما به درستی تنظیم شده است:
gcloud config set project {{project-id}}

3. شروع کار با Skaffold

  1. دستور زیر را برای ایجاد فایل پیکربندی سطح بالای 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
  1. فایل 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 را باز کنید. توجه داشته باشید که تعداد کپی‌ها برای برنامه در اینجا به صورت سه تنظیم شده است که بر پیکربندی پایه حذف می‌شود.

  1. app > main.go را در صفحه IDE باز کنید. این یک برنامه گلانگ ساده است که هر ثانیه یک رشته برای stdout می نویسد.
  2. توجه داشته باشید که برنامه همچنین نام غلاف Kubernetes را که در آن اجرا می شود را خروجی می دهد.

مشاهده Dockerfile

  1. app > Dockerfile را در صفحه IDE باز کنید. این فایل حاوی مجموعه ای از دستورالعمل ها برای ساخت تصویر کانتینر برنامه برای فایل main.go است و در فایل سطح بالای skaffold.yaml به آن ارجاع داده شده است.

7. در حال توسعه با Skaffold

پیکربندی محیط Kubernetes شما

  1. دستور زیر را اجرا کنید تا مطمئن شوید که خوشه محلی Kubernetes شما در حال اجرا و پیکربندی است:
minikube start

ممکن است چند دقیقه طول بکشد. اگر خوشه با موفقیت شروع شده باشد باید خروجی زیر را ببینید:

Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
  1. دستور زیر را برای ایجاد فضای نام Kubernetes برای dev ، staging و prod اجرا کنید:
kubectl apply -f namespaces.yaml

شما باید خروجی زیر را ببینید:

namespace/dev created
namespace/staging created
namespace/prod created

استفاده از Skaffold برای توسعه محلی

  1. دستور زیر را برای ساختن برنامه و استقرار آن در یک خوشه محلی Kubernetes که در Cloud Shell اجرا می شود اجرا کنید:
skaffold dev

باید مشاهده کنید که فرآیند ساخت کانتینر برنامه اجرا می شود، که ممکن است یک دقیقه طول بکشد، و سپس خروجی برنامه هر ثانیه تکرار می شود:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-dev-xxxxxxxxx-xxxxx

توجه داشته باشید که نام دقیق غلاف با خروجی عمومی داده شده در بالا متفاوت است.

ایجاد تغییرات در برنامه

اکنون که برنامه در کلاستر محلی Kubernetes شما اجرا می شود، می توانید تغییراتی در کد ایجاد کنید و Skaffold به طور خودکار برنامه را بازسازی کرده و مجدداً در کلاستر قرار می دهد.

  1. فایل app > main.go را در صفحه IDE باز کنید و رشته خروجی را تغییر دهید:
"Hello world from pod %s!\n"

به:

"Hello Skaffold world from pod %s!\n"

هنگامی که تغییر را انجام دادید، باید Skaffold را ببینید که تصویر را بازسازی کرده و آن را مجدداً در خوشه قرار می دهد، با تغییر در خروجی در پنجره ترمینال قابل مشاهده است.

  1. اکنون، همچنین در فایل "app > main.go" در صفحه IDE، خط را تغییر دهید:
time.Sleep(time.Second * 1)

به

time.Sleep(time.Second * 10)

مجدداً باید ببینید که برنامه بازسازی شده و مجدداً مستقر شده است و خط خروجی هر 10 ثانیه یک بار ظاهر می شود.

ایجاد تغییرات در پیکربندی Kubernetes

در مرحله بعد، تغییری در پیکربندی Kubernetes ایجاد می‌کنید و یک بار دیگر Skaffold به طور خودکار مجدداً مستقر می‌شود.

  1. فایل base > deployment.yaml در IDE باز کنید و خط را تغییر دهید:
replicas: 1

به

replicas: 2

هنگامی که برنامه مجدداً مستقر شد، باید دو پاد در حال اجرا را مشاهده کنید - هر کدام نام متفاوتی دارند.

  1. اکنون همان خط را در file base > deployment.yaml تغییر دهید به:
replicas: 1

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

  1. در نهایت، Ctrl-C در پنجره ترمینال فشار دهید تا توسعه محلی Skaffold متوقف شود.

برش رهاسازی

در مرحله بعد، با ساختن یک تصویر انتشار و استقرار آن در یک خوشه، یک نسخه را ایجاد خواهید کرد.

  1. دستور زیر را برای ساخت نسخه اجرا کنید:
skaffold build --file-output artifacts.json

این دستور تصویر نهایی را (در صورت لزوم) می سازد و جزئیات انتشار را در فایل artifacts.json خروجی می دهد.

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

  1. برای مشاهده محتویات فایل artifacts.json دستور زیر را اجرا کنید:
cat artifacts.json | jq

توجه داشته باشید که فایل حاوی ارجاع به تصویری است که در استقرار نهایی استفاده خواهد شد.

استقرار به صحنه سازی

  1. دستور زیر را برای استقرار نسخه با استفاده از نمایه staging اجرا کنید:
skaffold deploy --profile staging --build-artifacts artifacts.json --tail

پس از تکمیل استقرار، باید خروجی دو پاد مشابه زیر را مشاهده کنید:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-staging-xxxxxxxxxx-xxxxx!
  1. Ctrl-C را در پنجره ترمینال فشار دهید تا خروجی Skaffold متوقف شود.
  2. دستور زیر را اجرا کنید تا برنامه خود را در حال اجرا در کلاستر مشاهده کنید:
kubectl get all --namespace staging

شما باید دو نام غلاف متمایز را ببینید، زیرا نمایه staging برای برنامه مشخص می‌کند که باید دو کپی در استقرار وجود داشته باشد.

استقرار به تولید

  1. اکنون دستور زیر را برای استقرار نسخه با استفاده از پروفایل prod اجرا کنید:
skaffold deploy --profile prod --build-artifacts artifacts.json --tail

پس از تکمیل استقرار، باید خروجی سه پاد مشابه زیر را مشاهده کنید:

[skaffold-kustomize] Hello world from pod skaffold-kustomize-prod-xxxxxxxxxx-xxxxx!
  1. Ctrl-C را در پنجره ترمینال فشار دهید تا خروجی Skaffold متوقف شود.

شما باید سه نام غلاف متمایز را ببینید، زیرا پروفایل prod برای برنامه مشخص می‌کند که باید سه نسخه مشابه در استقرار وجود داشته باشد.

  1. دستور زیر را اجرا کنید تا برنامه خود را در حال اجرا در کلاستر مشاهده کنید:
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 بیشتر بدانید:

پاکسازی

  1. دستور زیر را برای خاموش کردن کلاستر محلی اجرا کنید:
minikube delete