مهاجرت از Compute Engine به Kubernetes Engine با مهاجرت برای Anthos

1. بررسی اجمالی

بازنویسی یا مهندسی مجدد برنامه های موجود برای کار بر روی Kubernetes همیشه امکان پذیر یا امکان پذیر نیست که به صورت دستی انجام شود. مهاجرت برای Anthos می تواند به مدرن سازی برنامه های موجود شما و اجرای آنها در Kubernetes کمک کند. در این نرم افزار کد، یک برنامه وب موجود میزبانی شده در Compute Engine را با استفاده از Migrate for Anthos به Kubernetes Engine منتقل خواهید کرد.

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

  • نحوه استقرار یک Migrate برای Anthos در یک خوشه Kubernetes
  • نحوه ایجاد یک کانتینر در یک مجموعه حالت از یک نمونه موتور محاسباتی موجود
  • نحوه استقرار کانتینر خود در Kubernetes و پیکربندی آن با یک متعادل کننده بار

آنچه شما نیاز دارید

  • پروژه Google Cloud با تنظیم صورت‌حساب. اگر ندارید باید یکی بسازید .

2. راه اندازی

این کد لبه می تواند به طور کامل در پلتفرم Google Cloud بدون هیچ گونه نصب یا پیکربندی محلی اجرا شود.

فعال کردن API ها

قبل از شروع، مطمئن شوید که API های مورد نیاز را در پروژه Google Cloud خود فعال کرده اید:

یک وب سرور نمونه محاسباتی ایجاد کنید

بیایید یک نمونه محاسباتی ایجاد کنیم که از آن برای میزبانی وب سرور اولیه nginx خود استفاده می کنیم، همراه با قوانین فایروال که به ما امکان می دهد صفحه فرود پیش فرض وب سرور را مشاهده کنیم. چند راه برای انجام این کار وجود دارد، اما برای سهولت استفاده، از Cloud Shell استفاده می کنیم.

در Cloud Shell موارد زیر را اجرا کنید:

gcloud compute instances create webserver --zone=us-central1-a && \
gcloud compute firewall-rules create default-allow-http --allow=tcp:80 

نیمه اول این دستور یک نمونه Google Cloud را در منطقه us-central1-a ایجاد می کند در حالی که نیمه دوم یک قانون فایروال به نام "default-allow-http" ایجاد می کند که به ترافیک http به شبکه ما اجازه می دهد.

هنگامی که نمونه با موفقیت ایجاد شد، جدولی با جزئیات نمونه نمایش داده می شود. به IP خارجی توجه داشته باشید - برای تأیید اینکه سرور وب ما بعداً اجرا می شود به آن نیاز داریم.

a08aa5bf924b107d.png

پس از راه‌اندازی و اجرای نمونه، می‌توانیم از Cloud Shell به نمونه خود SSH کنیم تا nginx را نصب کرده و وب سرور را راه‌اندازی کنیم:

gcloud compute ssh --zone us-central1-a webserver

پس از ورود به نمونه محاسباتی خود، nginx را نصب کنید:

sudo apt install nginx

با دستور logout از جلسه ssh خارج شوید

بیایید با وارد کردن IP خارجی نمونه قبلی در مرورگر خود، بررسی کنیم که سرور وب ما در حال اجرا است. باید صفحه پیش‌فرض خوش‌آمدگویی nginx را ببینید:

5c08e3b2bd17e03.png

این وب سرور به عنوان برنامه وب قدیمی است که با استفاده از Migrate for Anthos به Kubernetes منتقل می کنیم.

3. خوشه Kubernetes با مهاجرت برای Anthos

در مرحله بعد، ما یک کلاستر GKE ایجاد می کنیم که در نهایت سرور وب موتور محاسباتی را منتقل می کنیم. در Cloud Console موارد زیر را اجرا کنید:

gcloud container clusters create my-gke-cluster \
  --zone us-central1-a \
  --cluster-version 1.13 \
  --machine-type n1-standard-4 \
  --image-type "UBUNTU" \
  --num-nodes 1 \
  --enable-stackdriver-kubernetes

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

c69778b8fb8ac72b.png

در مرحله بعد، برای استقرار مهاجرت برای Anthos به بازار GCP بروید:

45f5753cae53ccb5.png

در صفحه بازار برای مهاجرت برای Anthos، روی پیکربندی کلیک کنید و در صورت درخواست، پروژه خود را از لیست انتخاب کنید. صفحه بعدی فرمی را با مقادیر پیش فرض وارد شده نشان می دهد. اطمینان حاصل کنید که خوشه انتخاب شده همان خوشه ای است که ما ایجاد کردیم و روی Deploy کلیک کنید:

94dc6238b2affd16.png

مهاجرت برای Anthos اکنون باید در خوشه kubernetes ما مستقر شود. پس از اتمام استقرار، وضعیت "OK" را در صفحه برنامه های کاربردی موتور Kubernetes مشاهده خواهید کرد:

5bf601103a5335cf.png

4. از نمونه محاسبه تا مجموعه حالت

ما یک خوشه Kubernetes داریم که Migrate برای Anthos را اجرا می کند، بنابراین اکنون می توانیم فرآیند مهاجرت را آغاز کنیم. برای استقرار نمونه محاسباتی خود در یک خوشه Kubenetes، نمونه موتور محاسباتی خود را خاموش می کنیم تا بتوانیم از دیسک ها عکس بگیریم. قبل از حرکت، به شناسه نمونه توجه کنید که بعداً به آن نیاز خواهیم داشت:

gcloud compute instances describe webserver --zone us-central1-a | grep ^id

بیایید نمونه محاسباتی خود را خاموش کنیم:

gcloud compute instances stop webserver --zone us-central1-a

اکنون که نمونه متوقف شده است، می‌توانیم با اجرای اسکریپت زیر با خیال راحت از دیسک‌ها عکس بگیریم. حتما شناسه پروژه و شناسه نمونه خود را وارد کنید:

python3 /google/migrate/anthos/gce-to-gke/clone_vm_disks.py \
  -p <project-id>   -i <instance-id> \
  -z us-central1-a \
  -T us-central1-a \
  -A webserver-statefulset \
  -o containerized-webserver.yaml

با آن پرچم‌ها، clone_vm_disks.py :

  • بررسی کنید نمونه GCE شما خاموش است
  • یک عکس فوری از هر یک از دیسک های نمونه خود ایجاد کنید
  • از هر عکس فوری یک دیسک جدید ایجاد کنید
  • عکس های فوری ایجاد شده را حذف کنید
  • یک فایل YAML در فهرست کاری فعلی خود برای استقرار یک مجموعه stateful که میزبان وب سرور شما خواهد بود، ایجاد کنید

فایل yaml ایجاد شده مجموعه ای از حالت را در خوشه kubernetes ما به همراه ادعاهای حجم دائمی مورد نیاز برای نصب دیسک های کپی شده در ظرف وب سرور ما ارائه می دهد. ما می توانیم این تغییرات را با kubectl اعمال کنیم:

kubectl apply -f containerized-webserver.yaml

وضعیت webserver-statefulset را در صفحه Workloads بررسی کنید:

خواندن وضعیت "Pods در انتظار" برای چند دقیقه پس از اجرای kubectl apply عادی است. هنگامی که وضعیت "OK" خوانده شد، به حرکت خود ادامه دهید.

5. خوشه را در معرض متعادل کننده بار قرار دهید

در این مرحله، خوشه Kubenetes ما باید سرور وب ما را به عنوان یک مجموعه حالت اجرا کند، اما ما همچنین باید محفظه آن را در معرض یک متعادل کننده بار قرار دهیم تا از طریق یک آدرس IP خارجی به وب سرور خود دسترسی پیدا کنیم. در پوسته Cloud، یک فایل جدید با نام loadbalancer.yaml با محتوای زیر ایجاد کنید:

loadbalancer.yaml

apiVersion: v1
kind: Service
metadata:
  name: webserver-loadbalancer
spec:
  type: LoadBalancer
  selector:
    app: webserver-statefulset
  ports:
  - protocol: TCP
    port: 80
    targetPort: 80

و اکنون آن را با kubectl اعمال کنید:

kubectl apply -f loadbalancer.yaml

ما می توانیم از kubectl برای بازیابی آدرس IP خارجی سرویس وب سرور-کانتینر استفاده کنیم:

kubectl get services

اگر آدرس IP خارجی را در مرورگر خود وارد کنیم، باید همان صفحه پیش‌فرض nginx خوش‌آمدگویی قبلی را دریافت کنیم:

5c08e3b2bd17e03.png

ما آن را انجام دادیم! وب سرور GCE ما اکنون در Kubernetes میزبانی می شود! خوب!

6. نظارت Stackdriver

معیارها

به عنوان یک سرویس مدیریت شده Kubernetes، Kubernetes Engine به طور خودکار برای ثبت و نظارت با Stackdriver مجهز شده است. بیایید برخی از معیارهایی را که Stackdriver به طور خودکار برای ما ثبت می کند بررسی کنیم.

روی پیوند نظارت در منوی محصولات کلیک کنید - دسترسی به آن برای اولین بار از پروژه شما ممکن است چند دقیقه طول بکشد تا فضای کاری شما تنظیم شود.

پس از بارگیری، ماوس را روی منابع در قسمت سمت چپ نگه دارید و "Kubernetes Engine NEW" را از منو انتخاب کنید.

4e62c8ad3f2b3fe9.png

هر ردیف در داشبورد ارائه شده در اینجا نشان دهنده یک منبع Kubernetes است. با پیوندهای بالای داشبورد می‌توانید بین زیرساخت‌ها، بارهای کاری یا نمای خدمات جابه‌جا شوید.

62066a9251d19843.png

در نمای Workloads، "my-gke-cluster" را گسترش دهید و به صورت پیش فرض > webserver-statefulset > webserver-statefulset-0 > webserver-statefulset را بررسی کنید. بر روی محفظه مجموعه ای از سرورهای وب کلیک کنید. در اینجا برخی از معیارهای خارج از جعبه را خواهید دید که توسط Stackdriver ثبت شده است، از جمله استفاده از حافظه و استفاده از CPU.

d054778de301429e.png

نمودارهایی که در این داشبورد نمایش داده می شوند، نمودارهایی هستند که ما می توانیم از آنها برای ایجاد یک داشبورد سفارشی استفاده کنیم.

داشبوردهای سفارشی

Stackdriver به ما امکان می دهد داشبوردهای سفارشی ایجاد کنیم که بتوانیم از آنها برای سازماندهی نمودارها و نمودارها برای هر داده متریکی که در دسترس ماست استفاده کنیم. بیایید یک داشبورد سفارشی ایجاد کنیم تا نمای کلی برخی از معیارهای وب سرور خود را ارائه دهیم.

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

56a0513efe60de3e.png

اکنون که داشبورد خالی خود را داریم، می‌توانیم معیارهایی را اضافه کنیم که می‌خواهیم به آنها توجه کنیم. بیایید داشبورد Untitled خود را یک نام مفید مانند "My Web Server Containers" بگذاریم و روی "Add Chart" در بالا سمت راست کلیک کنید:

bd66ba91f3125028.png

معیارهای خارج از جعبه را به خاطر دارید؟ بیایید یک نمودار برای استفاده از CPU کانتینر اضافه کنیم. در قسمت عنوان نمودار، «استفاده از CPU» را وارد کنید. در کادر «یافتن نوع منبع و متریک»، request_utilization را تایپ کنید و CPU request utilization را از لیست فیلتر شده انتخاب کنید. این انتخاب هر دو قسمت Resource type و Metric را برای ما پر می کند.

در مرحله بعد، می خواهیم بر اساس project_id خود (اگر چندین پروژه داریم) و container_name فیلتر کنیم. در کادر Filter عبارت project_id را تایپ کنید، آن را از لیست فیلتر شده انتخاب کنید و پروژه خود را در قسمت Value انتخاب کنید. همچنین باید بر اساس container_name فیلتر کنیم. در کادر Filter، Container_name را تایپ کنید، آن را از لیست فیلتر شده انتخاب کنید و webserver-statefulset را در قسمت Value انتخاب کنید. روی ذخیره کلیک کنید.

ما اکنون یک داشبورد با اولین نمودار خود داریم.

3d3d45e4357454e0.png

7. بررسی زمان و سیاست هشدار

با Stackdriver، می‌توانیم هشدارهایی را تنظیم کنیم تا زمانی که هر معیاری به هر مقدار آستانه ای که ما مشخص کرده‌ایم رسید، به ما اطلاع دهد. به عنوان مثال، زمانی که استفاده از CPU از آخرین مرحله بالاتر از آستانه مشخصی برای مدت زمان طولانی است، می‌توانیم از Stackdriver برای ما ایمیل بفرستیم، که ممکن است نشان دهنده مشکلی در برنامه ما باشد. برای اینکه نشان دهیم این هشدارها چگونه به نظر می رسند، بیایید یک بررسی زمان کار را تنظیم کنیم و سپس قطعی را شبیه سازی کنیم.

از پنجره سمت چپ، Uptime Checks و سپس Uptime Checks Overview را انتخاب کنید:

49368e5700274cf2.png

همانطور که صفحه Uptime Checks نشان می دهد، بیایید اولین بررسی uptime خود را تنظیم کنیم. روی دکمه Add Uptime Check در سمت راست بالای صفحه کلیک کنید.

d884560f91011009.png

در فرم ادامه، «Endpoint Uptime» را به عنوان عنوان و آدرس IP خارجی متعادل کننده بار خود را به عنوان نام میزبان وارد کنید.

568a8f1e27ae8417.png

روی ذخیره کلیک کنید و از شما خواسته می شود که یک خط مشی هشدار همراه ایجاد کنید:

f89d53a106a709f4.png

روی Create Alert Policy کلیک کنید.

بیایید نام این را «سیاست زمانی پایانی» بگذاریم. در بخش پیکربندی ، "Condition triggers if" را روی "Any time series violates" تنظیم کنید و روی ذخیره کلیک کنید.

74609849348bd03e.png

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

44c474e28a497659.png

روی Add Notification Channe l کلیک کنید. در نهایت، در پایین فرم، نام خط مشی را 'Web App Uptime' بگذارید و روی Save کلیک کنید.

برای اینکه ببینید یک هشدار چگونه خواهد بود، در Cloud Console خود، Cloud Shell خود را یک بار دیگر باز کنید. دستور زیر اجرای سرویس nginx را در غلاف وب سرور ما متوقف می کند:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx -s stop"

پس از چند دقیقه، باید ایمیلی دریافت کنید که به شما هشدار می دهد قطعی برق:

808ac1d75ce3681f.png

بیایید آن را لغو کنیم. در Cloud Shell خود، بیایید nginx را مجددا راه اندازی کنیم:

kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"

پس از چند دقیقه، یک ایمیل Stackdriver دیگر دریافت خواهید کرد، این بار با اخباری بهتر از قبل:

5b8262fbbc4877c.png

8. پاکسازی

اکنون که از GCE به GKE با Migrate for Anthos مهاجرت کرده‌ایم، بیایید پروژه خود را از تمام منابعی که ایجاد کرده‌ایم پاک کنیم.

پروژه را حذف کنید

اگر ترجیح می دهید، می توانید کل پروژه را حذف کنید. در کنسول GCP، به صفحه Cloud Resource Manager بروید:

در لیست پروژه، پروژه ای را که در آن کار می کردیم انتخاب کنید و روی حذف کلیک کنید. از شما خواسته می شود شناسه پروژه را تایپ کنید. آن را وارد کرده و Shut Down را بزنید.

اگر ترجیح می دهید اجزای مختلف را یکی یکی حذف کنید، به بخش بعدی بروید.

Stackdriver

داشبورد

از صفحه داشبورد خود روی نماد تنظیمات کلیک کنید dc259295eb33cb42.png در بالای صفحه و حذف داشبورد را انتخاب کنید.

خط مشی هشدار

از صفحه خط‌مشی‌ها ، حذف را از منوی Actions انتخاب کنید 2ef75d82e76accaa.png در سمت راست برای هر سیاستی که ایجاد کردید.

بررسی آپتایم

از صفحه Uptime Checks، از منوی Actions در سمت راست هر چکی که ایجاد کردید، Delete را انتخاب کنید.

GCE و Kubernetes

نمونه موتور محاسباتی گوگل

gcloud compute instances delete webserver --zone=us-central1-a

خوشه Kubernetes (شامل مهاجرت برای Anthos، مجموعه حالت، و سرویس متعادل کننده بار)

gcloud container clusters delete my-gke-cluster --zone=us-central1-a

دیسک ها

مجموعه حالت ما از دیسکی که ما ایجاد کردیم استفاده می کرد. برای بازیابی نام از موارد زیر استفاده کنید:

gcloud compute disks list --filter=webserver

با استفاده از نام دیسک خود به جای من، آن را با استفاده از:

gcloud compute disks delete vls-690d-webserver --zone=us-central1-a

همه تمیز شد!

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

موفق باشی! شما وب سرور خود را از یک نمونه GCE به یک خوشه Kubernetes با استفاده از Migrate for Anthos منتقل کردید.

آنچه را پوشش داده ایم

  • ما یک وب سرور را از GCE به خوشه Kubernetes با استفاده از Migrate for Anthos منتقل کردیم
  • ما با افشای آن از طریق یک سرویس متعادل کننده بار Kubernetes، وب سرور مجموعه ای را به روی جهان باز کردیم.
  • ما Stackdriver را فعال کردیم و یک داشبورد سفارشی ساختیم
  • ما یک بررسی uptime همراه با یک خط مشی هشدار را پیکربندی کردیم تا به ما اطلاع دهد که سرور وب ما از کار می افتد