در سالهای اخیر، استفاده از کانتینرها بهعنوان روشی محبوب برای توسعه و اجرای اپلیکیشنها رشد چشمگیری داشته است. کانتینرها سبک، سریع و قابلانتقال هستند و به توسعهدهندگان کمک میکنند تا اپلیکیشنهای خود را در محیطهای مختلف بدون نگرانی از ناسازگاری اجرا کنند. اما با افزایش تعداد کانتینرها، مدیریت آنها به چالشی بزرگ تبدیل میشود. در چنین شرایطی، Kubernetes بهعنوان یک راهحل متنباز برای ارکستراسیون کانتینرها، نقش حیاتی پیدا کرده است.
برای سادهتر شدن استفاده از Kubernetes در فضای ابری، گوگل سرویس Google Kubernetes Engine (GKE) را معرفی کرده است. در این مقاله از وبلاگ نِکس زون با محوریت آموزش Google Kubernetes Engine (GKE)، قصد داریم بهصورت کاربردی و مرحلهبهمرحله شما را با این ابزار قدرتمند آشنا کنیم.
Google Kubernetes Engine (GKE) چیست؟
GKE یک پلتفرم مدیریتشده از سوی گوگل برای اجرای کلاسترهای Kubernetes است. شما با استفاده از این سرویس، میتوانید اپلیکیشنهای کانتینریشده خود را در مقیاسهای کوچک تا بسیار بزرگ اجرا کنید، بدون اینکه نیاز باشد زیرساختها را بهصورت دستی پیکربندی یا نگهداری کنید.
در واقع GKE پیچیدگیهای نصب و راهاندازی Kubernetes را از بین میبرد و همهچیز را در یک رابط کاربری ساده یا از طریق خط فرمان در اختیار شما میگذارد. گوگل، مدیریت نودها، بهروزرسانی سیستم، نظارت و مقیاسپذیری را بهصورت خودکار انجام میدهد تا شما روی توسعه و استقرار اپلیکیشن تمرکز کنید.
مزایای استفاده از GKE
یکی از مهمترین مزایای استفاده از GKE، مدیریت ساده منابع است. این سرویس به شما اجازه میدهد تا تنها با چند کلیک یا اجرای چند دستور، یک کلاستر Kubernetes ایجاد و اپلیکیشن خود را روی آن اجرا کنید. گوگل همچنین امکان بهروزرسانی بدون توقف سرویسها را فراهم میکند تا اپلیکیشن شما همیشه در دسترس بماند.
مقیاسپذیری خودکار یکی دیگر از ویژگیهای کلیدی GKE است. زمانی که حجم ترافیک یا بار کاری افزایش مییابد، سیستم بهصورت خودکار منابع بیشتری اختصاص میدهد و زمانی که بار کاهش مییابد، منابع آزاد میشوند. این ویژگی باعث بهینهسازی مصرف منابع و کاهش هزینهها میشود.
از سوی دیگر، ادغام آسان با دیگر سرویسهای Google Cloud مانند Cloud Storage، Cloud SQL، Pub/Sub و Monitoring، GKE را به گزینهای فوقالعاده برای پیادهسازی معماریهای مدرن و میکروسرویس تبدیل میکند.
چرا Kubernetes؟
قبل از اینکه بهطور عمیقتری وارد آموزش Google Kubernetes Engine (GKE) شویم، بهتر است به این سؤال پاسخ دهیم که چرا Kubernetes اهمیت دارد. در پروژههای مدرن، اجرای چندین کانتینر بهصورت همزمان رایج است. مدیریت دستی این کانتینرها بهویژه در محیطهای تولید بسیار سخت و پرریسک است.
Kubernetes این چالش را با فراهمکردن ابزارهایی برای مدیریت خودکار استقرار، مقیاسپذیری، بهروزرسانی و سلامت کانتینرها حل میکند. شما میتوانید قوانینی تعریف کنید تا اپلیکیشنها بهطور خودکار در نودهای مختلف اجرا شوند، در صورت بروز خطا بازیابی شوند و یا هنگام نیاز، بهصورت خودکار مقیاس بگیرند.
ساختار کلی GKE
زمانی که یک کلاستر در GKE ایجاد میکنید، در واقع مجموعهای از ماشینهای مجازی (نودها) در اختیار شما قرار میگیرد که هر کدام وظیفه اجرای کانتینرها را دارند. این نودها میتوانند در مناطق مختلف جغرافیایی قرار بگیرند تا قابلیت دسترسی و تحمل خطا افزایش پیدا کند.
در قلب این ساختار، کنترل پلین (Control Plane) قرار دارد که مسئول مدیریت کلی سیستم، زمانبندی اجرای کانتینرها، بررسی سلامت و هماهنگی بین اجزاست. در GKE، این بخش بهصورت کامل توسط گوگل مدیریت میشود.
شما میتوانید از طریق ابزار خط فرمان kubectl یا رابط گرافیکی GCP به کلاستر خود متصل شوید، منابع را تعریف و مدیریت کنید، و وضعیت اجرای اپلیکیشنها را بررسی کنید.
شروع به کار با GKE
برای شروع، باید یک پروژه در کنسول Google Cloud ایجاد کنید و API مربوط به Kubernetes Engine را فعال نمایید. پس از آن میتوانید با استفاده از Google Cloud Console یا دستور gcloud یک کلاستر جدید بسازید.
در زمان ساخت کلاستر، شما مشخص میکنید که چند نود میخواهید، در چه منطقهای اجرا شوند، نوع ماشینها چه باشد و ویژگیهایی مانند مقیاسپذیری خودکار فعال باشد یا نه. پس از ساخت، تنها کافی است kubectl را به کلاستر متصل کنید و کار با Kubernetes را آغاز کنید.
نکته مهم این است که همه تنظیمات از جمله امنیت، IAM، و شبکهسازی در GKE بهصورت ساده و قابلمدیریت طراحی شدهاند تا حتی تیمهایی که تازهکار هستند نیز بتوانند بدون پیچیدگی از این پلتفرم استفاده کنند.
استقرار اپلیکیشن در GKE
برای اجرای یک اپلیکیشن در GKE، ابتدا باید فایلهای پیکربندی Kubernetes را بنویسید. این فایلها معمولاً با فرمت YAML هستند و شامل اطلاعاتی درباره دیپلویمنتها، سرویسها، کانفیگها و منابع مورد نیاز هستند.
برای مثال، شما میتوانید مشخص کنید که چه تصویر کانتینری استفاده شود، اپلیکیشن در چند نسخه اجرا شود، و چه پورتی برای دسترسی باز باشد. پس از آمادهسازی فایلها، کافی است با اجرای دستور kubectl apply آنها را به کلاستر ارسال کنید. GKE بلافاصله اپلیکیشن را اجرا کرده و منابع لازم را اختصاص میدهد.
در صورتی که اپلیکیشن شما نیاز به بارگذاری خارجی دارد، میتوانید با تعریف LoadBalancer یا Ingress، دسترسی از طریق IP عمومی یا دامنه را فراهم کنید. همچنین میتوانید با تعریف ConfigMap و Secret، متغیرهای محیطی و اطلاعات حساس را بهصورت امن مدیریت کنید.
اجرای یک اپلیکیشن واقعی در GKE
در بخش قبلی با مفاهیم پایه آشنا شدیم. حالا وقتشه اپلیکیشنی واقعی رو روی Google Kubernetes Engine پیادهسازی کنیم. فرض کنیم یک API ساده با زبان Python و فریمورک Flask نوشتهایم. ابتدا این اپلیکیشن را در یک تصویر کانتینری بستهبندی میکنیم. سپس این تصویر را در Container Registry بارگذاری میکنیم.
برای اجرای این اپلیکیشن، ابتدا باید یک فایل YAML بهنام deployment.yaml بسازیم که در آن تعریف کنیم چه تصویری باید اجرا شود، چند نسخه از آن اجرا شود، و کانتینر روی چه پورتی در دسترس باشد. این فایل به Kubernetes میگوید که چطور منابع را ایجاد کند.
پس از آمادهسازی فایلها، با استفاده از kubectl apply آنها را به کلاستر ارسال میکنیم. GKE فوراً اپلیکیشن را دیپلوی میکند و اطلاعات اجرای آن را در داشبورد کنسول و با دستور kubectl get pods میتوانید بررسی کنید.
تنظیم سرویس برای دسترسی خارجی
اپلیکیشنی که در کلاستر اجرا میشود، بهصورت پیشفرض در دسترس کاربران خارجی نیست. برای این که کاربران بتوانند از طریق اینترنت به آن دسترسی پیدا کنند، باید یک سرویس از نوع LoadBalancer تعریف کنیم.
در فایلی مانند service.yaml تعیین میکنیم که سرویس روی کدام پورت گوش کند و به کدام پادها (Pods) وصل شود. با اجرای این فایل، GKE یک IP عمومی اختصاص میدهد و از طریق آن، اپلیکیشن قابل دسترس میشود. در صورتی که از Ingress استفاده کنید، میتوانید قوانین پیچیدهتری برای مسیردهی، TLS و دامنههای مختلف تعریف کنید.
مقیاسپذیری خودکار در GKE
یکی از ویژگیهای جذاب در آموزش Google Kubernetes Engine (GKE)، مقیاسپذیری خودکار است. در Kubernetes میتوان تعیین کرد که اگر بار کاری افزایش یافت، تعداد نسخههای اپلیکیشن هم افزایش یابد.
برای فعالسازی این قابلیت، باید از Horizontal Pod Autoscaler استفاده کنید. با تعریف قوانینی مشخص میکنید که مثلاً اگر استفاده از CPU از ۸۰٪ بالاتر رفت، یک نسخه جدید ایجاد شود. این ویژگی باعث میشود اپلیکیشن شما همیشه پاسخگو باقی بماند، بدون اینکه هزینه اضافی برای منابع ثابت پرداخت کنید.
GKE همچنین امکان مقیاسپذیری خودکار برای نودها را هم فراهم میکند. اگر پادها به منابع بیشتری نیاز داشته باشند، سیستم بهصورت خودکار نود جدیدی اضافه میکند.
ارتقاء نسخه و انتشار بدون قطعی
در محیطهای واقعی، نیاز دارید اپلیکیشن را بهروزرسانی کنید بدون اینکه سرویسدهی قطع شود. Kubernetes این امکان را از طریق Rolling Update فراهم میکند. زمانی که نسخه جدیدی از اپلیکیشن دیپلوی میکنید، سیستم بهصورت مرحلهای پادهای جدید را ایجاد کرده و پادهای قدیمی را حذف میکند.
این فرآیند باعث میشود کاربران هیچگونه اختلالی در سرویس احساس نکنند. اگر نسخه جدید دچار خطا شود، Kubernetes بهصورت خودکار عملیات را متوقف میکند و به نسخه پایدار قبلی باز میگردد.
امنیت در Google Kubernetes Engine
امنیت یکی از ارکان مهم در استفاده از GKE است. خوشبختانه گوگل ابزارها و سیاستهایی قوی برای حفظ امنیت کلاسترها ارائه داده است. اولین قدم، استفاده از IAM برای کنترل دسترسی به کلاستر است. شما میتوانید تعیین کنید چه کسی مجاز به مشاهده، ویرایش یا دیپلوی منابع باشد.
در سطح کلاستر، میتوانید از Namespace برای تفکیک محیطهای مختلف استفاده کنید. این کار کمک میکند تا دسترسیها محدودتر شود و منابع پروژهها از یکدیگر جدا باشند.
استفاده از Secret برای نگهداری اطلاعات حساس مانند رمز عبور، کلیدهای API یا گواهینامهها ضروری است. این اطلاعات بهصورت رمزنگاریشده در Kubernetes ذخیره میشوند و در اختیار اپلیکیشن قرار میگیرند.
در کنار اینها، GKE قابلیت فعالسازی شبکههای خصوصی، تنظیم Firewall Rules و استفاده از Private Clusters را هم در اختیار شما قرار میدهد تا سطح امنیت را تا حد ممکن بالا ببرید.
مانیتورینگ و لاگها
هیچ زیرساخت ابری بدون ابزارهای مانیتورینگ کامل نیست. GKE بهصورت بومی با ابزارهای Cloud Monitoring و Cloud Logging ادغام شده است. شما میتوانید لاگهای مربوط به پادها، سرویسها، و حتی خطاهای سیستم را بهصورت زنده مشاهده و تحلیل کنید.
در بخش Monitoring میتوانید گرافهایی از مصرف منابع، زمان پاسخدهی، تعداد درخواستها و حتی خطاها مشاهده کنید. با استفاده از هشدارهای سفارشی، میتوانید در صورت بروز اختلال، بلافاصله مطلع شوید و اقدام لازم را انجام دهید.
برای پروژههای بزرگتر، میتوان ابزارهایی مانند Prometheus، Grafana و ELK را نیز در کنار GKE پیادهسازی کرد.
بهینهسازی مصرف و کاهش هزینهها
در هر پروژهای، بهینهسازی منابع موضوعی کلیدی برای کاهش هزینههاست. استفاده از نودهای Preemptible، فعالسازی Autoscaler، تنظیم صحیح مقادیر CPU و RAM در پادها و حذف منابع غیرضروری از جمله روشهایی هستند که به کاهش هزینه کمک میکنند.
همچنین تعیین منابع مناسب برای هر کانتینر از هدررفت منابع جلوگیری میکند. بهتر است همیشه منابع را بر اساس بار کاری واقعی تنظیم کرده و آن را بهمرور بهینه کنید.
فعالسازی Billing Alerts در GCP کمک میکند مصرف مالی را کنترل کرده و در صورت عبور از سقف مشخص، هشدار دریافت کنید.
نتیجه گیری
در این پارت از آموزش Google Kubernetes Engine (GKE) با نحوه اجرای اپلیکیشن، تنظیم سرویس، مقیاسپذیری خودکار، ارتقاء نسخه بدون قطعی، امنیت، مانیتورینگ و بهینهسازی مصرف منابع آشنا شدیم. حالا شما میدانید چطور یک اپلیکیشن کانتینری را با استفاده از GKE در محیطی امن، مقیاسپذیر و حرفهای مدیریت کنید.
Google Kubernetes Engine راهکاری قدرتمند برای اجرای اپلیکیشنهای مدرن است. با استفاده از این پلتفرم میتوانید بهرهوری تیم توسعه را بالا ببرید، خطاها را کاهش دهید و با هزینهای کنترلشده پروژههای بزرگ را مدیریت کنید. اگر در فکر راهاندازی زیرساخت کانتینری حرفهای هستید، یا در اجرای اپلیکیشنهای خود در Kubernetes به کمک نیاز دارید، تیم نکس زون همراه مطمئن شما در مسیر توسعه ابری خواهد بود.