۱. مرور کلی
این آزمایشگاه ویژگیها و قابلیتهایی را نشان میدهد که برای سادهسازی گردش کار توسعه برای مهندسان نرمافزاری که وظیفه توسعه برنامههای پایتون در یک محیط کانتینری را بر عهده دارند، طراحی شدهاند. توسعه کانتینر معمولاً مستلزم آن است که کاربر جزئیات کانتینرها و فرآیند ساخت کانتینر را درک کند. علاوه بر این، توسعهدهندگان معمولاً باید جریان خود را بشکنند و از IDE خود خارج شوند تا برنامههای خود را در محیطهای از راه دور آزمایش و اشکالزدایی کنند. با ابزارها و فناوریهای ذکر شده در این آموزش، توسعهدهندگان میتوانند بدون ترک IDE خود، به طور مؤثر با برنامههای کانتینری کار کنند.

ایستگاههای کاری ابری چیست؟
ایستگاههای کاری ابری، محیطهای توسعه مدیریتشدهای را در Google Cloud با امنیت داخلی و محیطهای توسعه از پیش پیکربندیشده اما قابل تنظیم ارائه میدهد. از طریق یک IDE مبتنی بر مرورگر، از چندین ویرایشگر کد محلی (مانند VSCode یا IDEهای JetBrains مانند IntelliJ IDEA Ultimate و PyCharm Professional) یا از طریق SSH به ایستگاههای کاری ابری دسترسی پیدا کنید.
ایستگاههای کاری ابری از منابع زیر استفاده میکنند:
- مدیران، خوشههای ایستگاه کاری ایجاد میکنند
- در هر خوشه ایستگاه کاری، مدیران یک یا چند پیکربندی ایستگاه کاری ایجاد میکنند که به عنوان الگو برای ایستگاههای کاری عمل میکنند.
- توسعهدهندگان میتوانند ایستگاههای کاری ایجاد کنند که محیطهای توسعه را تعریف میکنند و یک محیط توسعه ابری، ابزار زبان، کتابخانهها و موارد دیگر را ارائه میدهند.
ایستگاههای کاری ابری، مدیران فناوری اطلاعات و امنیت را قادر میسازد تا به راحتی محیطهای توسعه خود را فراهم، مقیاسپذیر، مدیریت و ایمن کنند و به توسعهدهندگان اجازه میدهد تا با پیکربندیهای سازگار و ابزارهای قابل تنظیم، به محیطهای توسعه دسترسی داشته باشند.
ایستگاههای کاری ابری با بهبود وضعیت امنیتی محیطهای توسعه برنامههای شما، به انتقال امنیت به سمت چپ کمک میکنند. این سیستم دارای ویژگیهای امنیتی مانند کنترلهای سرویس VPC، ورود یا خروج خصوصی، بهروزرسانی اجباری تصویر و سیاستهای دسترسی مدیریت هویت و دسترسی است.
کد ابری چیست؟
Cloud Code پشتیبانی IDE را برای چرخه کامل توسعه برنامههای Kubernetes و Cloud Run، از ایجاد و سفارشیسازی یک برنامه جدید از قالبهای نمونه گرفته تا اجرای برنامه نهایی شما، ارائه میدهد. Cloud Code در طول مسیر با نمونههای آماده اجرا، قطعه کدهای پیکربندی آماده و یک تجربه اشکالزدایی سفارشی از شما پشتیبانی میکند - که توسعه با Kubernetes و Cloud Run را بسیار آسانتر میکند!
برخی از ویژگیهای Cloud Code به شرح زیر است:
- ساخت و اجرای مداوم برنامهها
- پشتیبانی از اشکالزدایی برای برنامه Kubernetes شما در حال توسعه
- گزارش پخش و مشاهده
درباره سایر ویژگیهای Cloud Code بیشتر بدانید.
آنچه یاد خواهید گرفت
در این آزمایشگاه روشهای توسعه با کانتینرها در GCP را خواهید آموخت، از جمله:
- بررسی ایستگاههای کاری ابری
- ایستگاه کاری را راه اندازی کنید
- بررسی کد ابری
- اشکال زدایی در Kubernetes
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه ، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. میتوانید آن را در هر زمانی بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چیست. در اکثر آزمایشگاههای کد، باید به شناسه پروژه ارجاع دهید (که معمولاً با عنوان
PROJECT_IDشناخته میشود). اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند. - برای اطلاع شما، یک مقدار سوم هم وجود دارد، شماره پروژه که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، میتوانید منابعی را که ایجاد کردهاید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
تنظیمات محیط
در Cloud Shell، شناسه پروژه و شماره پروژه خود را تنظیم کنید. آنها را به عنوان متغیرهای PROJECT_ID و PROJECT_ID ذخیره کنید.
export PROJECT_ID=$(gcloud config get-value project)
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID \
--format='value(projectNumber)')
در این آزمایش شما کد را در GKE مستقر خواهید کرد. همچنین از ایستگاههای کاری ابری به عنوان IDE استفاده خواهید کرد.
اسکریپت راهاندازی زیر این زیرساخت را برای شما آماده میکند.
- اسکریپت نصب را دانلود کنید و آن را قابل اجرا کنید.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/setup_with_cw.sh
chmod +x setup_with_cw.sh
- فایل
setup_with_cw.shرا باز کنید و مقادیر رمزهای عبوری که در حال حاضر روی CHANGEME تنظیم شدهاند را ویرایش کنید. - اسکریپت راهاندازی را اجرا کنید تا یک کلاستر GKE که در این آزمایش از آن استفاده خواهید کرد، راهاندازی شود. این راهاندازی حدود 20 دقیقه طول خواهد کشید.
./setup_with_cw.sh &
- Cloud Workstations را در کنسول ابری باز کنید. قبل از رفتن به مراحل بعدی، صبر کنید تا کلاستر در وضعیت
READYقرار گیرد. - اگر اتصال Cloud Shell شما قطع شده است، روی "Reconnect" کلیک کنید و سپس دستور gcloud cli را برای تنظیم شناسه پروژه اجرا کنید. قبل از اجرای دستور، شناسه نمونه پروژه زیر را با شناسه پروژه qwiklabs خود جایگزین کنید.
gcloud config set project qwiklabs-gcp-project-id
- اسکریپت زیر را دانلود و در ترمینال اجرا کنید تا پیکربندی Cloud Workstations ایجاد شود.
wget https://raw.githubusercontent.com/GoogleCloudPlatform/container-developer-workshop/main/labs/python/workstation_config_setup.sh
chmod +x workstation_config_setup.sh
./workstation_config_setup.sh
خوشهبندی و پیکربندی ایستگاههای کاری ابری
ایستگاههای کاری ابری را در کنسول ابری باز کنید. تأیید کنید که خوشه در وضعیت READY است.

