نحوه Dockerize و استقرار یک برنامه API سریع در خوشه Kubernetes

Docker یکی از قدرتمندترین و محبوبترین ابزارهای کانتینریسازی است که از مجازیسازی سیستمعامل استفاده میکند. کانتینرهای Docker را ایجاد می کند که در یک محیط ایزوله از برنامه اصلی اجرا می شوند. کانتینرهای Docker شامل تمام تنظیمات و فایلها برای اجرای یک برنامه هستند. هنگامی که در رجیستری Docker Hub میزبانی می شوند، به راحتی می توان آنها را بین توسعه دهندگان مختلف به اشتراک گذاشت.
در این آموزش، نحوه Dockerize و استقرار یک برنامه Fast API در Kubernetes را خواهید آموخت. ابتدا یک برنامه Fast API را به صورت محلی ایجاد و اجرا می کنیم. ما برنامه Fast API را Docker می کنیم و آن را به عنوان یک ظرف Docker اجرا می کنیم. ما در نهایت برنامه Dockerized Fast API را در Kubernetes مستقر خواهیم کرد.
Kubernetes یک پلت فرم منبع باز است که به طور خودکار استقرار کانتینرهای Docker را مدیریت می کند. Kubernetes کانتینرهای برنامه را هماهنگ می کند و آنها را در یک خوشه Kubernetes میزبانی می کند. یک خوشه Kubernetes دارای گرههایی (گرههای Master و Worker) است که برنامههای کانتینر میزبان/استقرار شده را اجرا و مدیریت میکنند. کانتینرهای مستقر در یک محیط Kubernetes به نام pods اجرا می شوند. پاد کوچکترین واحد قابل استقرار است که در یک خوشه Kubernetes اجرا می شود.
در این آموزش، برنامه Dockerized Fast API را در یک خوشه محلی Kubernetes که به عنوان Minikube شناخته می شود، مستقر خواهیم کرد. در ادامه بیشتر در مورد Minikube صحبت خواهیم کرد. بیایید کار روی پروژه خود را شروع کنیم!
پیش نیازها
برای اینکه بتوانید به راحتی این آموزش را دنبال کنید و برنامه خود را در Kubernetes مستقر کنید، باید Docker را بدانید. همچنین باید نرم افزار زیر را در رایانه خود داشته باشید:
شروع به کار با Fast API
FastAPI یک چارچوب وب محبوب پایتون است که توسعه دهندگان از آن برای ایجاد API های RESTful استفاده می کنند. این مبتنی بر نکات Pydantic و Python است که به سریالسازی، سریالزدایی و اعتبارسنجی دادهها کمک میکند. در این آموزش، ما از FastAPI برای ایجاد یک برنامه ساده “Hello World” استفاده خواهیم کرد. ما برنامه را به صورت محلی تست و اجرا می کنیم. FastAPI برای اجرای برنامه تولیدی مانند Uvicorn به یک سرور ASGI نیاز دارد.
مانند هر برنامه یا پروژه دیگری، ما باید فریمورک و وابستگی ها را نصب کنیم. بیایید فریم ورک Fast API و Uvicorn را با استفاده از موارد زیر نصب کنیم pip
دستورات:
pip install fastapi
pip install "uvicorn[standard]"
پس از اتمام مراحل نصب، یک پوشه جدید به نام ایجاد کنید fast-api
و با VS Code آن را باز کنید. در پوشه، یک فایل جدید به نام ایجاد کنید main.py
و کد پایتون زیر را اضافه کنید:
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("https://dev.to/")
def read_root():
return {"Hello": "World"}
قطعه پایتون در بالا یک را ایجاد می کند route
مسیری که «سلام» برمیگرداند: «دنیا». برای اجرای برنامه، cd
به درون fast-api
پوشه و این را اجرا کنید uvicorn
دستور در ترمینال شما:
uvicorn main:app
دستور برنامه شما را در http://127.0.0.1:8000 مطابق شکل زیر شروع می کند:
سپس می توانید URL بالا را در مرورگر وب خود تایپ کنید تا برنامه را مشاهده کنید:
برنامه FastAPI ما در حال اجرا است، مرحله بعدی Dockerize کردن برنامه FastAPI است.
داکر کردن برنامه FastAPI
ما برنامه FastAPI را در داخل یک Docker Container اجرا خواهیم کرد. برای Dockerize کردن برنامه FastAPI، باید این مراحل را دنبال کنیم:
- ایجاد یک
requirements.txt
فایل. - یک Dockerfile برای برنامه FastAPI بنویسید.
- با استفاده از Dockerfile یک تصویر Docker برای برنامه FastAPI بسازید.
- یک Docker Container را با استفاده از Docker Image راه اندازی کنید.
بیایید این مراحل را اعمال کنیم.
ایجاد یک requirements.txt
فایل
آ requirements.txt
فایل حاوی چارچوب و وابستگی های برنامه FastAPI است. Docker همه این الزامات را هنگام ایجاد یک تصویر Docker برای برنامه FastAPI نصب می کند.
در fast-api
پوشه، یک فایل جدید به نام ایجاد کنید requirements.txt
. فایل را باز کنید و موارد زیر را اضافه کنید:
fastapi
uvicorn
یک Dockerfile برای برنامه FastAPI بنویسید
Dockerfile یک فایل اجرایی است که حاوی لیستی از دستورات یا دستورالعمل های ایجاد یک Docker Image است. Docker Engine همه این دستورات را به ترتیب زمانی اجرا می کند و یک تصویر Docker ایجاد می کند. در fast-api
پوشه، یک فایل جدید به نام ایجاد کنید requirements.txt
. فایل را باز کنید و موارد زیر را اضافه کنید:
#It instructs Docker Engine to use official python:3.10 as the base image
FROM python:3.10
#It creates a working directory(app) for the Docker image and container
WORKDIR /app
#It copies the framework and the dependencies for the FastAPI application into the working directory
COPY requirements.txt .
#It will install the framework and the dependencies in the `requirements.txt` file in our Docker image and container.
RUN pip install -r requirements.txt
#It will copy the remaining files and the source code from the host `fast-api` folder to the `app` container working directory
COPY . .
#It will expose the FastAPI application on port `8000` inside the container
EXPOSE 8000
#It is the command that will start and run the FastAPI application container
CMD ["uvicorn", "main:app", "--host", "0.0.0.0"]
با استفاده از Dockerfile یک تصویر Docker برای برنامه FastAPI بسازید
ما Docker Image را برای برنامه FastAPI با استفاده از دستورالعملهای Dockerfile میسازیم. شما خواهد شد cd
به درون fast-api
در ترمینال خود پوشه کنید و این را اجرا کنید docker
دستور:
docker build -t bravinwasike/fast-api .
توجه: مطمئن شوید که تصویر Docker را با استفاده از نام کاربری حساب Docker Hub خود نام گذاری کرده اید. فشار دادن Docker Image به مخزن Docker Hub را آسان تر می کند. این دستور خروجی زیر را در ترمینال شما نمایش می دهد:
یک Docker Container را با استفاده از Docker Image راه اندازی کنید
ما یک Docker Container را با استفاده از Docker Image راه اندازی خواهیم کرد. هنگامی که یک Docker Image را اجرا می کنید، یک Docker Container را برای برنامه راه اندازی می کند. در ترمینال خود، این را اجرا کنید docker
دستور:
docker run -p 8000:8000 bravinwasike/fast-api
دستور برنامه شما را در http://127.0.0.1:8000 مطابق شکل زیر شروع می کند:
سپس می توانید URL بالا را در مرورگر وب خود تایپ کنید تا برنامه را مشاهده کنید:
ما برنامه Fast API را Docker کرده ایم. بیایید تصویر Docker را به Docker Hub فشار دهیم.
فشار دادن تصویر Docker به Docker Hub
برای فشار دادن Docker Image به Docker Hub، باید از ترمینال خود وارد حساب Docker Hub خود شوید:
docker login
سپس تصویر Docker را با استفاده از موارد زیر فشار می دهید docker
دستور:
docker push bravinwasike/fast-api
شما باید Docker Image را که ایجاد کرده اید به Docker Hub فشار دهید. ما از این Docker Image هنگام استقرار برنامه Fast API در Minikube استفاده خواهیم کرد. بیایید با Minikube شروع کنیم.
شروع کار با Minikube
Minikube یک موتور Kubernetes است که به مهندسان DevOps اجازه می دهد تا یک خوشه Kubernetes را بر روی ماشین های محلی خود ایجاد کنند. خوشه Minikube Kubernetes فقط یک گره دارد که برنامه مستقر شده را مدیریت می کند. Minikube یک نسخه ساده از یک خوشه Kubernetes مبتنی بر ابر است که چندین گره اصلی و کارگر دارد. ما از Minikube برای میزبانی برنامه Dockerized FastAPI خود استفاده خواهیم کرد.
راه اندازی Minikube آسان است زیرا معمولاً با نصب Docker همراه است. تا زمانی که Docker را در دستگاه خود اجرا می کنید، به طور پیش فرض Minikube دارید.
توجه: Minikube فقط هنگام آزمایش برنامه های ساده Kubernetes در محیط توسعه استفاده می شود. شما هرگز نمی توانید از Minikube در محیط تولید استفاده کنید.
برای بررسی نسخه Minikube که با Docker ارائه شده است، این را اجرا کنید minikube
فرمان:
minikube version
برای راه اندازی Minikube Kubernetes Cluster، این را اجرا کنید minikube
دستور:
minikube start --driver=docker
این دستور یک خوشه Minikube Kubernetes را مانند شکل زیر ایجاد و راه اندازی می کند:
ما یک Minikube Kubernetes Cluster را در ماشین محلی خود راه اندازی کرده ایم. قبل از استقرار برنامه Dockerized Fast API، باید Kubernetes CLI (kubectl) را راه اندازی کنیم.
شروع کار با Kubernetes CLI
Kubernetes CLI (kubectl) یک رابط ابزار خط فرمان قدرتمند است که به مهندسان DevOps اجازه می دهد تا با یک خوشه Kubernetes از ترمینال ارتباط برقرار کنند. دارای دستوراتی است که به شما امکان می دهد برنامه های Dockerized را در خوشه Kubernetes مدیریت و استقرار دهید. راه های مختلفی برای نصب Kubernetes CLI وجود دارد. در این آموزش با استفاده از دستور زیر این ابزار را نصب می کنیم:
choco install kubernetes-cli
برای بررسی موفقیت آمیز بودن نصب، این را اجرا کنید kubectl
دستور:
kubectl version --client
هنگامی که می خواهید یک برنامه را با استفاده از Kubectl در Minikube Kubernetes Cluster مستقر کنید، باید یک فایل Kubernetes YAML ایجاد کنید. بیایید در مورد این فایل صحبت کنیم.
فایل YAML Kubernetes
فایل Kubernetes YAML منابع برنامه Kubernetes و پادهایی را که در خوشه Kubernetes ایجاد خواهند شد، توصیف می کند. این فایل همچنین سرویس Kubernetes را برای برنامه پیکربندی می کند. Kubectl از این فایل برای استقرار برنامه Dockerized Fast API در Minikube استفاده خواهد کرد. در fast-api
پوشه، یک فایل جدید به نام ایجاد کنید kubernetes.yaml
. فایل را باز کنید و کد زیر را اضافه کنید:
apiVersion: apps/v1
kind: Deployment
metadata:
name: fast-api-deployment
spec:
replicas: 2
selector:
matchLabels:
app: fast-api
template:
metadata:
labels:
app: fast-api
spec:
containers:
- name: fast-api
image: bravinwasike/fast-api
resources:
limits:
memory: "256Mi"
cpu: "500m"
ports:
- containerPort: 8000
---
apiVersion: v1
kind: Service
metadata:
name: fast-api-service
spec:
selector:
app: fast-api
ports:
- port: 8000
targetPort: 8000
type: LoadBalancer
را kubernetes.yaml
به دو تقسیم می شود. قسمت اول معروف است Deployment
در حالی که دومی به نام شناخته می شود Service
.
1. استقرار
قسمت اول فایل پادهای برنامه و منابع برنامه مستقر شده شما را پیکربندی می کند. دو غلاف ایجاد خواهد کرد. پادها کپی یا نمونه هایی از برنامه کاربردی هستند. از آن استفاده خواهد کرد bravinwasike/fast-api
تصویر از Docker Hub برای ایجاد Docker Container.
2. خدمات
این نوع دوم فایل سرویس Kubernetes را برای برنامه پیکربندی می کند. از آن استفاده می کند LoadBalancer
سرویس Kubernetes برای توزیع یکسان ترافیک بین دو کانتینر. Minikube یک آدرس IP خارجی به سرویس Kubernetes اختصاص می دهد. ما را قادر می سازد تا به برنامه Fast API مستقر شده دسترسی پیدا کنیم.
بیایید Kubectl را در این فایل اعمال کنیم:
kubectl apply -f kubernetes.yaml
این دستور یک Kubernetes Deployment با نام ایجاد می کند fast-api-deployment
. همچنین یک سرویس Kubernetes با نام ایجاد می کند fast-api-service
. بیایید دستورات زیر را برای دریافت استقرار و سرویس Kubernetes اجرا کنیم:
1. استقرار Kubernetes
دستور زیر را اجرا کنید:
kubectl get deployment
خروجی زیر را می دهد:
2. سرویس Kubernetes
دستور زیر را اجرا کنید:
kubectl get service
خروجی زیر را می دهد:
دسترسی به برنامه Deployed FastAPI
برای دسترسی به برنامه کاربردی FastAPI مستقر شده، Minikube یک آدرس IP خارجی به آن اختصاص می دهد fast-api-service
. شما آدرس IP خارجی را در مرورگر وب خود تایپ کرده و به برنامه دسترسی خواهید داشت. برای دریافت آدرس IP خارجی، این را اجرا کنید minikube
دستور:
minikube service fast-api-service
Minikube یک آدرس IP خارجی به آن اختصاص داده است fast-api-service
همانطور که در زیر نشان داده شده است:
آدرس IP اختصاص داده شده را در مرورگر وب خود تایپ کنید تا به برنامه Dockerized FastAPI خود دسترسی پیدا کنید:
برنامه Dockerized FastAPI ما در Minikube Kubernetes Cluster اجرا می شود. بنابراین، ما با موفقیت یک برنامه Fast API را به Kubernetes متصل کرده و مستقر کردیم.
نتیجه
در این آموزش، نحوه Dockerize کردن و استقرار یک برنامه Fast API در Kubernetes را یاد گرفتید. ما با ایجاد و اجرای یک برنامه Fast API به صورت محلی شروع کردیم. سپس یک Dockerfile نوشتیم و از آن برای ساختن یک Docker Image برای برنامه FastAPI استفاده کردیم.
ما از Docker Image برای راهاندازی یک Docker Container استفاده کردیم. در نهایت، ما برنامه Dockerized Fast API را در Minikube Kubernetes مستقر کردیم. ما از Kubernetes CLI و Kubernetes YAML برای استقرار برنامه استفاده کردیم.