برنامه نویسی

نحوه 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، باید این مراحل را دنبال کنیم:

  1. ایجاد یک requirements.txt فایل.
  2. یک Dockerfile برای برنامه FastAPI بنویسید.
  3. با استفاده از Dockerfile یک تصویر Docker برای برنامه FastAPI بسازید.
  4. یک 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 برای استقرار برنامه استفاده کردیم.

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

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

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

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