在本教程中,我们将通过一个FastAPI入门案例,详细讲解如何将应用打包成Docker镜像,并使用Python的Kubernetes库进行部署。本教程适合新手,将逐步引导你完成整个过程。
一、准备工作
在开始之前,请确保你已经安装了以下工具:
-
Docker:用于容器化你的应用。 -
kubectl:Kubernetes的命令行工具,用于与Kubernetes集群交互。 -
Python:编写FastAPI应用。 -
Kubernetes集群:可以是本地的Minikube集群,也可以是云平台上的集群。
二、编写FastAPI应用
首先,我们创建一个简单的FastAPI应用。以下是一个基本的应用示例:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
保存为 main.py
。
三、创建Dockerfile
接下来,我们需要创建一个Dockerfile来打包我们的FastAPI应用。在项目根目录下创建一个名为Dockerfile
的文件,并添加以下内容:
# 使用官方Python基础镜像
FROM python:3.9-slim
# 设置工作目录
WORKDIR /app
# 复制应用代码到容器
COPY . /app
# 安装依赖
RUN pip install -r requirements.txt
# 暴露应用端口
EXPOSE 8000
# 启动应用
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
同时,创建一个requirements.txt
文件,列出你的依赖:
fastapi
uvicorn
四、构建Docker镜像
使用以下命令构建Docker镜像:
docker build -t fastapi-app .
构建完成后,你可以使用以下命令测试镜像:
docker run -p 8000:8000 fastapi-app
访问 http://localhost:8000
,确保应用正常运行。
五、使用Python的Kubernetes库部署应用
首先,确保你已经安装了Python的Kubernetes库:
pip install kubernetes
然后,我们需要创建一个Kubernetes部署配置文件。在项目根目录下创建一个名为deployment.yaml
的文件,并添加以下内容:
apiVersion: apps/v1
kind: Deployment
metadata:
name: fastapi-deployment
spec:
replicas: 2
selector:
matchLabels:
app: fastapi
template:
metadata:
labels:
app: fastapi
spec:
containers:
- name: fastapi
image: fastapi-app
ports:
- containerPort: 8000
接下来,使用Python脚本来创建Kubernetes资源。创建一个名为create_deployment.py
的文件,并添加以下内容:
from kubernetes import client, config
# 加载kubeconfig配置文件
config.load_kube_config()
# 创建Deployment对象
v1 = client.AppsV1Api()
deployment = client.V1Deployment(
api_version="apps/v1",
kind="Deployment",
metadata=client.V1ObjectMeta(name="fastapi-deployment"),
spec=client.V1DeploymentSpec(
replicas=2,
selector=client.V1LabelSelector(match_labels={"app": "fastapi"}),
template=client.V1PodTemplateSpec(
metadata=client.V1ObjectMeta(labels={"app": "fastapi"}),
spec=client.V1PodSpec(containers=[client.V1Container(name="fastapi", image="fastapi-app", ports=[client.V1ContainerPort(container_port=8000)])]
)
)
)
# 创建Deployment
resp = v1.create_namespaced_deployment(namespace="default", body=deployment)
print(f"Deployment created. status: {resp.status}")
运行脚本,部署你的FastAPI应用:
python create_deployment.py
六、验证部署
使用以下命令检查你的部署状态:
kubectl get deployments
你应该会看到fastapi-deployment
已经创建,并且有2个副本正在运行。
七、访问应用
为了访问你的FastAPI应用,你可能需要创建一个服务来暴露部署。创建一个名为service.yaml
的文件,并添加以下内容:
apiVersion: v1
kind: Service
metadata:
name: fastapi-service
spec:
selector:
app: fastapi
ports:
- protocol: TCP
port: 80
targetPort: 8000
type: LoadBalancer
使用以下命令创建服务:
kubectl apply -f service.yaml
然后,你可以使用以下命令获取服务的外部IP:
kubectl get services
访问返回的外部IP地址,你应该能看到你的FastAPI应用正在运行。
全栈开发体验课
如果你对FastAPI和Kubernetes的结合使用感兴趣,并希望深入了解它们的高级应用和最佳实践,我们为你准备了一个特别优惠的体验课程。只需100元,你就能获得一个月的深入学习机会,让你的技能更上一层楼。这个课程将涵盖从基础到高级的各个方面,帮助你构建高效、可维护的后端服务。立即报名,开启你的技术提升之旅!