Kubernetes 是一个开源平台,提供部署、维护和扩展功能。它简化了容器化 Python 应用程序的管理,同时提供可移植性、可扩展性和自我修复能力。
无论您的 Python 应用程序是简单还是更复杂,Kubernetes 都能让您高效地部署和扩展它们,无缝推出新功能,同时将资源限制在仅所需的范围内。
在本文中,我将介绍将简单 Python 应用程序部署到 Kubernetes 的过程,包括
- 创建 Python 容器镜像
- 将容器镜像发布到镜像仓库
- 使用 持久卷
- 将 Python 应用程序部署到 Kubernetes
要求
您需要 Docker、kubectl 和此源代码。
Docker 是一个构建和交付分布式应用程序的开放平台。要安装 Docker,请遵循官方文档。要验证 Docker 是否在您的系统上运行
$ docker info
Containers: 0
Images: 289
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
Dirs: 289
Execution Driver: native-0.2
Kernel Version: 3.16.0-4-amd64
Operating System: Debian GNU/Linux 8 (jessie)
WARNING: No memory limit support
WARNING: No swap limit support
kubectl 是一个命令行界面,用于针对 Kubernetes 集群执行命令。运行以下 shell 脚本来安装 kubectl
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
部署到 Kubernetes 需要容器化的应用程序。让我们回顾一下容器化 Python 应用程序。
容器化概览
容器化涉及将应用程序封装在具有自己操作系统的容器中。这种完整的机器虚拟化选项的优势在于能够在任何机器上运行应用程序,而无需担心依赖关系。
Roman Gaponov 的文章可作为参考。让我们从为我们的 Python 代码创建容器镜像开始。
创建 Python 容器镜像
为了创建这些镜像,我们将使用 Docker,它使我们能够在隔离的 Linux 软件容器内部署应用程序。Docker 能够使用 Docker 文件中的指令自动构建镜像。
这是我们 Python 应用程序的 Docker 文件
FROM python:3.6
MAINTAINER XenonStack
# Creating Application Source Code Directory
RUN mkdir -p /k8s_python_sample_code/src
# Setting Home Directory for containers
WORKDIR /k8s_python_sample_code/src
# Installing python dependencies
COPY requirements.txt /k8s_python_sample_code/src
RUN pip install --no-cache-dir -r requirements.txt
# Copying src code to Container
COPY . /k8s_python_sample_code/src/app
# Application Environment variables
ENV APP_ENV development
# Exposing Ports
EXPOSE 5035
# Setting Persistent data
VOLUME ["/app-data"]
# Running Python Application
CMD ["python", "app.py"]
此 Docker 文件包含运行我们的示例 Python 代码的指令。它使用 Python 3.5 开发环境。
构建 Python Docker 镜像
我们现在可以使用以下命令从这些指令构建 Docker 镜像
docker build -t k8s_python_sample_code .
此命令为我们的 Python 应用程序创建一个 Docker 镜像。
发布容器镜像
我们可以将我们的 Python 容器镜像发布到不同的私有/公共云仓库,例如 Docker Hub、AWS ECR、Google Container Registry 等。在本教程中,我们将使用 Docker Hub。
在发布镜像之前,我们需要将其标记为版本
docker tag k8s_python_sample_code:latest k8s_python_sample_code:0.1
将镜像推送到云仓库
使用 Docker Hub 以外的 Docker 注册表来存储镜像需要您将该容器注册表添加到本地 Docker 守护程序和 Kubernetes Docker 守护程序。您可以查找不同云注册表的此信息。在此示例中,我们将使用 Docker Hub。
执行以下 Docker 命令来推送镜像
docker push k8s_python_sample_code
使用 CephFS 持久存储
Kubernetes 支持许多持久存储提供商,包括 AWS EBS、CephFS、GlusterFS、Azure Disk、NFS 等。我将介绍使用 CephFS 的 Kubernetes 持久存储。
要将 CephFS 用于 Kubernetes 容器的持久数据,我们将创建两个文件
persistent-volume.yml
apiVersion: v1
kind: PersistentVolume
metadata:
name: app-disk1
namespace: k8s_python_sample_code
spec:
capacity:
storage: 50Gi
accessModes:
- ReadWriteMany
cephfs:
monitors:
- "172.17.0.1:6789"
user: admin
secretRef:
name: ceph-secret
readOnly: false
persistent_volume_claim.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: appclaim1
namespace: k8s_python_sample_code
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 10Gi
我们现在可以使用 kubectl 将持久卷和声明添加到 Kubernetes 集群
$ kubectl create -f persistent-volume.yml
$ kubectl create -f persistent-volume-claim.yml
我们现在准备好部署到 Kubernetes。
将应用程序部署到 Kubernetes
为了管理将应用程序部署到 Kubernetes 的最后阶段,我们将创建两个重要的文件:一个服务文件和一个部署文件。
创建一个文件并将其命名为 k8s_python_sample_code.service.yml
,内容如下
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: k8s_python_sample_code
name: k8s_python_sample_code
namespace: k8s_python_sample_code
spec:
type: NodePort
ports:
- port: 5035
selector:
k8s-app: k8s_python_sample_code
创建一个文件并将其命名为 k8s_python_sample_code.deployment.yml
,内容如下
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: k8s_python_sample_code
namespace: k8s_python_sample_code
spec:
replicas: 1
template:
metadata:
labels:
k8s-app: k8s_python_sample_code
spec:
containers:
- name: k8s_python_sample_code
image: k8s_python_sample_code:0.1
imagePullPolicy: "IfNotPresent"
ports:
- containerPort: 5035
volumeMounts:
- mountPath: /app-data
name: k8s_python_sample_code
volumes:
- name: <name of application>
persistentVolumeClaim:
claimName: appclaim1
最后,使用 kubectl 将应用程序部署到 Kubernetes
$ kubectl create -f k8s_python_sample_code.deployment.yml
$ kubectl create -f k8s_python_sample_code.service.yml
您的应用程序已成功部署到 Kubernetes。
您可以通过检查正在运行的服务来验证您的应用程序是否正在运行
kubectl get services
愿 Kubernetes 让您摆脱未来的部署难题!
想了解更多关于 Python 的信息?Nanjekye 的著作《Python 2 和 3 兼容性》提供了编写可在 Python 2 和 3 上运行的清晰代码的方法,包括如何将现有的 Python 2 兼容代码转换为可在 Python 2 和 3 上可靠运行的代码的详细示例。
评论已关闭。