وضعیت پیکربندیهای موجود را تأیید کنید.

یک ایستگاه کاری جدید ایجاد کنید.

نام را به my-workstation تغییر دهید و پیکربندی موجود را انتخاب کنید: codeoss-python .

ایستگاه کاری را راه اندازی کنید
- ایستگاه کاری را شروع و اجرا کنید. شروع به کار ایستگاه کاری چند لحظه طول خواهد کشید.

- با کلیک روی نماد در نوار آدرس، کوکیهای شخص ثالث را مجاز کنید.


- روی «سایت کار نمیکند؟» کلیک کنید.

- روی «اجازه دادن به کوکیها» کلیک کنید.

- به محض اینکه ایستگاه کاری راهاندازی شود، خواهید دید که Code OSS IDE ظاهر میشود.
در صفحه شروع به کار، روی «علامتگذاری انجام شد» در محیط توسعه یکپارچه ایستگاه کاری کلیک کنید.

۳. بررسی اجمالی کد ابری
بخشهای مختلف موجود در Cloud Code را بررسی کنید.
- توسعه Kubernetes. یک محیط توسعه و اشکالزدایی Kubernetes کاملاً یکپارچه در IDE خود داشته باشید. خوشهها را مستقیماً از داخل IDE ایجاد و مدیریت کنید.
- اشکالزدایی برنامههای در حال اجرا. با استفاده از ویژگیهای اشکالزدایی داخلی IDE، با استفاده از Cloud Code برای VS Code و Cloud Code برای IntelliJ، کد درون IDEهای خود را اشکالزدایی کنید.
- استقرارها را کاوش کنید. منابع و فرادادههای اساسی را برای خوشههای Kubernetes و سرویسهای Cloud Run خود مشاهده کنید. میتوانید توضیحات را دریافت کنید، گزارشها را مشاهده کنید، اسرار را مدیریت کنید یا یک ترمینال را مستقیماً به یک پاد وارد کنید.
- سادهسازی توسعه محلی Kubernetes. در پشت صحنه، Cloud Code برای IDEها از ابزارهای محبوبی مانند Skaffold، Jib و kubectl برای ارائه بازخورد مداوم در مورد کد شما به صورت بلادرنگ استفاده میکند.

