۱. مقدمه
اجرای وبسایتها و برنامهها سخت است.
اوضاع وقتی که نباید، خراب میشود، سرورها از کار میافتند، افزایش تقاضا باعث میشود منابع بیشتری مورد استفاده قرار گیرند و ایجاد تغییرات بدون از کارافتادگی، پیچیده و استرسزا است.
ابزاری را تصور کنید که میتواند به شما در انجام همه این کارها کمک کند و حتی به شما امکان خودکارسازی آنها را بدهد! با GKE، همه این کارها نه تنها ممکن است، بلکه آسان نیز هست! در این آزمایشگاه کد، شما نقش یک توسعهدهنده را که یک وبسایت تجارت الکترونیک را برای یک شرکت فرضی - Fancy Store - اداره میکند، بر عهده میگیرید. به دلیل مشکلات مربوط به مقیاسپذیری و قطعیها، وظیفه دارید برنامه خود را روی GKE مستقر کنید!
این تمرینها به گونهای مرتب شدهاند که منعکسکنندهی تجربهی یک توسعهدهندهی ابری معمولی باشند:
- یک کلاستر GKE ایجاد کنید.
- یک کانتینر داکر ایجاد کنید.
- کانتینر را در GKE مستقر کنید.
- کانتینر را از طریق یک سرویس در معرض دید قرار دهید.
- کانتینر را به چندین کپی مقیاسبندی کنید.
- وبسایت را اصلاح کنید.
- نسخه جدیدی را بدون هیچ گونه خرابی منتشر کنید.
نمودار معماری

آنچه یاد خواهید گرفت
- نحوه ایجاد یک کلاستر GKE
- نحوه ایجاد یک تصویر داکر
- نحوه استقرار تصاویر داکر در کوبرنتیز
- نحوه مقیاسبندی یک برنامه در Kubernetes
- نحوه انجام بهروزرسانی چرخشی در Kubernetes
پیشنیازها
۲. تنظیمات محیطی
تنظیم محیط خودتنظیم
اگر از قبل حساب گوگل ندارید، باید یکی ایجاد کنید . وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید.


به یاد داشته باشید، شناسه پروژه یک نام منحصر به فرد در تمام پروژههای Google Cloud است (نام بالا قبلاً گرفته شده و برای شما کار نخواهد کرد، متاسفیم!). بعداً به آن PROJECT_ID گفته خواهد شد.
در مرحله بعد، برای استفاده از منابع Google Cloud، باید امکان پرداخت صورتحساب را در Cloud Console فعال کنید. کاربران جدید Google Cloud واجد شرایط دریافت یک دوره آزمایشی رایگان ۳۰۰ دلاری هستند. اگر کاربر جدید نیستید، نگران نباشید زیرا Codelab نباید بیش از چند دلار برای شما هزینه داشته باشد. با این حال، اگر از منابع بیشتری استفاده کنید یا آنها را در حال اجرا بگذارید، Codelab میتواند هزینه بیشتری برای شما داشته باشد (به بخش "پاکسازی" در انتها مراجعه کنید). برای اطلاعات بیشتر، به قیمتگذاری مراجعه کنید.
پوسته ابری
در حالی که میتوانید از راه دور با لپتاپ خود Google Cloud و GKE را مدیریت کنید، برای codelab از Cloud Shell - یک محیط خط فرمان که در Cloud اجرا میشود - استفاده خواهید کرد.
این ماشین مجازی مبتنی بر دبیان، تمام ابزارهای توسعه مورد نیاز شما را در خود جای داده است. این ماشین مجازی یک دایرکتوری خانگی ۵ گیگابایتی دائمی ارائه میدهد و در فضای ابری گوگل اجرا میشود که عملکرد شبکه و احراز هویت را تا حد زیادی بهبود میبخشد. این بدان معناست که تنها چیزی که برای این آزمایشگاه کد نیاز دارید یک مرورگر است (بله، روی کرومبوک هم کار میکند).
- برای فعال کردن Cloud Shell از کنسول Cloud، کافیست روی Activate Cloud Shell کلیک کنید.
(فقط چند لحظه طول میکشد تا آماده شود و به محیط متصل شود).
پس از اتصال به Cloud Shell، باید ببینید که از قبل احراز هویت شدهاید و پروژه از قبل روی PROJECT_ID شما تنظیم شده است.
gcloud auth list
خروجی دستور
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
خروجی دستور
[core] project = <PROJECT_ID>
اگر به هر دلیلی پروژه تنظیم نشده باشد، کافیست دستور زیر را اجرا کنید:
gcloud config set project <PROJECT_ID>
به دنبال PROJECT_ID خود هستید؟ بررسی کنید که در مراحل راهاندازی از چه شناسهای استفاده کردهاید یا آن را در داشبورد Cloud Console جستجو کنید:
Cloud Shell همچنین برخی از متغیرهای محیطی را به طور پیشفرض تنظیم میکند که ممکن است هنگام اجرای دستورات بعدی مفید باشند.
echo $GOOGLE_CLOUD_PROJECT
خروجی دستور
<PROJECT_ID>
- در نهایت، منطقه پیشفرض و پیکربندی پروژه را تنظیم کنید.
gcloud config set compute/zone us-central1-f
شما میتوانید مناطق مختلفی را انتخاب کنید. برای اطلاعات بیشتر، به بخش مناطق و نواحی مراجعه کنید.
۳. ایجاد یک خوشه GKE
حالا که محیط توسعهدهندهی فعال خود را دارید، به یک کلاستر GKE برای استقرار وبسایت خود نیاز دارید! قبل از ایجاد یک کلاستر، باید مطمئن شوید که APIهای مناسب فعال هستند. دستور زیر را برای فعال کردن API کانتینرها اجرا کنید:
gcloud services enable container.googleapis.com
حالا میتوانید کلاستر خود را ایجاد کنید! مراحل زیر را برای ایجاد کلاستری به نام fancy-cluster با ۳ گره دنبال کنید:
gcloud container clusters create fancy-cluster --num-nodes 3
ممکن است ایجاد کلاستر چند دقیقه طول بکشد. پس از آن، دستور زیر را اجرا کنید و سه نمونه ماشین مجازی کارگر (VM) کلاستر را مشاهده کنید:
gcloud compute instances list
خروجی:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS gke-fancy-cluster-default-pool-ad92506d-1ng3 us-east4-a n1-standard-1 10.150.0.7 XX.XX.XX.XX RUNNING gke-fancy-cluster-default-pool-ad92506d-4fvq us-east4-a n1-standard-1 10.150.0.5 XX.XX.XX.XX RUNNING gke-fancy-cluster-default-pool-ad92506d-4zs3 us-east4-a n1-standard-1 10.150.0.6 XX.XX.XX.XX RUNNING
همچنین میتوانید کلاستر و اطلاعات مرتبط با آن را در Cloud Console مشاهده کنید. روی دکمه منو در گوشه بالا سمت چپ کلیک کنید، به پایین صفحه بروید تا به Kubernetes Engine برسید و روی Clusters کلیک کنید. باید کلاستر خود را با نام fancy-cluster ببینید.


تبریک! شما اولین کلاستر خود را ایجاد کردید!
۴. کپی کردن مخزن منبع
از آنجا که این یک وبسایت موجود است، شما فقط باید منبع را از مخزن کلون کنید تا بتوانید روی ایجاد تصاویر داکر و استقرار در GKE تمرکز کنید.
دستورات زیر را برای کپی کردن مخزن منبع به نمونه Cloud Shell خود و تغییر آن به دایرکتوری مناسب اجرا کنید. همچنین وابستگیهای Node.js را نصب خواهید کرد تا بتوانید برنامه خود را قبل از استقرار آزمایش کنید.
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices ./setup.sh
این دستور مخزن را کپی میکند، دایرکتوری را تغییر میدهد و وابستگیهای لازم برای اجرای محلی برنامه شما را نصب میکند. اجرای آن اسکریپت ممکن است چند دقیقه طول بکشد.
بررسیهای لازم را انجام دهید و برنامه خود را آزمایش کنید. دستور زیر را برای شروع سرور وب خود اجرا کنید:
cd ~/monolith-to-microservices/monolith npm start
خروجی:
Monolith listening on port 8080!
شما میتوانید با کلیک روی آیکون پیشنمایش وب در منوی Cloud Shell و انتخاب پیشنمایش روی پورت ۸۰۸۰، پیشنمایشی از برنامه خود را مشاهده کنید.

این باید یک پنجره جدید باز کند که در آن میتوانید فروشگاه فانتزی خود را در حال کار ببینید!

