وب سایت خود را با Google Kubernetes Engine (GKE) استقرار، مقیاس و به روز رسانی کنید.

1. مقدمه

اجرای وب سایت ها و برنامه ها سخت است.

همه چیز در حالی که نباید اشتباه می شود، خرابی سرورها، افزایش تقاضا باعث استفاده بیشتر از منابع می شود، و ایجاد تغییرات بدون خرابی پیچیده و استرس زا است.

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

تمرین‌ها برای منعکس‌کننده تجربه مشترک توسعه‌دهنده ابری سفارش داده شده‌اند:

  1. یک خوشه GKE ایجاد کنید.
  2. یک ظرف Docker ایجاد کنید.
  3. کانتینر را در GKE مستقر کنید.
  4. ظرف را از طریق سرویس در معرض دید قرار دهید.
  5. ظرف را به چند کپی تبدیل کنید.
  6. وب سایت را اصلاح کنید.
  7. یک نسخه جدید با زمان توقف صفر عرضه کنید.

نمودار معماری

ddba666bd2b02d0d.png

چیزی که یاد خواهید گرفت

  • نحوه ایجاد یک خوشه GKE
  • نحوه ایجاد یک تصویر داکر
  • نحوه استقرار تصاویر Docker در Kubernetes
  • چگونه یک برنامه را در Kubernetes مقیاس کنیم
  • نحوه انجام یک به روز رسانی چرخشی در Kubernetes

پیش نیازها

  • یک حساب Google با دسترسی مدیریتی برای ایجاد پروژه ها یا پروژه ای با نقش مالک پروژه
  • درک اولیه از Docker و Kubernetes (اگر درک اولیه ندارید، لطفاً اکنون Docker و Kubernetes را مرور کنید.)

2. تنظیم محیط

تنظیم محیط خود به خود

اگر قبلاً یک حساب Google ندارید، باید یک حساب ایجاد کنید . وارد Google Cloud Console شوید و یک پروژه جدید ایجاد کنید.

53dad2cefdae71da.png

اسکرین شات از 10/02/2016 12:45:26.png