وارد فضای ابری گوگل شوید
- روی آیکون Cloud Code کلیک کنید و گزینه «ورود به سیستم Google Cloud» را انتخاب کنید:

- روی «ادامه برای ورود» کلیک کنید.

- خروجی را در ترمینال بررسی کنید و لینک را باز کنید:

- با اعتبارنامههای دانشجویی Qwiklabs خود وارد شوید.

- گزینه "مجاز" را انتخاب کنید:

- کد تأیید را کپی کنید و به برگه Workstation برگردید.

- کد تأیید را جایگذاری کنید و Enter را بزنید.

اگر این پیام را مشاهده کردید، روی دکمه «مجاز» کلیک کنید تا بتوانید کپی پیست را در ایستگاه کاری انجام دهید.

۴. یک برنامهی آغازین پایتون جدید ایجاد کنید
در این بخش، یک برنامه جدید پایتون ایجاد خواهید کرد.
- یک ترمینال جدید باز کنید.

- یک دایرکتوری جدید ایجاد کنید و آن را به عنوان یک فضای کاری باز کنید
mkdir music-service && cd music-service
code-oss-cloud-workstations -r --folder-uri="$PWD"
- یک فایل به نام
requirements.txtایجاد کنید و محتویات زیر را در آن کپی کنید.

Flask
gunicorn
ptvsd==4.3.2
- یک فایل با نام
app.pyایجاد کنید و کد زیر را در آن قرار دهید.
import os
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route("/")
def hello_world():
message="Hello, World!"
return message
if __name__ == '__main__':
server_port = os.environ.get('PORT', '8080')
app.run(debug=False, port=server_port, host='0.0.0.0')
- یک فایل با نام
Dockerfileایجاد کنید و کد زیر را در آن قرار دهید:
FROM python:3.8
ARG FLASK_DEBUG=0
ENV FLASK_DEBUG=$FLASK_DEBUG
ENV FLASK_APP=app.py
WORKDIR /app
COPY requirements.txt .
RUN pip install --trusted-host pypi.python.org -r requirements.txt
COPY . .
ENTRYPOINT ["python3", "-m", "flask", "run", "--port=8080", "--host=0.0.0.0"]
نکته : FLASK_DEBUG=1 به شما امکان میدهد تغییرات کد را به صورت خودکار در یک برنامه فلاسک پایتون بارگذاری مجدد کنید. این Dockerfile به شما امکان میدهد این مقدار را به عنوان آرگومان ساخت ارسال کنید.
تولید مانیفست
در ترمینال خود دستور زیر را اجرا کنید تا فایلهای پیشفرض skaffold.yaml و deployment.yaml ایجاد شوند.
- Skaffold را با دستور زیر مقداردهی اولیه کنید
skaffold init --generate-manifests
وقتی از شما خواسته شد، از فلشها برای حرکت دادن مکاننما و از کلید فاصله برای انتخاب گزینهها استفاده کنید.
انتخاب کنید:
-
8080برای پورت -
yبرای ذخیره پیکربندی
بهروزرسانی پیکربندیهای Skaffold
- تغییر نام پیشفرض برنامه
-
skaffold.yamlرا باز کنید. - نام تصویری که در حال حاضر به عنوان
dockerfile-imageتنظیم شده است را انتخاب کنید - کلیک راست کرده و گزینه Change All Occurrences را انتخاب کنید.
- نام جدید را
python-appتایپ کنید. - بخش ساخت را بیشتر ویرایش کنید تا
-
docker.buildArgsبرای ارسالFLASK_DEBUG=1اضافه کنید - تنظیمات را برای بارگذاری هرگونه تغییر در فایلهای
*.pyاز IDE به کانتینر در حال اجرا همگامسازی کنید
پس از ویرایشها، بخش ساخت در فایل skaffold.yaml به صورت زیر خواهد بود:
build:
artifacts:
- image: python-app
docker:
buildArgs:
FLASK_DEBUG: "1"
dockerfile: Dockerfile
sync:
infer:
- '**/*.py'
تغییر فایل پیکربندی Kubernetes
- تغییر نام پیشفرض
- فایل
deployment.yamlرا باز کنید - نام تصویری که در حال حاضر به عنوان
dockerfile-imageتنظیم شده است را انتخاب کنید - کلیک راست کرده و گزینه Change All Occurrences را انتخاب کنید.
- نام جدید را
python-appتایپ کنید.
۵. گام برداشتن در مسیر توسعه
با اضافه شدن منطق تجاری، اکنون میتوانید برنامه خود را مستقر و آزمایش کنید. بخش بعدی نحوه استفاده از افزونه Cloud Code را نشان میدهد. در میان موارد دیگر، این افزونه با skaffold ادغام میشود تا فرآیند توسعه شما را سادهتر کند. وقتی در مراحل بعدی در GKE مستقر میشوید، Cloud Code و Skaffold به طور خودکار تصویر کانتینر شما را میسازند، آن را به یک رجیستری کانتینر منتقل میکنند و سپس برنامه your را در GKE مستقر میکنند. این اتفاق در پشت صحنه رخ میدهد و جزئیات را از جریان توسعهدهنده جدا میکند.
اضافه کردن کلاستر Kubernetes
- اضافه کردن یک خوشه