میتوانید پس از مشاهده وبسایت، آن پنجره را ببندید. برای متوقف کردن فرآیند وب سرور، در پنجره ترمینال، Control+C (ویندوز یا مک) را فشار دهید.
۵. ایجاد کانتینر داکر با Cloud Build
حالا که فایلهای منبع شما آماده هستند، وقت آن رسیده که برنامه خود را داکرایز کنید!
معمولاً، شما باید یک رویکرد دو مرحلهای را در پیش بگیرید که شامل ساخت یک کانتینر داکر و قرار دادن آن در یک رجیستری برای ذخیره تصویری است که GKE از آن دریافت میکند. با این حال، میتوانید با استفاده از Cloud Build برای ایجاد کانتینر داکر و قرار دادن تصویر در رجیستری کانتینر با یک دستور واحد، کار را آسانتر کنید! (برای مشاهده فرآیند دستی ایجاد یک فایل داکر و قرار دادن آن، به Quickstart برای رجیستری کانتینر مراجعه کنید.)
Cloud Build فایلها را از دایرکتوری فشرده کرده و آنها را به یک مخزن ذخیرهسازی ابری منتقل میکند. سپس فرآیند ساخت، فایلها را از مخزن گرفته و از Dockerfile برای اجرای فرآیند ساخت Docker استفاده میکند. از آنجا که شما پرچم --tag را با میزبان gcr.io برای تصویر Docker مشخص کردهاید، تصویر Docker حاصل به رجیستری کانتینر منتقل میشود.
ابتدا باید با اجرای دستور زیر، Cloud Build API را فعال کنید:
gcloud services enable cloudbuild.googleapis.com
پس از فعال شدن API، دستور زیر را در Cloud Shell اجرا کنید تا فرآیند ساخت آغاز شود:
cd ~/monolith-to-microservices/monolith
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 .
این فرآیند چند دقیقه طول میکشد، اما پس از اتمام آن، میتوانید خروجی زیر را در ترمینال مشاهده کنید:
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ID CREATE_TIME DURATION SOURCE IMAGES STATUS 1ae295d9-63cb-482c-959b-bc52e9644d53 2019-08-29T01:56:35+00:00 33S gs://<PROJECT_ID>_cloudbuild/source/1567043793.94-abfd382011724422bf49af1558b894aa.tgz gcr.io/<PROJECT_ID>/monolith:1.0.0 SUCCESS
برای مشاهده تاریخچه ساخت یا تماشای فرآیند به صورت زنده، میتوانید به کنسول ابری (Cloud Console) بروید. روی دکمه منو در گوشه بالا سمت چپ کلیک کنید، به پایین اسکرول کنید تا به Ci/CD برسید، سپس روی Cloud Build کلیک کنید و در نهایت روی History کلیک کنید. در آنجا میتوانید لیستی از ساختهای قبلی خود را مشاهده کنید، اما فقط باید نسخهای که خودتان ایجاد کردهاید، وجود داشته باشد.

اگر روی شناسه ساخت (Build id) کلیک کنید، میتوانید تمام جزئیات مربوط به آن ساخت، از جمله خروجی گزارش (log output) را مشاهده کنید.
در صفحه جزئیات ساخت، میتوانید با کلیک روی نام تصویر در بخش اطلاعات ساخت، تصویر کانتینر ایجاد شده را مشاهده کنید.

۶. کانتینر را در GKE مستقر کنید
حالا که وبسایت خود را کانتینرایز کردهاید و کانتینر را به رجیستری کانتینرها منتقل کردهاید، میتوانید آن را در Kubernetes مستقر کنید!
برای استقرار و مدیریت برنامهها در یک کلاستر GKE، باید با سیستم مدیریت کلاستر Kubernetes ارتباط برقرار کنید. معمولاً این کار را با استفاده از ابزار خط فرمان kubectl انجام میدهید.
کوبرنتیز برنامهها را به صورت پاد (Pod) نمایش میدهد که واحدهایی هستند که یک کانتینر (یا گروهی از کانتینرهای متصل به هم) را نشان میدهند. پاد کوچکترین واحد قابل استقرار در کوبرنتیز است. در اینجا، هر پاد فقط شامل کانتینر یکپارچه شما میشود.
برای استقرار برنامه خود، باید یک Deployment ایجاد کنید. Deployment چندین کپی از برنامه شما - که replica نامیده میشوند - را مدیریت میکند و آنها را برای اجرا روی گرههای جداگانه در خوشه شما زمانبندی میکند. در این حالت، Deployment فقط یک Pod از برنامه شما را اجرا میکند. Deployments با ایجاد یک ReplicaSet این امر را تضمین میکند. ReplicaSet مسئول اطمینان از این است که تعداد replicaهای مشخص شده همیشه در حال اجرا باشند.
دستور kubectl create deployment باعث میشود Kubernetes یک Deployment با نام monolith روی کلاستر شما با ۱ replica ایجاد کند.
برای استقرار برنامه خود، دستور زیر را اجرا کنید:
kubectl create deployment monolith --image=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0
تأیید استقرار
برای تأیید اینکه Deployment با موفقیت ایجاد شده است، دستور زیر را اجرا کنید (ممکن است چند لحظه طول بکشد تا وضعیت Pod به "Running" تغییر کند):
kubectl get all
خروجی:
NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-htm7z 1/1 Running 0 6m21s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 <none> 443/TCP 24h NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 1 1 1 1 20m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 1 1 1 20m
این خروجی چندین چیز را به شما نشان میدهد. میتوانید Deployment خود را که در حال حاضر فعال است، ReplicaSet خود را با تعداد Pod دلخواه یک و Pod خود را که در حال اجرا است، ببینید. به نظر میرسد که همه چیز را با موفقیت ایجاد کردهاید!
برای مشاهده منابع خود به صورت جداگانه، میتوانید دستورات زیر را اجرا کنید:
# Show pods kubectl get pods # Show deployments kubectl get deployments # Show replica sets kubectl get rs #You can also combine them kubectl get pods,deployments
برای دیدن مزایای کامل Kubernetes، میتوانید یک خرابی سرور را شبیهسازی کنید، Pod را حذف کنید و ببینید چه اتفاقی میافتد!
نام پاد خود را از دستور قبلی کپی کنید و دستور زیر را برای حذف آن اجرا کنید:
kubectl delete pod/<POD_NAME>
اگر به اندازه کافی سریع هستید، میتوانید دستور قبلی را اجرا کنید تا دوباره همه چیز را ببینید و باید دو Pod ببینید، یکی در حال خاتمه دادن و دیگری در حال ایجاد یا اجرا:
kubectl get all
خروجی:
NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-2bxts 1/1 Running 0 4s pod/monolith-7d8bc7bf68-htm7z 1/1 Terminating 0 9m35s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 <none> 443/TCP 24h NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 1 1 1 1 24m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 1 1 1 24m
چرا این اتفاق افتاد؟ ReplicaSet متوجه شد که پاد در حال خاتمه است و یک پاد جدید را فعال کرد تا تعداد کپیهای مورد نظر را حفظ کند. بعداً خواهید دید که چگونه مقیاسبندی کنید تا مطمئن شوید چندین نمونه در حال اجرا دارید تا اگر یکی از آنها از کار افتاد، کاربران شما هیچ گونه خرابی را مشاهده نکنند!
۷. افشای استقرار GKE
شما برنامه خود را در GKE مستقر کردهاید، اما راهی برای دسترسی به آن در خارج از کلاستر ندارید. به طور پیشفرض، کانتینرهایی که روی GKE اجرا میکنید از طریق اینترنت قابل دسترسی نیستند زیرا آدرس IP خارجی ندارند. شما باید صریحاً برنامه خود را از طریق یک منبع سرویس در معرض ترافیک اینترنت قرار دهید. یک سرویس، شبکه و پشتیبانی IP را برای Podهای برنامه شما فراهم میکند. GKE یک IP خارجی و یک متعادلکننده بار ( مشمول صورتحساب ) برای برنامه شما ایجاد میکند.
برای نمایش وبسایت خود در اینترنت، دستور زیر را اجرا کنید:
kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080
خروجی:
service/monolith exposed
دسترسی به سرویس
GKE آدرس IP خارجی را به منبع سرویس اختصاص میدهد - نه به Deployment. اگر میخواهید IP خارجی که GKE برای برنامه شما فراهم کرده است را پیدا کنید، میتوانید سرویس را با دستور kubectl get service بررسی کنید:
kubectl get service
خروجی:
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE monolith 10.3.251.122 203.0.113.0 80:30877/TCP 3d
پس از تعیین آدرس IP خارجی برنامه، آن را کپی کنید. مرورگر خود را به آن URL (مانند http://203.0.113.0) هدایت کنید تا بررسی کنید که آیا برنامه شما قابل دسترسی است یا خیر.

شما باید همان وبسایتی را که قبلاً آزمایش کردید، ببینید! تبریک میگویم! وبسایت شما کاملاً بر روی Kubernetes اجرا میشود!
۸. مقیاسبندی استقرار GKE
حالا که یک نمونهی در حال اجرا از برنامهتان در GKE دارید و آن را در اینترنت قرار دادهاید، وبسایت شما بسیار محبوب شده است! شما به روشی نیاز دارید تا برنامهتان را در چندین نمونه مقیاسبندی کنید تا بتوانید ترافیک را مدیریت کنید. یاد بگیرید که برنامهتان را تا سه کپی مقیاسبندی کنید.
دستور زیر را اجرا کنید تا بتوانید پیادهسازی خود را تا سه کپی گسترش دهید:
kubectl scale deployment monolith --replicas=3
خروجی:
deployment.apps/monolith scaled
تأیید استقرار مقیاسپذیر
برای تأیید اینکه Deployment با موفقیت مقیاسبندی شده است، دستور زیر را اجرا کنید:
kubectl get all
خروجی:
NAME READY STATUS RESTARTS AGE pod/monolith-7d8bc7bf68-2bxts 1/1 Running 0 36m pod/monolith-7d8bc7bf68-7ds7q 1/1 Running 0 45s pod/monolith-7d8bc7bf68-c5kxk 1/1 Running 0 45s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/kubernetes ClusterIP 10.27.240.1 <none> 443/TCP 25h service/monolith LoadBalancer 10.27.253.64 XX.XX.XX.XX 80:32050/TCP 6m7s NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGE deployment.apps/monolith 3 3 3 3 61m NAME DESIRED CURRENT READY AGE replicaset.apps/monolith-7d8bc7bf68 3 3 3 61m
شما باید سه نمونه از Pod خود را در حال اجرا ببینید. همچنین، توجه داشته باشید که Deployment و ReplicaSet شما اکنون تعداد مطلوب سه را دارند.
۹. ایجاد تغییرات در وبسایت
تیم بازاریابی شما از شما خواسته است که صفحه اصلی وبسایت خود را تغییر دهید. آنها فکر میکنند که این صفحه باید با توضیح اینکه شرکت شما چیست و واقعاً چه چیزی میفروشید، آموزندهتر باشد. در این بخش، متنی را به صفحه اصلی اضافه خواهید کرد تا تیم بازاریابی را خوشحال کنید! به نظر میرسد یکی از توسعهدهندگان ما قبلاً تغییرات را با نام فایل index.js.new ایجاد کرده است. میتوانید فایل را در index.js کپی کنید و تغییرات شما باید اعمال شود. برای ایجاد تغییرات مناسب، دستورالعملهای زیر را دنبال کنید.
دستورات زیر را اجرا کنید، فایل بهروزرسانیشده را در نام صحیح کپی کنید و محتویات آن را برای تأیید تغییرات چاپ کنید:
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
کد حاصل باید به این شکل باشد:
/*
Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
root: {
flexGrow: 1
},
paper: {
width: "800px",
margin: "0 auto",
padding: theme.spacing(3, 2)
}
}));
export default function Home() {
const classes = useStyles();
return (
<div className={classes.root}>
<Paper className={classes.paper}>
<Typography variant="h5">
Fancy Fashion & Style Online
</Typography>
<br />
<Typography variant="body1">
Tired of mainstream fashion ideas, popular trends and societal norms?
This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
Start shopping Fancy items now!
</Typography>
</Paper>
</div>
);
}
شما کامپوننتهای React را بهروزرسانی کردهاید، اما برای تولید فایلهای استاتیک باید برنامه React را بسازید. دستور زیر را اجرا کنید تا برنامه React ساخته شود و آن را در دایرکتوری عمومی monolith کپی کنید:
cd ~/monolith-to-microservices/react-app npm run build:monolith
حالا که کد شما بهروزرسانی شده است، باید کانتینر داکر خود را بازسازی کرده و آن را در رجیستری کانتینر منتشر کنید. میتوانید از همان دستور قبلی استفاده کنید، با این تفاوت که این بار، برچسب نسخه را بهروزرسانی خواهید کرد!
دستور زیر را برای راهاندازی یک Cloud Build جدید با نسخه بهروزرسانیشدهی image به شماره ۲.۰.۰ اجرا کنید:
cd ~/monolith-to-microservices/monolith
#Feel free to test your application
npm start
gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 .
برای متوقف کردن فرآیند وب سرور، در پنجره ترمینال، Control+C (ویندوز یا مک) را فشار دهید.
در بخش بعدی، از آن تصویر برای بهروزرسانی برنامه خود بدون هیچگونه خرابی استفاده خواهید کرد.
۱۰. وبسایت را بدون قطعی بهروزرسانی کنید
تغییرات تکمیل شده و تیم بازاریابی از بهروزرسانیهای شما راضی است! وقت آن رسیده که وبسایت را بدون وقفه برای کاربران بهروزرسانی کنید. برای بهروزرسانی وبسایت خود، دستورالعملهای زیر را دنبال کنید.
بهروزرسانیهای مداوم GKE تضمین میکند که برنامه شما حتی زمانی که سیستم نمونههایی از تصویر کانتینر قدیمی شما را با تصویر جدید در تمام کپیهای در حال اجرا جایگزین میکند، همچنان فعال و در دسترس باقی بماند.
از طریق خط فرمان، میتوانید با دستور زیر به Kubernetes بگویید که میخواهید ایمیج مربوط به Deployment خود را به نسخه جدید بهروزرسانی کنید:
kubectl set image deployment/monolith monolith=gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0
خروجی:
deployment.apps/monolith image updated
تأیید استقرار
شما میتوانید با اجرای دستور زیر، بهروزرسانی Deployment خود را تأیید کنید:
kubectl get pods
خروجی:
NAME READY STATUS RESTARTS AGE monolith-584fbc994b-4hj68 1/1 Terminating 0 60m monolith-584fbc994b-fpwdw 1/1 Running 0 60m monolith-584fbc994b-xsk8s 1/1 Terminating 0 60m monolith-75f4cf58d5-24cq8 1/1 Running 0 3s monolith-75f4cf58d5-rfj8r 1/1 Running 0 5s monolith-75f4cf58d5-xm44v 0/1 ContainerCreating 0 1s
میبینید که سه پاد جدید ایجاد میشوند و پادهای قدیمی شما خاموش میشوند. میتوانید از روی سن آنها تشخیص دهید که کدام جدید و کدام قدیمی هستند. در نهایت، دوباره فقط سه پاد خواهید دید که همان سه پاد بهروزرسانیشده شما خواهند بود.
برای تأیید تغییرات، دوباره به IP خارجی متعادلکننده بار بروید و متوجه شوید که برنامه شما بهروزرسانی شده است.
دستور زیر را برای فهرست کردن سرویسها و مشاهده آدرس IP در صورت فراموش کردن آن اجرا کنید:
kubectl get svc
وبسایت شما باید متنی را که به کامپوننت صفحه اصلی اضافه کردهاید، نمایش دهد!

۱۱. تمیز کردن
حذف مخزن گیت
cd ~ rm -rf monolith-to-microservices
تصاویر رجیستری کانتینر را حذف کنید
نکته: اگر نسخههای دیگری ایجاد کردهاید، میتوانید از همین سینتکس برای حذف آن تصاویر نیز استفاده کنید. این آزمایشگاه کد فرض میکند که شما فقط دو تگ دارید.
# Delete the container image for version 1.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:1.0.0 --quiet
# Delete the container image for version 2.0.0 of our monolith
gcloud container images delete gcr.io/${GOOGLE_CLOUD_PROJECT}/monolith:2.0.0 --quiet
حذف مصنوعات Cloud Build از فضای ذخیرهسازی ابری
توجه: اگر از Cloud Build برای مصنوعاتی غیر از این codelab استفاده کردهاید، باید منبع خود را به صورت دستی از سطل ذخیرهسازی ابری gs://<PROJECT_ID>_cloudbuild/source حذف کنید.
# The following command will take all source archives from all builds and delete them from cloud storage
# Run this command to print all sources:
# gcloud builds list | awk 'NR > 1 {print $4}'
gcloud builds list | awk 'NR > 1 {print $4}' | while read line; do gsutil rm $line; done
حذف سرویس GKE
kubectl delete service monolith kubectl delete deployment monolith
حذف خوشه GKE
gcloud container clusters delete fancy-cluster
نکته: اجرای این دستور ممکن است کمی طول بکشد.
۱۲. تبریک میگویم!
شما وبسایت خود را روی GKE مستقر، مقیاسپذیر و بهروزرسانی کردید. اکنون با Docker و Kubernetes تجربه دارید!