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 خارجی توجه داشته باشید - برای تأیید اینکه سرور وب ما بعداً اجرا می شود به آن نیاز داریم.
پس از راهاندازی و اجرای نمونه، میتوانیم از Cloud Shell به نمونه خود SSH کنیم تا nginx را نصب کرده و وب سرور را راهاندازی کنیم:
gcloud compute ssh --zone us-central1-a webserver
پس از ورود به نمونه محاسباتی خود، nginx را نصب کنید:
sudo apt install nginx
با دستور logout
از جلسه ssh خارج شوید
بیایید با وارد کردن IP خارجی نمونه قبلی در مرورگر خود، بررسی کنیم که سرور وب ما در حال اجرا است. باید صفحه پیشفرض خوشآمدگویی nginx را ببینید:
این وب سرور به عنوان برنامه وب قدیمی است که با استفاده از 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
چند دقیقه به این دستور بدهید تا کامل شود. هنگامی که خوشه ایجاد شد، مقداری خروجی با جزئیات آن دریافت خواهید کرد:
در مرحله بعد، برای استقرار مهاجرت برای Anthos به بازار GCP بروید:
در صفحه بازار برای مهاجرت برای Anthos، روی پیکربندی کلیک کنید و در صورت درخواست، پروژه خود را از لیست انتخاب کنید. صفحه بعدی فرمی را با مقادیر پیش فرض وارد شده نشان می دهد. اطمینان حاصل کنید که خوشه انتخاب شده همان خوشه ای است که ما ایجاد کردیم و روی Deploy کلیک کنید:
مهاجرت برای Anthos اکنون باید در خوشه kubernetes ما مستقر شود. پس از اتمام استقرار، وضعیت "OK" را در صفحه برنامه های کاربردی موتور Kubernetes مشاهده خواهید کرد:
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 خوشآمدگویی قبلی را دریافت کنیم:
ما آن را انجام دادیم! وب سرور GCE ما اکنون در Kubernetes میزبانی می شود! خوب!
6. نظارت Stackdriver
معیارها
به عنوان یک سرویس مدیریت شده Kubernetes، Kubernetes Engine به طور خودکار برای ثبت و نظارت با Stackdriver مجهز شده است. بیایید برخی از معیارهایی را که Stackdriver به طور خودکار برای ما ثبت می کند بررسی کنیم.
روی پیوند نظارت در منوی محصولات کلیک کنید - دسترسی به آن برای اولین بار از پروژه شما ممکن است چند دقیقه طول بکشد تا فضای کاری شما تنظیم شود.
پس از بارگیری، ماوس را روی منابع در قسمت سمت چپ نگه دارید و "Kubernetes Engine NEW" را از منو انتخاب کنید.
هر ردیف در داشبورد ارائه شده در اینجا نشان دهنده یک منبع Kubernetes است. با پیوندهای بالای داشبورد میتوانید بین زیرساختها، بارهای کاری یا نمای خدمات جابهجا شوید.
در نمای Workloads، "my-gke-cluster" را گسترش دهید و به صورت پیش فرض > webserver-statefulset > webserver-statefulset-0 > webserver-statefulset را بررسی کنید. بر روی محفظه مجموعه ای از سرورهای وب کلیک کنید. در اینجا برخی از معیارهای خارج از جعبه را خواهید دید که توسط Stackdriver ثبت شده است، از جمله استفاده از حافظه و استفاده از CPU.
نمودارهایی که در این داشبورد نمایش داده می شوند، نمودارهایی هستند که ما می توانیم از آنها برای ایجاد یک داشبورد سفارشی استفاده کنیم.
داشبوردهای سفارشی
Stackdriver به ما امکان می دهد داشبوردهای سفارشی ایجاد کنیم که بتوانیم از آنها برای سازماندهی نمودارها و نمودارها برای هر داده متریکی که در دسترس ماست استفاده کنیم. بیایید یک داشبورد سفارشی ایجاد کنیم تا نمای کلی برخی از معیارهای وب سرور خود را ارائه دهیم.
در قسمت سمت چپ، نشانگر را روی داشبوردها نگه دارید، سپس روی ایجاد داشبورد کلیک کنید.
اکنون که داشبورد خالی خود را داریم، میتوانیم معیارهایی را اضافه کنیم که میخواهیم به آنها توجه کنیم. بیایید داشبورد Untitled خود را یک نام مفید مانند "My Web Server Containers" بگذاریم و روی "Add Chart" در بالا سمت راست کلیک کنید:
معیارهای خارج از جعبه را به خاطر دارید؟ بیایید یک نمودار برای استفاده از 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 انتخاب کنید. روی ذخیره کلیک کنید.
ما اکنون یک داشبورد با اولین نمودار خود داریم.
7. بررسی زمان و سیاست هشدار
با Stackdriver، میتوانیم هشدارهایی را تنظیم کنیم تا زمانی که هر معیاری به هر مقدار آستانه ای که ما مشخص کردهایم رسید، به ما اطلاع دهد. به عنوان مثال، زمانی که استفاده از CPU از آخرین مرحله بالاتر از آستانه مشخصی برای مدت زمان طولانی است، میتوانیم از Stackdriver برای ما ایمیل بفرستیم، که ممکن است نشان دهنده مشکلی در برنامه ما باشد. برای اینکه نشان دهیم این هشدارها چگونه به نظر می رسند، بیایید یک بررسی زمان کار را تنظیم کنیم و سپس قطعی را شبیه سازی کنیم.
از پنجره سمت چپ، Uptime Checks و سپس Uptime Checks Overview را انتخاب کنید:
همانطور که صفحه Uptime Checks نشان می دهد، بیایید اولین بررسی uptime خود را تنظیم کنیم. روی دکمه Add Uptime Check در سمت راست بالای صفحه کلیک کنید.
در فرم ادامه، «Endpoint Uptime» را به عنوان عنوان و آدرس IP خارجی متعادل کننده بار خود را به عنوان نام میزبان وارد کنید.
روی ذخیره کلیک کنید و از شما خواسته می شود که یک خط مشی هشدار همراه ایجاد کنید:
روی Create Alert Policy کلیک کنید.
بیایید نام این را «سیاست زمانی پایانی» بگذاریم. در بخش پیکربندی ، "Condition triggers if" را روی "Any time series violates" تنظیم کنید و روی ذخیره کلیک کنید.
ما هنوز کاملاً تمام نشده ایم. در مرحله بعد، یک کانال اعلان را مشخص می کنیم تا زمانی که خط مشی هشدار ما نقض شد به ما اطلاع داده شود. در منوی کشویی نوع کانال اعلان، ایمیل را انتخاب کنید و سپس یک آدرس ایمیل معتبر را انتخاب کنید.
روی 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"
پس از چند دقیقه، باید ایمیلی دریافت کنید که به شما هشدار می دهد قطعی برق:
بیایید آن را لغو کنیم. در Cloud Shell خود، بیایید nginx را مجددا راه اندازی کنیم:
kubectl exec -t webserver-statefulset-0 -- /bin/bash -c "nginx"
پس از چند دقیقه، یک ایمیل Stackdriver دیگر دریافت خواهید کرد، این بار با اخباری بهتر از قبل:
8. پاکسازی
اکنون که از GCE به GKE با Migrate for Anthos مهاجرت کردهایم، بیایید پروژه خود را از تمام منابعی که ایجاد کردهایم پاک کنیم.
پروژه را حذف کنید
اگر ترجیح می دهید، می توانید کل پروژه را حذف کنید. در کنسول GCP، به صفحه Cloud Resource Manager بروید:
در لیست پروژه، پروژه ای را که در آن کار می کردیم انتخاب کنید و روی حذف کلیک کنید. از شما خواسته می شود شناسه پروژه را تایپ کنید. آن را وارد کرده و Shut Down را بزنید.
اگر ترجیح می دهید اجزای مختلف را یکی یکی حذف کنید، به بخش بعدی بروید.
Stackdriver
داشبورد
از صفحه داشبورد خود روی نماد تنظیمات کلیک کنید در بالای صفحه و حذف داشبورد را انتخاب کنید.
خط مشی هشدار
از صفحه خطمشیها ، حذف را از منوی Actions انتخاب کنید در سمت راست برای هر سیاستی که ایجاد کردید.
بررسی آپتایم
از صفحه 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 همراه با یک خط مشی هشدار را پیکربندی کردیم تا به ما اطلاع دهد که سرور وب ما از کار می افتد