- موتور گوگل کوبرنتیز را انتخاب کنید:

- انتخاب پروژه.

- "python-cluster" که در تنظیمات اولیه ایجاد شده بود را انتخاب کنید.

- اکنون این کلاستر در فهرست کلاسترهای Kubernetes در زیر Cloud Code نمایش داده میشود. از اینجا میتوانید به آن دسترسی پیدا کرده و آن را بررسی کنید.

استقرار در Kubernetes
- در پنل پایین ویرایشگر Cloud Shell، گزینه Cloud Code  را انتخاب کنید.

- در پنلی که در بالا ظاهر میشود، گزینه Run on Kubernetes را انتخاب کنید.
در صورت درخواست، برای استفاده از زمینه فعلی Kubernetes، بله را انتخاب کنید.

این دستور، ساخت کد منبع را آغاز میکند و سپس تستها را اجرا میکند. ساخت و اجرای تستها چند دقیقه طول میکشد. این تستها شامل تستهای واحد و یک مرحله اعتبارسنجی هستند که قوانینی را که برای محیط استقرار تعیین شدهاند، بررسی میکند. این مرحله اعتبارسنجی از قبل پیکربندی شده است و تضمین میکند که حتی در حالی که هنوز در محیط توسعه خود کار میکنید، در مورد مشکلات استقرار هشدار دریافت کنید.
- اولین باری که دستور را اجرا میکنید، پیامی در بالای صفحه ظاهر میشود که از شما میپرسد آیا میخواهید از چارچوب فعلی kubernetes استفاده کنید یا خیر. برای پذیرش و استفاده از چارچوب فعلی، «بله» را انتخاب کنید.
- در مرحله بعد، پیامی نمایش داده میشود که از شما میپرسد از کدام رجیستری کانتینر استفاده کنید. برای پذیرش مقدار پیشفرض ارائه شده، Enter را فشار دهید.
- برای مشاهده پیشرفت و اعلانها، برگه «خروجی» را در پنل پایین انتخاب کنید. با استفاده از منوی کشویی، «Kubernetes: Run/Debug» را انتخاب کنید.

- برای مشاهده جزئیات بیشتر و گزارشهای زنده از کانتینرها، در منوی کشویی سمت راست، گزینه "Kubernetes: Run/Debug - Detailed" را انتخاب کنید.

