برنامه نویسی

درک اشیاء Kubernetes و روند استقرار

Kubernetes ابزاری قدرتمند ارکستراسیون کانتینر است که مدیریت بار کاری برنامه را ساده می کند. برای استفاده کامل از قابلیت های خود ، درک اشیاء Kubernetes مانند غلاف ، استقرار و خدمات ضروری است. این راهنما توضیحی فنی در مورد وابستگی های Kubernetes و روند استقرار یک برنامه ساده Node.js ارائه می دهد.

1. اشیاء Kubernetes: غلاف و استقرار

1.1 غلاف: واحد اتمی

در Kubernetes ، کوچکترین واحد قابل اجرا یک است غلافبشر یک غلاف را به عنوان یک گروه منطقی یک یا چند فکر کنید ظروف که همیشه به صورت مشترک و با هم برنامه ریزی شده اند. این ظروف درون یک غلاف منابع مانند:

  • جلد های مشترک: فراهم کردن ذخیره سازی مداوم در دسترس همه ظروف موجود در غلاف.
  • فضای نام شبکه: اجازه دادن به ظروف در همان غلاف از طریق localhostبشر
  • آدرس IP: به هر غلاف یک آدرس IP داخلی منحصر به فرد در خوشه Kubernetes اختصاص داده می شود.

مقایسه: در زمینه سرویس کانتینر الاستیک AWS (ECS) ، یک POD شباهت هایی را با ECS به اشتراک می گذارد وظیفهبشر

ویژگی اصلی: طبیعت زودگذر

غلافها به گونه ای طراحی شده اند زودگذر، به این معنی که آنها در نظر گرفته نشده اند که طولانی مدت یا پایدار باشند. Kubernetes می تواند به دلایل مختلف ، مانند خرابی گره یا وقایع مقیاس ، غلاف را به دلایل مختلف خاتمه ، مقیاس یا تنظیم مجدد کند. بنابراین ، به طور مستقیم مدیریت غلافهای فردی به طور کلی توصیه نمی شود.

1.2 شیء استقرار: مدیریت ماکت های POD

برای مدیریت چرخه عمر و مقیاس پذیری غلاف ها ، Kubernetes استفاده می کند کنترل کنندهبشر یک کنترل کننده مهم اعزام شیء. استقرارها به روزرسانی های اعلامی را برای غلاف ها و ماکت ها ارائه می دهند (یک شیء سطح پایین که تضمین می کند تعداد مشخصی از ماکت های POD در هر زمان معین در حال اجرا هستند).

با تعریف یک حالت دلخواه در یک مانیفست استقرار ، شما به Kubernetes دستور می دهید:

  • کدام تصویر کانتینر (های) برای اجرای در غلافها.
  • تعداد نمونه های POD (ماکت) برای حفظ.
  • استراتژی بروزرسانی برای انتشار نسخه های جدید برنامه شما.

مزایای استفاده از استقرار:

  • پیکربندی اعلانی: شما وضعیت مورد نظر را تعریف می کنید ، و Kubernetes برای دستیابی و حفظ آن کار می کند.
  • به روزرسانی های نورد و بازگشت: Deployments به روزرسانی های برنامه یکپارچه را با خرابی صفر و امکان بازگرداندن به راحتی در صورت بروز مشکلات ، تسهیل می کند.
  • مقیاس گذاری: بر اساس تقاضا می توانید به راحتی تعداد ماکت های POD را بالا یا پایین مقیاس دهید.
  • خود درمانی: در صورت عدم موفقیت یک POD ، کنترلر استقرار به طور خودکار یک ماکت جدید را برای حفظ تعداد مورد نظر نمونه ها ایجاد می کند.

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

تمرین

2. استقرار دستی یک برنامه node.js

بیایید با استفاده از Minikube ، ابزاری که یک خوشه تک گره Kubernetes را به صورت محلی اجرا می کند ، مراحل لازم برای کانتینر کردن و استقرار یک برنامه ساده Node.js را در Kubernetes طی کنیم.

2.1 ایجاد یک تصویر docker

ابتدا باید برنامه Node.js خود را در یک تصویر Docker بسته بندی کنیم. ارائه شده Dockerfile در خدمت این هدف است:

FROM node:14-alpine

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

EXPOSE 8080