به یاد داشته باشید، شناسه پروژه یک نام منحصر به فرد در تمام پروژه های Google Cloud است (نام فوق قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً به عنوان PROJECT_ID نامیده خواهد شد.

در مرحله بعد، برای استفاده از منابع Google Cloud باید صورتحساب را در کنسول Cloud فعال کنید . کاربران جدید Google Cloud واجد شرایط استفاده آزمایشی رایگان 300 دلاری هستند. اگر کاربر جدیدی نیستید، پس نگران نباشید زیرا نرم افزار Codelab نباید بیش از چند دلار هزینه داشته باشد. با این حال، اگر از منابع بیشتری استفاده کنید یا آنها را در حال اجرا رها کنید، می‌تواند برای شما هزینه بیشتری داشته باشد (به بخش «پاک کردن» در پایان مراجعه کنید). برای اطلاعات بیشتر، قیمت را ببینید.

پوسته ابری

در حالی که می‌توانید از راه دور Google Cloud و GKE را با لپ‌تاپ خود کار کنید، از Cloud Shell -یک محیط خط فرمان که در Cloud اجرا می‌شود- برای آزمایشگاه کد استفاده خواهید کرد.

این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. این بدان معنی است که تمام چیزی که برای این کد لبه نیاز دارید یک مرورگر است (بله، روی کروم بوک کار می کند).

  1. برای فعال کردن Cloud Shell از Cloud Console، کافی است روی Activate Cloud Shell کلیک کنید. fEbHefbRynwXpq1vj2wJw6Dr17O0np8l-WOekxAZYlZQIORsWQE_xJl-cNhogjATLn-YxLVz8CgLvIW1Ncc0yXKJsfzJGMYgUeLsVB7P6XFNqNqVB7p6FQNqNqVBQ7P6XfNqSw P-X3Q (تهیه و اتصال به محیط فقط چند لحظه طول می کشد).

I5aEsuNurCxHoDFjZRZrKBdarPPKPoKuExYpdagmdaOLKe7eig3DAKJitIKyuOpuwmrMAyZhp5AXpmD_k66cBuc1aUnWlJeSfo_aTKPY9aNMurhfegg1NYAd

Screen Shot 2017-06-14 at 10.13.43 PM.png

پس از اتصال به 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 جستجو کنید:

R7chO4PKQfLC3bvFBNZJALLTUiCgyLEq_67ECX7ohs_0ZnSjC7GxDNxWrJJUaoM53LnqABYamrBJhCuXF-J9XBzuUgaz7VvaxNrkP2TAn93DrxZHQ4PhZ5

Cloud Shell همچنین برخی از متغیرهای محیطی را به صورت پیش‌فرض تنظیم می‌کند که ممکن است هنگام اجرای دستورات آینده مفید باشند.

echo $GOOGLE_CLOUD_PROJECT

خروجی فرمان

<PROJECT_ID>
  1. در نهایت، منطقه پیش فرض و پیکربندی پروژه را تنظیم کنید.
gcloud config set compute/zone us-central1-f

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

3. یک خوشه GKE ایجاد کنید

اکنون که محیط توسعه دهنده کار خود را دارید، به یک کلاستر GKE برای استقرار وب سایت خود نیاز دارید! قبل از ایجاد یک کلاستر، باید مطمئن شوید که APIهای مناسب فعال هستند. برای فعال کردن Containers API دستور زیر را اجرا کنید:

gcloud services enable container.googleapis.com

اکنون، می توانید خوشه خود را ایجاد کنید! مراحل زیر را برای ایجاد یک خوشه به نام fancy-cluster با 3 گره دنبال کنید:

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 بروید و روی Clusters کلیک کنید. باید خوشه خود را با نام fancy-cluster ببینید.

795c794b03c5d2b0.png

6b394dfb8a6031f2.png

تبریک می گویم! شما اولین خوشه خود را ایجاد کردید!

4. کلون کردن مخزن منبع

از آنجایی که این یک وب سایت موجود است، فقط باید منبع را از مخزن کلون کنید تا بتوانید روی ایجاد تصاویر Docker و استقرار در 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 و انتخاب پیش‌نمایش در پورت 8080، می‌توانید برنامه خود را پیش‌نمایش کنید.

5869738f0e9ec386.png

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

9ed25c3f0cbe62fa.png

پس از مشاهده وب سایت می توانید آن پنجره را ببندید. برای توقف فرآیند وب سرور Control+C (ویندوز یا مک) را در پنجره ترمینال فشار دهید.

5. ظرف Docker را با Cloud Build ایجاد کنید

اکنون که فایل های منبع شما آماده است، زمان آن رسیده است که برنامه خود را Dockerize کنید!

به طور معمول، شما باید یک رویکرد دو مرحله ای داشته باشید که مستلزم ساخت یک ظرف Docker و فشار دادن آن به یک رجیستری برای ذخیره تصویری است که GKE از آن بیرون می کشد. با این حال، می توانید با استفاده از Cloud Build برای ایجاد کانتینر Docker و قرار دادن تصویر در رجیستری کانتینر با یک دستور، زندگی را آسان تر کنید! (برای مشاهده فرآیند دستی ایجاد یک فایل docker و فشار دادن آن، به Quickstart for Container Registry مراجعه کنید.)

Cloud Build فایل ها را از دایرکتوری فشرده می کند و آنها را به یک سطل Cloud Storage منتقل می کند. سپس فرآیند ساخت فایل‌ها را از سطل می‌گیرد و از Dockerfile برای اجرای فرآیند ساخت Docker استفاده می‌کند. از آنجا که شما پرچم --tag با میزبان به عنوان gcr.io برای تصویر Docker مشخص کرده اید، تصویر Docker به دست آمده به رجیستری Container منتقل می شود.

ابتدا باید با اجرای دستور زیر، 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 بروید. روی دکمه منو در گوشه سمت چپ بالا کلیک کنید، به سمت Ci/CD بروید، سپس روی Cloud Build کلیک کنید و در نهایت روی History کلیک کنید. در آنجا می‌توانید فهرستی از بیلدهای قبلی خود را ببینید، اما فقط باید چیزی باشد که ایجاد کرده‌اید.

4c753ede203255f6.png

اگر روی Build id کلیک کنید، می توانید تمام جزئیات مربوط به آن ساخت، از جمله خروجی گزارش را ببینید.

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

6e88ed1643dfe629.png

6. کانتینر را در GKE مستقر کنید

اکنون که وب سایت خود را کانتینر کرده اید و کانتینر را به رجیستری کانتینر منتقل کرده اید، می توانید آن را در Kubernetes مستقر کنید!

برای استقرار و مدیریت برنامه ها در یک خوشه GKE، باید با سیستم مدیریت خوشه Kubernetes ارتباط برقرار کنید. شما معمولاً این کار را با استفاده از ابزار خط فرمان kubectl انجام می دهید.

Kubernetes برنامه‌ها را به‌عنوان Pods نشان می‌دهد، که واحدهایی هستند که یک ظرف (یا گروهی از کانتینرهای محکم جفت شده) را نشان می‌دهند. Pod کوچکترین واحد قابل استقرار در Kubernetes است. در اینجا، هر Pod فقط حاوی ظرف یکپارچه شماست.

برای استقرار برنامه خود، باید یک Deployment ایجاد کنید. یک Deployment چندین نسخه از برنامه شما را مدیریت می کند - که replica نامیده می شود - و آنها را برای اجرا بر روی گره های جداگانه در خوشه شما برنامه ریزی می کند. در این حالت، Deployment تنها یک پاد از برنامه شما را اجرا خواهد کرد. استقرارها با ایجاد ReplicaSet اطمینان حاصل می کنند. ReplicaSet وظیفه دارد اطمینان حاصل کند که تعداد کپی های مشخص شده همیشه در حال اجرا هستند.

دستور kubectl create deployment باعث می شود Kubernetes یک Deployment به نام monolith را با 1 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

آن خروجی چندین چیز را به شما نشان می دهد. شما می توانید استقرار خود را مشاهده کنید که در حال حاضر است. ReplicaSet شما، با تعداد پاد دلخواه یک. و 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 دید که غلاف در حال خاتمه است و یک غلاف جدید را راه اندازی کرد تا تعداد ماکت های مورد نظر را حفظ کند. بعداً، می‌بینید که چگونه مقیاس‌بندی کنید تا مطمئن شوید که چندین نمونه در حال اجرا هستید، به طوری که اگر یکی از آن‌ها پایین بیاید، کاربران شما هیچ زمان خرابی را نبینند!

7. استقرار GKE را افشا کنید

شما برنامه خود را در GKE مستقر کرده اید، اما راهی برای دسترسی به آن در خارج از خوشه ندارید. به‌طور پیش‌فرض، کانتینرهایی که در GKE اجرا می‌کنید، از طریق اینترنت قابل دسترسی نیستند، زیرا آدرس‌های IP خارجی ندارند. شما باید به صراحت برنامه خود را از طریق یک منبع سرویس در معرض ترافیک اینترنت قرار دهید. A Service پشتیبانی شبکه و IP را برای Pods برنامه شما فراهم می کند. GKE یک IP خارجی و یک متعادل کننده بار ( مطابق با صورتحساب ) برای برنامه شما ایجاد می کند.

دستور زیر را اجرا کنید تا وب سایت خود را در معرض اینترنت قرار دهید:

kubectl expose deployment monolith --type=LoadBalancer --port 80 --target-port 8080

خروجی:

service/monolith exposed

دسترسی به سرویس

GKE آدرس IP خارجی را به منبع Service اختصاص می دهد نه 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) نشان دهید تا بررسی کنید که آیا برنامه شما در دسترس است یا خیر.

