如何将快速API应用程序扩展到Kubernetes群集
#python #devops #docker #kubernetes

Docker是利用OS虚拟化的最强大和流行的容器化工具之一。它创建了在原始应用程序中孤立的环境中运行的Docker容器。 Docker容器包含所有配置和文件以运行应用程序。当他们在Docker Hub注册表中托管时,它们很容易在不同的开发人员中共享。

在本教程中,您将学习如何将Fast API应用程序扩展到Kubernetes。我们将首先在本地创建并运行快速的API应用程序。我们将对快速API应用程序进行扩展,并将其作为Docker容器运行。我们最终将将Dockerized快速API应用程序部署到Kubernetes。

Kubernetes是一个开源平台,可以自动管理Docker容器的部署。 Kubernetes协调应用程序容器,并将其托管在Kubernetes群集中。 Kubernetes群集具有运行和管理托管/部署的容器应用程序的节点(主和工作节点)。部署的容器在称为POD的Kubernetes环境中运行。 POD是在Kubernetes群集中运行的最小可部署单元。

在本教程中,我们将将Dockerized快速API应用程序部署到称为Minikube的本地Kubernetes群集。稍后,我们将更多地谈论Minikube。让我们开始从事我们的项目!

先决条件

让您轻松地使用本教程并将您的应用程序部署到Kubernetes,您需要了解Docker。您还必须在计算机上拥有以下软件:

快速API入门

FastApi是一个流行的Python Web框架,开发人员用它来创建RESTFUL API。它基于Pydantic和Python型提示,可有助于数据的序列化,进行验证和验证。在本教程中,我们将使用FastAPI创建一个简单的“ Hello World”应用程序。我们在本地测试并运行该应用程序。 FastApi需要ASGI server运行应用程序生产,例如Uvicorn

与任何应用程序或项目一样,我们需要安装框架和依赖项。让我们使用以下pip命令安装快速API框架和UVICORN:

pip install fastapi
pip install "uvicorn[standard]"

安装过程后,创建一个名为fast-api的新文件夹,并使用VS代码打开它。在文件夹中,创建一个名为main.py的新文件,并添加以下python代码:

from typing import Union

from fastapi import FastAPI

app = FastAPI()


@app.get("/")
def read_root():
    return {"Hello": "World"}

上面的Python片段将创建一个route路线,该路由将返回“ Hello”:“ World”。要运行该应用程序,请cd进入fast-api文件夹并在您的终端中执行此uvicorn命令:

uvicorn main:app

命令将在http://127.0.0.1:8000上启动您的应用程序,如下所示:

Image description

然后,您可以在Web浏览器中键入上面的URL以查看应用程序:

Image description

我们的fastapi应用程序正在运行,下一步是停靠fastapi应用程序。

停靠FastAPI应用程序

我们将在Docker容器内运行FastAPI应用程序。为了扩展FastAPI应用程序,我们需要遵循以下步骤:

  1. 创建一个requirements.txt文件。
  2. 为Fastapi应用程序编写Dockerfile。
  3. 使用Dockerfile构建Fastapi应用程序的Docker映像。
  4. 使用Docker Image启动Docker容器。

让我们应用以下步骤。

创建一个requirements.txt文件

requirements.txt文件包含FastAPI应用程序的框架和依赖项。 Docker在为FastAPI应用程序创建Docker映像时将安装所有这些要求。

fast-api文件夹中,创建一个名为requirements.txt的新文件。打开文件并添加以下内容:

fastapi
uvicorn

为Fastapi应用程序编写Dockerfile

Dockerfile是一个可执行文件,其中包含用于创建Docker映像的命令或指令列表。 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为FastAPI应用程序构建Docker映像

我们将使用Dockerfile中的指令为FastAPI应用程序构建Docker映像。您将cd进入终端中的fast-api文件夹,然后运行此docker命令:

docker build -t bravinwasike/fast-api .

注意:确保使用Docker Hub帐户用户名称命名Docker Image。将Docker映像推向Docker Hub存储库将变得更加容易。该命令将在您的终端中显示以下输出:

Image description

使用Docker Image启动Docker容器

我们将使用Docker Image启动Docker容器。运行Docker映像时,它将为应用程序启动Docker容器。在您的终端中,运行此docker命令:

docker run -p 8000:8000 bravinwasike/fast-api

命令将在http://127.0.0.1:8000上启动您的应用程序,如下所示:

Image description

然后,您可以在Web浏览器中键入上面的URL以查看应用程序:

Image description

我们已经停止了快速API应用程序。让我们将Docker图像推到Docker Hub。

将Docker图像推到Docker Hub

要将Docker Image推向Docker Hub,您需要从您的终端登录到Docker Hub帐户:

docker login

然后,您将使用以下docker命令推动docker映像:

docker push bravinwasike/fast-api

您必须推动为Docker Hub创建的Docker映像。将快速API应用程序部署到Minikube时,我们将使用此Docker映像。让我们开始使用Minikube。

Minikube入门

Minikube是Kubernetes引擎,可让DevOps工程师在其本地机器上创建Kubernetes群集。 Minikube Kubernetes群集只有一个可以管理已部署应用程序的节点。 Minikube是一个基于云的Kubernetes群集的简单版本,该群集具有多个主节点和工人节点。我们将使用Minikube托管我们的Dockerized FastApi应用程序。

Minikube很容易设置,因为它通常带有Docker安装。只要您在计算机中运行Docker,默认情况下就有Minikube。

注意:仅在开发环境中测试简单的kubernetes应用程序时才使用Minikube。在生产环境中,您永远无法使用Minikube。

要检查Docker随附的Minikube版本,请运行此minikube Comamnd:

minikube version

要启动Minikube Kubernetes群集,运行此minikube命令:

minikube start --driver=docker

命令将创建并启动Minikube Kubernetes群集,如下所示:

Image description

我们在本地机器上启动了Minikube Kubernetes群集。在部署Dockerized快速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群集时,您将需要创建一个kubernetes yaml文件。让我们谈谈这个文件。

kubernetes yaml文件

kubernetes yaml文件描述了Kubernetes应用程序和将在Kubernetes群集中创建的POD的资源。该文件还为应用程序配置了Kubernetes Service。 Kubectl将使用此文件将Dockerized快速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。部署
文件的第一部分将配置应用程序POD和您已部署的应用程序的资源。它将创建两个豆荚。 POD是部署应用程序的复制品或实例。它将使用Docker Hub的bravinwasike/fast-api图像来创建Docker容器。

2。服务
第二种类型的文件为应用程序配置了Kubernetes服务。它使用LoadBalancer Kubernetes服务将流量平均分配给两个容器吊舱。 Minikube将把外部IP地址分配给Kubernetes服务。它将使我们能够访问已部署的快速API应用程序。

让我们将kubectl应用于此文件:

kubectl apply -f kubernetes.yaml

命令将创建一个名为fast-api-deployment的Kubernetes部署。它还将创建一个名为fast-api-service的Kubernetes服务。让我们运行以下命令以获取Kubernetes部署和服务:

1。 Kubernetes部署
运行以下命令:

kubectl get deployment

它给出以下输出:

Image description

2。 Kubernetes服务
运行以下命令:

kubectl get service

它给出以下输出:

Image description

访问已部署的FastAPI应用程序

要访问已部署的FastAPI应用程序,Minikube将把外部IP地址分配给fast-api-service。您将在Web浏览器中键入外部IP地址并访问应用程序。要获取外部IP地址,请运行此minikube命令:

minikube service fast-api-service

Minikube已将外部IP地址分配给fast-api-service,如下所示:

Image description

在您的Web浏览器中键入分配的IP地址以访问您的Dockerized FastApi应用程序:

Image description

我们的Dockerized FastApi应用程序正在Minikube Kubernetes群集中运行。因此,我们已经成功地对接并部署了一个快速的API应用程序。

结论

在本教程中,您已经学会了如何将快速API应用程序扩展到Kubernetes。我们首先在本地创建和运行快速的API应用程序。然后,我们写了一个Dockerfile,并用它为FastApi应用程序构建了Docker映像。

我们使用Docker Image启动Docker容器。最后,我们将Dockerized快速API应用程序部署到Minikube Kubernetes。我们使用Kubernetes CLI和Kubernetes Yaml部署了应用程序。