CMD [ "node", "app.js" ]
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این Dockerfile اقدامات زیر را انجام می دهد:

  • با یک Node.js نسخه 14 تصویر با یک سبک سبک وزن شروع می شود.
  • فهرست کار را درون ظرف قرار می دهد /appبشر
  • کپی کردن package.json پرونده برای نصب وابستگی ها.
  • کد برنامه را در /app دایرکتوری
  • پورت 8080 را که برنامه Node.js ما به آن گوش می دهد ، قرار می دهد.
  • هنگام شروع کانتینر ، دستور اجرای برنامه را مشخص می کند.

سپس تصویر Docker را می سازیم و برچسب می زنیم:

docker build -t kub-first-app .
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

برای اینکه این تصویر در دسترس خوشه Kubernetes ما باشد ، باید آن را به یک رجیستری کانتینر مانند Docker Hub سوق دهیم.

2.2 فشار دادن تصویر به Docker Hub

همانطور که گفته شد ، ما یک مخزن عمومی در Docker Hub ایجاد می کنیم (به عنوان مثال ، mayankcse1/kub-first-app). پس از برچسب زدن تصویر محلی با نام مخزن:

docker tag kub-first-app mayankcse1/kub-first-app
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

ما تصویر را به Docker Hub هاب می کنیم:

docker push mayankcse1/kub-first-app
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اکنون ، تصویر کانتینر ما برای کشیدن و اجرای Kubernetes در دسترس عموم است.

2.3 شروع Minikube

قبل از تعامل با Kubernetes ، ما باید اطمینان حاصل کنیم که خوشه Minikube ما در حال اجرا است:

minikube status
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

اگر در حال اجرا نباشد ، می توانیم با استفاده از درایور Docker آن را شروع یا راه اندازی کنیم:

minikube start --driver=docker
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

2.4 ایجاد استقرار Kubernetes

اکنون ، ما می توانیم به Kubernetes دستور دهیم تا یک استقرار ایجاد کند که غلافهای اداره ما را مدیریت کند mayankcse1/kub-first-app تصویر:

kubectl create deployment first-app --image=mayankcse1/kub-first-app
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

پشت صحنه از kubectl create deployment --image:

وقتی این دستور را اجرا می کنید ، kubectl ابزار خط فرمان با سرور API Kubernetes ارتباط برقرار می کند. سرور API سپس موارد زیر را انجام می دهد:

kubectl-create-command-behind

  1. یک شیء استقرار ایجاد می کند: Kubernetes حالت مورد نظر را که در فرمان شما تعریف شده است (استقرار نامگذاری شده است first-app در حال اجرا تصویر مشخص شده) در Datastore ETCD آن.
  2. کنترل کننده استقرار را تحریک می کند: کنترل کننده استقرار یک جزء در هواپیمای کنترل Kubernetes است که دائماً وضعیت استقرار را کنترل می کند. این شیء استقرار جدید را مشاهده می کند.
  3. یک ماکت ایجاد می کند: بر اساس مشخصات استقرار (در این حالت ، پیش فرض یک ماکت است) ، کنترل کننده استقرار یک شیء ماکت را ایجاد می کند. مسئولیت ماکت حفظ مجموعه پایدار از غلافهای ماکت است که تصویر کانتینر مشخص شده را اجرا می کنند.
  4. غلاف ایجاد می کند: سپس کنترلر ماکت ، غلاف (های) واقعی را بر اساس الگوی POD تعریف شده در ماکت ایجاد می کند. این الگوی شامل مشخصات کانتینر است ( mayankcse1/kub-first-app تصویر).
  5. غلاف برنامه ها: مؤلفه برنامه ریزی Kubernetes مناسب ترین گره در خوشه را برای اجرای غلاف (های) تازه ایجاد شده بر اساس در دسترس بودن منابع و سایر محدودیت ها تعیین می کند.
  6. ظروف را می کشد و اجرا می کند: عامل Kubelet که روی گره انتخاب شده اجرا می شود ، دستورالعمل اجرای ظرف (های) تعریف شده در مشخصات POD را دریافت می کند. آن را می کشد mayankcse1/kub-first-app تصویر از Docker Hub (یا یک رجیستری پیکربندی شده دیگر) و با استفاده از زمان اجرا کانتینر (در این حالت ، داکر) ظرف (های) را شروع می کند.