9ed25c3f0cbe62fa.png

شما باید همان وب سایتی را ببینید که قبلاً تست کرده اید! تبریک می گویم! وب سایت شما به طور کامل بر روی Kubernetes اجرا می شود!

8. مقیاس استقرار 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 شما اکنون تعداد دلخواه 3 را دارند.

9. تغییراتی در وب سایت ایجاد کنید

تیم بازاریابی شما از شما خواسته است که صفحه اصلی وب سایت خود را تغییر دهید. آنها فکر می کنند که با توضیح اینکه شرکت شما چیست و در واقع چه چیزی می فروشید، باید آموزنده تر باشد. در این بخش، متنی را به صفحه اصلی اضافه می کنید تا تیم بازاریابی را خوشحال کنید! به نظر می رسد یکی از توسعه دهندگان ما قبلاً تغییرات را با نام فایل 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 &amp; 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

اکنون که کد شما به روز شده است، باید کانتینر Docker خود را دوباره بسازید و آن را در Container Registry منتشر کنید. می توانید از همان دستور قبلی استفاده کنید، با این تفاوت که این بار، برچسب نسخه را به روز می کنید!

دستور زیر را برای راه اندازی یک Cloud Build جدید با نسخه تصویر به روز شده 2.0.0 اجرا کنید:

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 (ویندوز یا مک) را در پنجره ترمینال فشار دهید.

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

10. وب سایت را با زمان خاموشی صفر به روز کنید

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

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

دستور زیر را اجرا کنید تا سرویس ها را لیست کنید و در صورت فراموشی آدرس IP را مشاهده کنید:

kubectl get svc

وب سایت شما باید متنی را که به کامپوننت صفحه اصلی اضافه کرده اید نمایش دهد!

8006c9938dbd5aa5.png

11. پاکسازی کنید

مخزن Git را حذف کنید

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 Storage

توجه: اگر از Cloud Build برای مصنوعاتی غیر از این کد لبه استفاده کرده اید، باید منبع خود را به صورت دستی از سطل فضای ذخیره سازی ابری 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

توجه: این دستور ممکن است کمی طول بکشد.

12. تبریک می گویم!

شما وب سایت خود را در GKE مستقر، مقیاس و به روز کردید. شما اکنون با Docker و Kubernetes تجربه دارید!

منابع اضافی