وقتی ساخت و آزمایشها انجام شد، در برگه گزارشهای خروجی، آدرس http://localhost:8080 در نمای "Kubernetes: Run/Debug" نمایش داده میشود.
- در ترمینال Cloud Code، نشانگر ماوس را روی اولین URL در خروجی (http://localhost:8080) نگه دارید و سپس در ابزار نمایش داده شده، گزینه Open Web Preview را انتخاب کنید.
- یک تب جدید در مرورگر باز میشود و این پیام را نمایش میدهد:
Hello, World!
بارگیری مجدد داغ
- فایل
app.pyرا باز کنید. - پیام خوشامدگویی را
Hello from Pythonتغییر دهید
فوراً توجه کنید که در پنجره Output ، نمای Kubernetes: Run/Debug ، ناظر فایلهای بهروزرسانیشده را با کانتینر در Kubernetes همگامسازی میکند.
Update initiated Build started for artifact python-app Build completed for artifact python-app Deploy started Deploy completed Status check started Resource pod/python-app-6f646ffcbb-tn7qd status updated to In Progress Resource deployment/python-app status updated to In Progress Resource deployment/python-app status completed successfully Status check succeeded ...
- اگر به
Kubernetes: Run/Debug - Detailed، متوجه خواهید شد که تغییرات فایل را تشخیص میدهد، سپس برنامه را میسازد و دوباره مستقر میکند.
files modified: [app.py]
Syncing 1 files for gcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Copying files:map[app.py:[/app/app.py]]togcr.io/veer-pylab-01/python-app:3c04f58-dirty@sha256:a42ca7250851c2f2570ff05209f108c5491d13d2b453bb9608c7b4af511109bd
Watching for changes...
[python-app] * Detected change in '/app/app.py', reloading
[python-app] * Restarting with stat
[python-app] * Debugger is active!
[python-app] * Debugger PIN: 744-729-662
- برای دیدن نتایج بهروز شده، تب مرورگر خود را که نتایج قبلی را در آن مشاهده کردهاید، رفرش کنید.
اشکالزدایی
- به نمای اشکالزدایی (Debug view) بروید و رشته فعلی را متوقف کنید.
اگر از شما سوال شد، میتوانید بعد از هر بار اجرا، پاکسازی را انتخاب کنید. 
- در منوی پایین روی
Cloud Codeکلیک کنید وDebug on Kubernetesرا انتخاب کنید تا برنامه در حالتdebugاجرا شود.

- در پنجره
Kubernetes Run/Debug - Detailedاز پنجرهOutput، توجه داشته باشید که skaffold این برنامه را در حالت اشکالزدایی مستقر خواهد کرد.
- اولین باری که این اجرا میشود، یک اعلان از شما میپرسد که منبع درون کانتینر کجاست. این مقدار مربوط به دایرکتوریهای موجود در Dockerfile است.
برای پذیرش پیشفرض، Enter را فشار دهید

ساخت و استقرار برنامه چند دقیقه طول خواهد کشید. اگر جلسه اشکالزدایی قطع شد، مراحل «اشکالزدایی روی Kubernetes» را از بخش «جلسات توسعه» دوباره اجرا کنید.
- وقتی فرآیند کامل شد، متوجه خواهید شد که یک اشکالزدا (دیباگر) متصل شده و در تب خروجی نوشته شده است:
Attached debugger to container "python-app-8476f4bbc-h6dsl" successfully.و آدرس اینترنتی http://localhost:8080 نیز در فهرست آمده است.
Port forwarding pod/python-app-8bd64cf8b-cskfl in namespace default, remote port 5678 -> http://127.0.0.1:5678
- نوار وضعیت پایین، رنگ خود را از آبی به نارنجی تغییر میدهد که نشان میدهد در حالت اشکالزدایی (Debug mode) است.

- در نمای
Kubernetes Run/Debug، توجه کنید که یک کانتینر Debuggable آغاز شده است.
**************URLs***************** Forwarded URL from service python-app: http://localhost:8080 Debuggable container started pod/python-app-8bd64cf8b-cskfl:python-app (default) Update succeeded ***********************************
استفاده از نقاط شکست
- فایل
app.pyرا باز کنید. - دستوری که
return messageمیخواند، پیدا کنید. - با کلیک کردن روی فضای خالی سمت چپ شماره خط، یک نقطه توقف به آن خط اضافه کنید. یک نشانگر قرمز نشان داده میشود که نشان میدهد نقطه توقف تنظیم شده است.
- مرورگر خود را مجدداً بارگذاری کنید و توجه داشته باشید که اشکالزدا فرآیند را در نقطه توقف متوقف میکند و به شما امکان میدهد متغیرها و وضعیت برنامهای را که از راه دور در GKE اجرا میشود، بررسی کنید.
- روی قسمت VARIABLES کلیک کنید.
- روی Locals کلیک کنید تا متغیر
"message"را پیدا کنید. - روی متغیر «message» دوبار کلیک کنید و در پنجره باز شده، مقدار آن را به چیزی متفاوت مانند
"Greetings from Python"تغییر دهید. - روی دکمه ادامه در پنل کنترل اشکالزدایی کلیک کنید

- پاسخ را در مرورگر خود بررسی کنید که اکنون مقدار بهروزرسانیشدهای را که وارد کردهاید نشان میدهد.
- با فشار دادن دکمه توقف، حالت «اشکالزدایی» را متوقف کنید
و با کلیک مجدد روی نقطه شکست، آن را حذف کنید.
۶. پاکسازی
تبریک! در این آزمایش شما یک برنامه پایتون جدید را از ابتدا ایجاد و آن را برای کار مؤثر با کانتینرها پیکربندی کردهاید. سپس برنامه خود را طبق همان جریان توسعهدهندهای که در پشتههای برنامه سنتی یافت میشود، در یک کلاستر GKE از راه دور مستقر و اشکالزدایی کردهاید.
برای تمیز کردن پس از اتمام آزمایشگاه:
- فایلهای استفاده شده در آزمایشگاه را حذف کنید
cd ~ && rm -rf ~/music-service
- پروژه را حذف کنید تا تمام زیرساختها و منابع مرتبط حذف شوند.
—
آخرین بهروزرسانی: 23/3/22