تأیید:

با استفاده از دستورات زیر می توانید استقرار و غلافهای ایجاد شده را تأیید کنید:

kubectl get deployments
kubectl get pods
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

داشبورد Kubernetes:

داشبورد Minikube یک UI مبتنی بر وب را برای تجسم خوشه Kubernetes شما فراهم می کند:

minikube dashboard
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

داشبورد مینیکوب
این داشبورد استقرار ایجاد شده و غلافهایی را که مدیریت می کند به شما نشان می دهد.

شماره خدمات: افشای برنامه ها

در حالی که غلاف ها در حال اجرا هستند و آدرس های IP داخلی دارند ، این IP ها زودگذر هستند و فقط در داخل خوشه قابل دسترسی هستند. برای اینکه برنامه ما در داخل خوشه یا خارج از کشور قابل دسترسی باشد ، باید از a استفاده کنیم خدمت شیء.

kubernetes خدمت یک آدرس IP پایدار و نام DNS را برای دسترسی به مجموعه ای از غلاف ها فراهم می کند. این به عنوان یک متعادل کننده بار و روتر ترافیک عمل می کند ، و اطمینان می دهد که درخواست ها در غلافهای سالم که با انتخاب کننده خدمات مطابقت دارند توزیع می شود.

انواع خدمات:

Kubernetes انواع مختلفی از خدمات را برای افشای برنامه ها به روش های مختلف ارائه می دهد:

  • ClusterIP (پیش فرض): سرویس را در یک IP داخلی داخلی قرار می دهد. این باعث می شود سرویس فقط از درون خوشه قابل دستیابی باشد.
  • NodePort: سرویس را در IP هر گره در یک درگاه استاتیک (NodePort) قرار می دهد. سپس می توانید با استفاده از IP گره و NodePort به سرویس از خارج از خوشه دسترسی پیدا کنید. اشکال: فقط اجازه می دهد یک سرویس در هر درگاه گره در معرض دید قرار گیرد و محدوده بندر محدود است. همچنین ، شما هنوز هم برای در دسترس بودن زیاد در تنظیمات چند گره ، به یک متعادل کننده بار خارجی نیاز دارید.
  • LoadBalancer: سرویس را با استفاده از متعادل کننده بار ارائه دهنده ابر در خارج قرار می دهد. ارائه دهنده Cloud یک متعادل کننده بار را ارائه می دهد و ترافیک خارجی به طور خودکار به سرویس NodePort و Clusterip منتقل می شود. این نوع به طور معمول در محیط های ابری استفاده می شود.

در معرض برنامه ما:

برای این مثال ، ما از LoadBalancer نوع (که minikube شبیه سازی می کند):

kubectl expose deployment first-app --type=LoadBalancer --port=8080
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این دستور خدماتی به نام ایجاد می کند first-app که غلافهای مدیریت شده توسط ما را انتخاب می کند first-app استقرار و قرار دادن بندر 8080.

تأیید:

شما می توانید سرویس ایجاد شده را با استفاده از:

kubectl get services
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

شما خواهید دید first-app خدمات ذکر شده با یک آدرس IP خارجی (یا اگر متعادل کننده بار هنوز توسط Minikube تهیه شده است).

دسترسی به برنامه:

برای دسترسی به برنامه در معرض ، Minikube یک دستور مناسب را ارائه می دهد:

minikube service first-app
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

این دستور مرورگر وب پیش فرض شما را باز می کند و به IP و درگاه خارجی که برنامه شما در دسترس است حرکت می کند.

kubernetes- میزبان

نتیجه گیری:

ما با استفاده از استقرار برای مدیریت نمونه های برنامه (POD ها) و خدمات برای افشای آن ، یک برنامه ساده Node.js را در Kubernetes مستقر کرده ایم تا آن را در داخل و خارجی در معرض دید قرار دهیم. این نشان دهنده مفاهیم اساسی غلاف ، استقرار و خدمات است که برای اجرای و مدیریت برنامه های کانتینر شده در Kubernetes ضروری است. به یاد داشته باشید که در سناریوهای دنیای واقعی ، شما به طور معمول این اشیاء را با استفاده از مانیفست های YAML برای کنترل بهتر نسخه و اتوماسیون تعریف می کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا