1. بررسی اجمالی
ASP.NET Core یک چارچوب جدید منبع باز و کراس پلتفرم برای ساخت اپلیکیشن های مدرن مبتنی بر ابر و متصل به اینترنت با استفاده از زبان برنامه نویسی C# است.
Kubernetes یک پروژه منبع باز است که میتواند در محیطهای مختلف، از لپتاپ گرفته تا خوشههای چند گرهای با در دسترس بودن بالا، از ابرهای عمومی تا استقرار در محل، از ماشینهای مجازی تا فلز خالی اجرا شود.
در این آزمایشگاه، یک برنامه ساده ASP.NET Core را روی Kubernetes که روی Kubernetes Engine اجرا می شود، مستقر می کنید. این Codelab بر روی ساخت و راه اندازی برنامه ASP.NET Core از Google Cloud Shell Codelab ساخته شده است. ممکن است بخواهید قبل از اقدام به این آزمایشگاه ابتدا آن آزمایشگاه را انجام دهید.
هدف این برنامه کد این است که شما کد خود را (یک برنامه ساده Hello World ASP.NET Core در اینجا) به یک برنامه تکراری در حال اجرا در Kubernetes تبدیل کنید. کدی را که بر روی دستگاه خود توسعه دادهاید، میگیرید، آن را به یک تصویر ظرف Docker تبدیل میکنید و سپس آن تصویر را در Google Kubernetes Engine اجرا میکنید.
در اینجا نموداری از قسمت های مختلف در حال بازی در این کد لبه وجود دارد تا به شما کمک کند تا بفهمید که چگونه قطعات با هم قرار می گیرند. از این به عنوان یک مرجع در حین پیشرفت در نرم افزار کد استفاده کنید. تا زمانی که به انتها برسید، همه چیز باید منطقی باشد (اما فعلاً این را نادیده بگیرید).
برای اهداف این نرم افزار کد، استفاده از یک محیط مدیریت شده مانند Kubernetes Engine (نسخه میزبان گوگل Kubernetes که بر روی Compute Engine اجرا می شود) به شما این امکان را می دهد که به جای راه اندازی زیرساخت های زیربنایی، بر روی تجربه Kubernetes تمرکز کنید.
اگر علاقه مند به اجرای Kubernetes بر روی دستگاه محلی خود، مانند یک لپ تاپ توسعه، هستید، احتمالاً باید Minikube را بررسی کنید. این یک راه اندازی ساده از یک خوشه kubernetes تک گره را برای اهداف توسعه و آزمایش ارائه می دهد. در صورت تمایل می توانید از Minikube برای مرور این کدها استفاده کنید.
چیزی که یاد خواهید گرفت
- چگونه یک برنامه ساده ASP.NET Core را به عنوان یک ظرف Docker بسته بندی کنیم.
- نحوه ایجاد خوشه Kubernetes خود در Google Kubernetes Engine (GKE).
- نحوه استقرار برنامه ASP.NET Core در یک پاد.
- نحوه اجازه دادن به ترافیک خارجی به پاد خود
- چگونه خدمات خود را افزایش دهید و ارتقا دهید.
- نحوه اجرای داشبورد گرافیکی Kubernetes
آنچه شما نیاز دارید
چگونه از این آموزش استفاده خواهید کرد؟
تجربه خود را با Google Cloud Platform چگونه ارزیابی می کنید؟
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
- شناسه پروژه باید در تمام پروژههای Google Cloud منحصربهفرد باشد و تغییرناپذیر باشد (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Cloud Shell را راه اندازی کنید
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Google Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان که در Cloud اجرا می شود.
Cloud Shell را فعال کنید
- از Cloud Console، روی Activate Cloud Shell کلیک کنید .
اگر قبلاً Cloud Shell را راهاندازی نکردهاید، یک صفحه میانی (در زیر تاشو) برای شما نمایش داده میشود که آن را توصیف میکند. اگر اینطور است، روی Continue کلیک کنید (و دیگر آن را نخواهید دید). در اینجا به نظر می رسد که آن صفحه یک بار مصرف:
تهیه و اتصال به Cloud Shell فقط باید چند لحظه طول بکشد.
این ماشین مجازی با تمام ابزارهای توسعه مورد نیاز شما بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. بیشتر، اگر نه همه، کار شما در این کد لبه را می توان به سادگی با یک مرورگر یا Chromebook انجام داد.
پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی ID پروژه شما تنظیم شده است.
- برای تایید احراز هویت، دستور زیر را در Cloud Shell اجرا کنید:
gcloud auth list
خروجی فرمان
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد:
gcloud config list project
خروجی فرمان
[core] project = <PROJECT_ID>
اگر اینطور نیست، می توانید آن را با این دستور تنظیم کنید:
gcloud config set project <PROJECT_ID>
خروجی فرمان
Updated property [core/project].
3. یک برنامه ASP.NET Core در Cloud Shell ایجاد کنید
در اعلان Cloud Shell، می توانید با بررسی نسخه آن، تأیید کنید که ابزار خط فرمان dotnet قبلاً نصب شده است. این باید نسخه ابزار خط فرمان نصب شده dotnet را چاپ کند:
dotnet --version
سپس، یک برنامه وب ASP.NET Core با اسکلت جدید ایجاد کنید.
dotnet new mvc -o HelloWorldAspNetCore
این باید یک پروژه ایجاد کند و وابستگی های آن را بازیابی کند. شما باید یک پیام مشابه زیر را ببینید.
Restore completed in 11.44 sec for HelloWorldAspNetCore.csproj.
Restore succeeded.
4. برنامه ASP.NET Core را اجرا کنید
ما تقریباً آماده اجرای برنامه خود هستیم. به پوشه برنامه بروید.
cd HelloWorldAspNetCore
در نهایت برنامه را اجرا کنید.
dotnet run --urls=http://localhost:8080
برنامه شروع به گوش دادن در پورت 8080 می کند.
Hosting environment: Production
Content root path: /home/atameldev/HelloWorldAspNetCore
Now listening on: http://[::]:8080
Application started. Press Ctrl+C to shut down.
برای تأیید اینکه برنامه در حال اجرا است، روی دکمه پیشنمایش وب در بالا سمت راست کلیک کنید و «پیشنمایش در پورت 8080» را انتخاب کنید.
صفحه وب پیش فرض ASP.NET Core را خواهید دید:
هنگامی که تأیید کردید که برنامه در حال اجرا است، Ctrl+C را فشار دهید تا برنامه خاموش شود.
5. برنامه ASP.NET Core را به عنوان یک ظرف Docker بسته بندی کنید
در مرحله بعد، برنامه خود را برای اجرا به عنوان یک کانتینر آماده کنید. اولین قدم این است که ظرف و محتویات آن را تعریف کنید.
در فهرست اصلی برنامه، یک Dockerfile
ایجاد کنید تا تصویر Docker را تعریف کنید.
touch Dockerfile
موارد زیر را با استفاده از ویرایشگر مورد علاقه خود (ویرایشگر کد vim,
nano,emacs
یا Cloud Shell) به Dockerfile
اضافه کنید.
# Use Microsoft's official build .NET image. # https://hub.docker.com/_/microsoft-dotnet-core-sdk/ FROM mcr.microsoft.com/dotnet/sdk:6.0-alpine AS build WORKDIR /app # Install production dependencies. # Copy csproj and restore as distinct layers. COPY *.csproj ./ RUN dotnet restore # Copy local code to the container image. COPY . ./ WORKDIR /app # Build a release artifact. RUN dotnet publish -c Release -o out # Use Microsoft's official runtime .NET image. # https://hub.docker.com/_/microsoft-dotnet-core-aspnet/ FROM mcr.microsoft.com/dotnet/aspnet:6.0-alpine-amd64 AS runtime WORKDIR /app COPY --from=build /app/out ./ # Make sure the app binds to port 8080 ENV ASPNETCORE_URLS http://*:8080 # Run the web service on container startup. ENTRYPOINT ["dotnet", "HelloWorldAspNetCore.dll"]
یکی از پیکربندیهای مهم موجود در Dockerfile، پورتی است که برنامه به ترافیک ورودی گوش میدهد (8080). این کار با تنظیم متغیر محیطی ASPNETCORE_URLS
انجام می شود که برنامه های ASP.NET Core از آن برای تعیین پورت برای گوش دادن استفاده می کنند.
این Dockerfile
را ذخیره کنید. حالا بیایید تصویر را بسازیم:
docker build -t gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1 .
پس از تکمیل (دانلود و استخراج همه چیز مدتی طول می کشد)، می توانید ببینید که تصویر به صورت محلی ساخته و ذخیره شده است:
docker images REPOSITORY TAG gcr.io/yourproject-XXXX/hello-dotnet v1
تصویر را به صورت محلی با دستور زیر آزمایش کنید که یک ظرف Docker را به صورت محلی در پورت 8080 از تصویر ظرف تازه ایجاد شده شما اجرا می کند:
docker run -p 8080:8080 gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
و دوباره از ویژگی پیش نمایش وب CloudShell استفاده کنید:
شما باید صفحه وب پیش فرض ASP.NET Core را در یک تب جدید ببینید.
هنگامی که تأیید کردید که برنامه به صورت محلی در یک ظرف Docker به خوبی اجرا میشود، میتوانید با Ctrl-> C
کانتینر در حال اجرا را متوقف کنید.
اکنون که تصویر طبق برنامه کار میکند، میتوانید آن را به Google Container Registry فشار دهید، یک مخزن خصوصی برای تصاویر Docker شما که از هر پروژه Google Cloud (و همچنین از خارج از Google Cloud Platform) قابل دسترسی است:
docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
اگر همه چیز خوب پیش رفت و پس از مدتی، باید بتوانید تصویر کانتینر فهرست شده در بخش رجیستری کانتینر را مشاهده کنید. در این مرحله، اکنون یک تصویر Docker در سراسر پروژه در دسترس دارید که Kubernetes می تواند به آن دسترسی داشته باشد و همانطور که در عرض چند دقیقه خواهید دید، آن را هماهنگ کند.
اگر کنجکاو هستید، میتوانید تصاویر کانتینر را که در Google Cloud Storage ذخیره میشوند، با دنبال کردن این پیوند پیمایش کنید: https://console.cloud.google.com/storage/browser/ (لینک کامل حاصل باید از این فرم: https://console.cloud.google.com/project/ PROJECT_ID /storage/browser/).
6. خوشه Kubernetes ایجاد کنید
خوب، شما اکنون آماده ایجاد کلاستر GKE خود هستید، اما قبل از آن، به بخش Google Kubernetes Engine در کنسول وب بروید و منتظر بمانید تا سیستم مقداردهی اولیه شود (فقط چند ثانیه طول می کشد).
یک خوشه از یک سرور API اصلی Kubernetes که توسط Google مدیریت می شود و مجموعه ای از گره های کارگر تشکیل شده است. گره های کارگر ماشین های مجازی Compute Engine هستند.
بیایید از gcloud
CLI از جلسه CloudShell خود برای ایجاد یک خوشه استفاده کنیم. منطقه خود را در جایی نزدیک به خود تنظیم کنید ( لیست مناطق ). چند دقیقه طول می کشد تا کامل شود:
gcloud container clusters create hello-dotnet-cluster --cluster-version=latest --num-nodes 4 --zone europe-west1-b
در پایان باید خوشه ایجاد شده را مشاهده کنید.
Creating cluster hello-dotnet-cluster...done. Created [https://container.googleapis.com/v1/projects/dotnet-atamel/zones/europe-west1-b/clusters/hello-dotnet-cluster]. kubeconfig entry generated for hello-dotnet-cluster. NAME ZONE MASTER_VERSION hello-dotnet-cluster europe-west1-b 1.10.7-gke.6
اکنون باید یک خوشه Kubernetes کاملاً عملکردی داشته باشید که توسط Google Kubernetes Engine طراحی شده است:
اکنون زمان آن است که برنامه کانتینری خود را در خوشه Kubernetes مستقر کنید! از این پس از خط فرمان kubectl
(که قبلاً در محیط Cloud Shell شما راه اندازی شده است) استفاده خواهید کرد. بقیه این کد لبه نیاز دارد که هم نسخه سرویس گیرنده و هم نسخه سرور kubernetes 1.2 یا بالاتر باشد. kubectl version
نسخه فعلی دستور را به شما نشان می دهد.
7. ایجاد استقرار
غلاف kubernetes گروهی از ظروف است که به منظور مدیریت و شبکه سازی به هم گره خورده اند. این می تواند شامل یک ظرف یا چند ظرف باشد. در اینجا شما به سادگی از یک ظرف ساخته شده با تصویر هسته ASP.NET خود که در رجیستری کانتینر خصوصی شما ذخیره شده است استفاده می کنید. این محتوا در پورت 8080 ارائه می شود.
یک فایل hello-dotnet.yaml
با استفاده از ویرایشگر مورد علاقه خود ( vim, nano,emacs
یا ویرایشگر کد Cloud Shell) ایجاد کنید و Kubernetes Deployment را برای pod تعریف کنید:
apiVersion: apps/v1 kind: Deployment metadata: labels: run: hello-dotnet name: hello-dotnet namespace: default spec: replicas: 1 selector: matchLabels: run: hello-dotnet template: metadata: labels: run: hello-dotnet spec: containers: - name: hello-dotnet image: gcr.io/YOUR-PROJECT-ID/hello-dotnet:v1 imagePullPolicy: IfNotPresent ports: - containerPort: 8080
با kubectl
به فضای نام پیش فرض مستقر شوید:
kubectl apply -f hello-dotnet.yaml
deployment.apps/hello-dotnet created
همانطور که می بینید، یک شیء استقرار ایجاد کرده اید. استقرارها روش توصیه شده برای ایجاد و مقیاسبندی پادها هستند. در اینجا، یک استقرار جدید یک ماکت غلاف واحد را مدیریت می کند که تصویر hello-dotnet:v1
اجرا می کند.
برای مشاهده استقراری که ایجاد کرده اید، به سادگی اجرا کنید:
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-dotnet 1 1 1 1 37s
برای مشاهده پاد ایجاد شده توسط Deployment، این دستور را اجرا کنید:
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-ztzrb 1/1 Running 0 57s
اکنون زمان خوبی برای اجرای برخی از دستورات جالب kubectl
است (هیچ یک از اینها وضعیت خوشه را تغییر نمی دهد، اسناد کامل در اینجا موجود است):
kubectl get pods kubectl cluster-info kubectl config view kubectl get events kubectl logs <pod-name>
در این مرحله شما باید کانتینر خود را تحت کنترل Kubernetes قرار دهید، اما همچنان باید آن را برای دنیای خارج قابل دسترس کنید.
8. اجازه ترافیک خارجی را بدهید
به طور پیشفرض، غلاف تنها با IP داخلی آن در خوشه قابل دسترسی است. برای اینکه کانتینر hello-dotnet
از خارج از شبکه مجازی kubernetes قابل دسترسی باشد، باید pod را به عنوان یک سرویس kubernetes در معرض دید قرار دهید.
از Cloud Shell میتوانید با دستور kubectl expose
همراه با پرچم --type="LoadBalancer"
غلاف را در اینترنت عمومی قرار دهید. این پرچم برای ایجاد یک IP قابل دسترسی خارجی مورد نیاز است:
kubectl expose deployment hello-dotnet --type="LoadBalancer" --port=8080
پرچم استفاده شده در این دستور مشخص میکند که شما از بار متعادل کننده ارائه شده توسط زیرساخت اصلی (در این مورد Compute Engine load balancer ) استفاده میکنید. توجه داشته باشید که استقرار را در معرض نمایش می گذارید، نه پاد را مستقیما. این باعث میشود که سرویس بهدستآمده، ترافیک تعادلی را در تمام پادهای مدیریت شده توسط استقرار بارگیری کند (در این مورد فقط 1 پاد، اما بعداً کپیهای بیشتری اضافه خواهید کرد).
استاد Kubernetes متعادل کننده بار و قوانین حمل و نقل موتور محاسباتی مرتبط، استخرهای هدف و قوانین فایروال را ایجاد می کند تا سرویس را به طور کامل از خارج از Google Cloud Platform در دسترس قرار دهد.
برای یافتن آدرس IP قابل دسترسی عمومی سرویس، به سادگی از kubectl
درخواست کنید تا تمام خدمات خوشه را فهرست کند:
kubectl get services
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE hello-dotnet 10.3.253.62 104.155.20.69 8080/TCP 1m kubernetes 10.3.240.1 <none> 443/TCP 5m
توجه داشته باشید که 2 آدرس IP برای سرویس شما فهرست شده است که هر دو درگاه 8080
را ارائه می دهند. یکی IP داخلی است که فقط در داخل شبکه مجازی ابری شما قابل مشاهده است. دیگری IP خارجی با بار متعادل است. در این مثال، آدرس IP خارجی 104.155.20.69
است.
اکنون باید بتوانید با اشاره مرورگر خود به این آدرس به سرویس دسترسی پیدا کنید: http://<EXTERNAL_IP>
:8080
در این مرحله شما حداقل چندین ویژگی را از انتقال به کانتینرها و Kubernetes به دست آورده اید - نیازی نیست مشخص کنید که بار کاری خود را روی کدام میزبان اجرا کنید، و همچنین از نظارت و راه اندازی مجدد سرویس بهره مند می شوید. بیایید ببینیم چه چیز دیگری می توانید از زیرساخت جدید Kubernetes خود به دست آورید.
9. خدمات خود را مقیاس کنید
یکی از ویژگی های قدرتمند ارائه شده توسط Kubernetes این است که مقیاس کردن برنامه شما چقدر آسان است. فرض کنید به طور ناگهانی به ظرفیت بیشتری برای برنامه خود نیاز دارید. شما به سادگی می توانید به کنترل کننده تکرار بگویید که تعداد جدیدی از ماکت ها را برای غلاف شما مدیریت کند:
kubectl scale deployment hello-dotnet --replicas=4
kubectl get deployment NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE hello-dotnet 4 4 4 3 16m
kubectl get pods NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-g4azy 1/1 Running 0 1m hello-dotnet-714049816-rk0u6 1/1 Running 0 1m hello-dotnet-714049816-sh812 1/1 Running 0 1m hello-dotnet-714049816-ztzrb 1/1 Running 0 16m
در اینجا به رویکرد اعلامی توجه کنید - به جای شروع یا توقف نمونههای جدید، تعداد نمونههایی که باید همیشه در حال اجرا باشند را اعلام کنید. حلقه های آشتی Kubernetes به سادگی اطمینان حاصل می کنند که واقعیت با آنچه شما درخواست کرده اید مطابقت دارد و در صورت نیاز اقدام می کند.
در اینجا نموداری است که وضعیت خوشه Kubernetes شما را خلاصه می کند:
شما همچنین می توانید خدمات خود را به راحتی کاهش دهید. در اینجا نحوه کاهش مقیاس از 4 غلاف به 2 غلاف آمده است.
kubectl scale deployment hello-dotnet --replicas=2
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-g4azy 1/1 Running 0 1m hello-dotnet-714049816-rk0u6 1/1 Running 0 1m
10. آزمون انعطاف پذیری
Kubernetes (یا به طور خاص ReplicaSet) پادهای شما را تماشا میکند و اگر مشکلی در پاد وجود داشته باشد و پایین بیاید، فوراً یک غلاف جدید ایجاد میکند. بیایید این را آزمایش کنیم و ببینیم چگونه کار می کند.
ابتدا لیست غلاف ها را دریافت کنید:
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-g4azy 1/1 Running 0 1m hello-dotnet-714049816-rk0u6 1/1 Running 0 1m
با وارد کردن نام غلاف یکی از پادها را حذف کنید:
kubectl delete pod hello-dotnet-714049816-g4azy
اگر دوباره به لیست پادها نگاه کنید، میبینید که یک پاد جدید ایجاد شده و بلافاصله دوباره اجرا میشود:
kubectl get pods
NAME READY STATUS RESTARTS AGE hello-dotnet-714049816-abczy 1/1 ContainerCreating 0 1m hello-dotnet-714049816-rk0u6 1/1 Running 0 1m
11. سرویس خود را ارتقا دهید
در برخی موارد، برنامهای که برای تولید به کار گرفتهاید به رفع اشکال یا ویژگیهای اضافی نیاز دارد. بیایید ببینیم که این روند چگونه به نظر می رسد.
ابتدا بیایید برنامه را اصلاح کنیم. ویرایشگر کد را از Cloud Shell باز کنید.
به Index.cshtml
زیر HelloWorldAspNetCore > Views > Home
بروید و یکی از پیام های چرخ فلک را به روز کنید.
خط زیر را پیدا کنید:
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core
و آن را به این تغییر دهید:
Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core on Google Cloud
تغییرات را ذخیره کنید و سپس به Cloud Shell برگردید. در داخل HelloWorldAspNetCore,
تصویر داکر را بسازید:
docker build -t gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2 .
و به رجیستری کانتینر فشار دهید:
docker push gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2
اکنون برای Kubernetes آمادهاید تا بهراحتی کنترلر تکرار شما را به نسخه جدید برنامه بهروزرسانی کند. به منظور تغییر برچسب تصویر برای ظرف در حال اجرا خود، باید hello-dotnet deployment
موجود را ویرایش کنید و تصویر را از gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v1
به gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2
تغییر دهید. gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v2
.
برای این کار از دستور kubectl edit
استفاده می کنید. با این کار یک ویرایشگر متن باز می شود که پیکربندی کامل یامل استقرار را نمایش می دهد. در حال حاضر نیازی به درک کامل پیکربندی yaml نیست، در عوض فقط درک کنید که با بهروزرسانی فیلد spec.template.spec.containers.image
در پیکربندی، به Deployment میگویید که پادها را برای استفاده از تصویر جدید بهروزرسانی کند.
kubectl edit deployment hello-dotnet
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: 2017-01-06T10:05:28Z
generation: 3
labels:
run: hello-dotnet
name: hello-dotnet
namespace: default
resourceVersion: "151017"
selfLink: /apis/extensions/v1beta1/namespaces/default/deployments/hello-dotnet
uid: 981fe302-f1e9-11e5-9a78-42010af00005
spec:
replicas: 4
selector:
matchLabels:
run: hello-dotnet
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
run: hello-dotnet
spec:
containers:
- image: gcr.io/PROJECT_ID/hello-dotnet:v1 # Update this line
imagePullPolicy: IfNotPresent
name: hello-dotnet
ports:
- containerPort: 8080
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
dnsPolicy: ClusterFirst
restartPolicy: Always
securityContext: {}
terminationGracePeriodSeconds: 30
پس از انجام تغییر، فایل را ذخیره کرده و ببندید (این از vi استفاده می کند، بنابراین Esc را فشار دهید، سپس عبارت :wq
تایپ کنید و کلید Enter را فشار دهید).
deployment "hello-dotnet" edited
این استقرار را با تصویر جدید به روز می کند و باعث می شود که پادهای جدید با تصویر جدید ایجاد شوند و پادهای قدیمی حذف شوند.
kubectl get deployments
NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE
hello-dotnet 4 5 4 3 1h
در حالی که این اتفاق می افتد، کاربران سرویس ها نباید هیچ وقفه ای ببینند. پس از مدتی آنها شروع به دسترسی به نسخه جدید برنامه شما خواهند کرد.
میتوانید جزئیات بیشتری در مورد بهروزرسانیهای متحرک در اسناد Kubernetes بیابید.
امیدواریم با این ویژگیهای استقرار، مقیاسگذاری و بهروزرسانی موافقت کنید که وقتی محیط خود را راهاندازی کردید (خوشه GKE/Kubernetes در اینجا)، Kubernetes میتواند به شما کمک کند به جای مدیریت زیرساخت، روی برنامه خود تمرکز کنید.
12. ساخت ابر
تا کنون، ما در حال ساخت کانتینرهایی با دستورات Docker معمولی بودهایم (docker build ...)، و سپس به صورت دستی تصویر را در رجیستری کانتینر Google Cloud Platform قرار دادهایم. همچنین میتوان هر دو مرحله را به سمت سرور Cloud Build موکول کرد، که میتواند تصویر کانتینر را بدون نصب محلی Docker بسازد و فشار دهد.
ابتدا، Cloud Build API را در API Manager > Library فعال کنید. Cloud Build را جستجو کنید، روی Cloud Build API کلیک کنید:
اگر قبلاً فعال نشده است، روی Enable API کلیک کنید. در پایان، باید API را به صورت زیر فعال کنید:
هنگامی که Cloud Build API فعال شد، میتوانید دستور زیر را برای ساخت و فشار دادن تصویر خود از سرویس Container Builder اجرا کنید:
$ gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/hello-dotnet:v3
تصویر به طور خودکار در Container Registry ذخیره می شود.
13. داشبورد گرافیکی Kubernetes را اجرا کنید
با نسخه های اخیر Kubernetes، یک رابط کاربری گرافیکی وب (داشبورد) معرفی شده است. این رابط کاربری به شما اجازه می دهد تا به سرعت شروع کنید و برخی از عملکردهای موجود در CLI را به عنوان روشی قابل دسترسی تر و قابل کشف تر برای تعامل با سیستم فعال می کند.
برای پیکربندی دسترسی به داشبورد خوشه Kubernetes، از پنجره Cloud Shell، این دستورات را تایپ کنید:
gcloud container clusters get-credentials hello-dotnet-cluster \ --zone europe-west1-b --project ${GOOGLE_CLOUD_PROJECT}
kubectl proxy --port 8081
و سپس یک بار دیگر از ویژگی پیش نمایش Cloud Shell برای رفتن به پورت 8081 استفاده کنید:
این باید شما را به نقطه پایانی API بفرستد. ممکن است یک صفحه "غیر مجاز" دریافت کنید اما نگران آن نباشید. برای رسیدن به داشبورد، "?authuser=3" را حذف کرده و " /ui
" را جایگزین آن کنید.
از داشبورد گرافیکی Kubernetes لذت ببرید و از آن برای استقرار برنامه های کانتینری و همچنین برای نظارت و مدیریت خوشه های خود استفاده کنید!
همچنین میتوانید با استفاده از دستورالعملهای مشابهی که از کنسول وب، دکمه «اتصال» را برای خوشهای که میخواهید نظارت کنید، فشار دهید، از یک برنامهنویس یا ماشین محلی به داشبورد دسترسی پیدا کنید.
پس از اتمام کار با داشبورد، می توانید برای متوقف کردن پروکسی، Control + C را انجام دهید. با شرکت در تور داشبورد درباره داشبورد Kubernetes بیشتر بدانید.
14. ورود به سیستم
شما می توانید از دستور kubectl logs
برای بازیابی گزارش های یک کانتینر در حال اجرا در داخل Kubernetes استفاده کنید. وقتی از Google Kubernetes Engine برای اجرای خوشه های Kubernetes مدیریت شده استفاده می کنید، همه گزارش ها به طور خودکار در Google Cloud Logging ارسال و ذخیره می شوند. با رفتن به Stackdriver → Logging → Logs در کنسول Google Cloud می توانید تمام خروجی گزارش از پادها را مشاهده کنید:
پس از ورود به کنسول گزارش، می توانید به GKE Container بروید تا همه گزارش های جمع آوری شده از STDOUT را ببینید:
از اینجا، میتوانید بهصورت اختیاری گزارشها را برای تجزیه و تحلیل گزارش بیشتر یا تنظیم هشدار مبتنی بر گزارش به Google BigQuery صادر کنید. امروز در طول آزمایشگاه این کار را نخواهیم کرد.
15. تبریک می گویم!
با این کار شروع ساده کد لبه با ASP.NET Core و Kubernetes به پایان می رسد. ما فقط سطح این فناوری را خراشیدهایم و شما را تشویق میکنیم که با غلافها، کنترلکنندههای تکرار و سرویسهای خود بیشتر کاوش کنید، اما همچنین کاوشگرهای زنده بودن (بررسی سلامت) را بررسی کنید و مستقیماً از Kubernetes API استفاده کنید.
پاک کن
همین! زمان برای تمیز کردن منابع مورد استفاده (برای صرفه جویی در هزینه و تبدیل شدن به یک شهروند ابری خوب).
Deployment (که پادهای در حال اجرا را نیز حذف می کند) و Service (که متعادل کننده بار خارجی شما را نیز حذف می کند) را حذف کنید:
ابتدا سرویس و استقرار را حذف کنید، که تعادل بار خارجی شما را نیز حذف می کند:
kubectl delete service,deployment hello-dotnet
service "hello-dotnet" deleted deployment "hello-dotnet" deleted
در مرحله بعد، خوشه خود را حذف کنید:
gcloud container clusters delete hello-dotnet-cluster --zone=europe-west1-b
The following clusters will be deleted. - [hello-dotnet-cluster] in [europe-west1-b] Do you want to continue (Y/n)? Y Deleting cluster hello-dotnet-cluster...done. Deleted [https://container.googleapis.com/v1/projects/<PROJECT_ID>/zones/europe-west1-b/clusters/hello-dotnet-cluster].
با این کار تمام نمونههای موتور محاسباتی Google که کلاستر را اجرا میکنند، حذف میشود.
در نهایت سطل ذخیره سازی رجیستری Docker را که میزبان تصویر(های) شما است حذف کنید:
gsutil ls
gs://artifacts.<PROJECT_ID>.appspot.com/
gsutil rm -r gs://artifacts.${GOOGLE_CLOUD_PROJECT}.appspot.com/ Removing gs://artifacts.<PROJECT_ID>.appspot.com/...
Removing gs://artifacts.<PROJECT_ID>.appspot.com/...
البته، میتوانید کل پروژه را نیز حذف کنید، اما هرگونه تنظیم صورتحساب را که انجام دادهاید از دست میدهید (اول باید صورتحساب پروژه را غیرفعال کنید). علاوه بر این، حذف یک پروژه تنها پس از پایان چرخه صورتحساب فعلی، تمام صورتحسابها را متوقف میکند.
آنچه را پوشش داده ایم
- چگونه یک برنامه ساده ASP.NET Core را به عنوان یک ظرف Docker بسته بندی کنیم.
- چگونه خوشه Kubernetes خود را در Google Kubernetes Engine ایجاد کنیم.
- نحوه استقرار برنامه ASP.NET Core در یک پاد.
- نحوه اجازه دادن به ترافیک خارجی به پاد خود
- چگونه خدمات خود را افزایش دهید و ارتقا دهید.
- نحوه اجرای داشبورد گرافیکی Kubernetes
مراحل بعدی
- درباره Kubernetes بیشتر بیاموزید ( http://kubernetes.io/ ).
- درباره Windows در Google Cloud Platform بیشتر بیاموزید.
- درباره .NET در Google Cloud Platform بیشتر بیاموزید.
- درباره SQL Server در Google Cloud Platform بیشتر بیاموزید.
- درباره Cloud Tools for Visual Studio بیشتر بیاموزید.
- درباره Cloud Tools for PowerShell بیشتر بیاموزید.
مجوز
این اثر تحت مجوز Creative Commons Attribution 2.0 Generic مجوز دارد.