本文已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。
开始使用 Kubernetes(使用 Python)
所以,你知道你想在 Kubernetes 中运行你的应用程序,但不知道从哪里开始。或者你可能已经开始,但仍然不知道你不知道什么。在本博客中,你将了解如何容器化一个应用程序并在 Kubernetes 中运行它。
本演练假设你是一名开发人员,或者至少对命令行(最好是 bash shell)感到熟悉。
我们将做什么
- 获取代码并在本地运行应用程序
- 创建一个镜像并在 Docker 中运行应用程序
- 创建一个部署并在 Kubernetes 中运行应用程序
先决条件
- Kubernetes 服务 - 在本演练中,我使用 带有 Kubernetes 的 Docker Desktop,但你可以使用其他服务。有关完整列表,请参阅 入门。
- 已安装 Python 3.7
- 已安装 Git
容器化应用程序
在本节中,你将获取一些源代码,验证它是否在本地运行,然后创建应用程序的 Docker 镜像。使用的示例应用程序是一个非常简单的 Flask Web 应用程序;如果你想在本地测试它,你需要安装 Python。否则,你可以跳到“创建 Dockerfile”部分。
获取应用程序代码
使用 git 将存储库克隆到你的本地计算机
git clone https://github.com/JasonHaley/hello-python.git
切换到 app 目录
cd hello-python/app
此目录中只有两个文件。如果你查看 main.py 文件,你将看到该应用程序打印出一个 hello 消息。你可以在 Flask 网站上了解有关 Flask 的更多信息。
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello from Python!"
if __name__ == "__main__":
app.run(host='0.0.0.0')
requirements.txt 文件包含 main.py 所需的软件包列表,pip 将使用它来安装 Flask 库。
注意
当你开始编写更高级的 Python 时,你会发现并不总是建议使用pip install
,你可能需要使用 virtualenv
(或 pyenv
)在虚拟环境中安装依赖项。在本地运行
使用以下命令手动运行安装程序和应用程序
pip install -r requirements.txt
python main.py
这将启动一个托管你的应用程序的开发 Web 服务器,你可以通过导航到 https://127.0.0.1:5000 来查看。因为端口 5000 是开发服务器的默认端口,我们不需要指定它。
创建 Dockerfile
现在你已经验证了源代码可以工作,容器化应用程序的第一步是创建 Dockerfile。
在 hello-python/app 目录中,创建一个名为 Dockerfile 的文件,内容如下并保存它
FROM python:3.7
RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "/app/main.py"]
此文件是 Docker 将用来构建镜像的一组指令。对于这个简单的应用程序,Docker 将会
- 从 Docker Hub 获取版本 3.7 的官方 Python 基础镜像。
- 在镜像中,创建一个名为 app 的目录。
- 将工作目录设置为该新的 app 目录。
- 将本地目录的内容复制到镜像中的新文件夹中。
- 运行 pip 安装程序(就像我们之前做的那样)将需求拉入镜像中。
- 通知 Docker 容器监听端口 5000。
- 配置容器启动时要使用的启动命令。
创建镜像
在你的命令行或 shell 中,在 hello-python/app 目录中,使用以下命令构建镜像
docker build -f Dockerfile -t hello-python:latest .
注意
在这个示例中,我使用 :latest 标签,如果你不熟悉它是什么,你可能想阅读 Docker:最新的混乱。这将执行上面列出的七个步骤并创建镜像。要验证镜像是否已创建,请运行以下命令
docker image ls

应用程序现在已容器化,这意味着它现在可以在 Docker 和 Kubernetes 中运行!
在 Docker 中运行
在进入 Kubernetes 之前,让我们验证它是否在 Docker 中工作。运行以下命令让 Docker 在容器中运行应用程序并将其映射到端口 5001
docker run -p 5001:5000 hello-python
现在导航到 https://127.0.0.1:5001,你应该会看到“Hello from Python!” 消息。
更多信息
在 Kubernetes 中运行
你终于可以准备好在 Kubernetes 中运行应用程序了。因为你有一个 Web 应用程序,你将创建一个服务和一个部署。
首先验证你的 kubectl 是否已配置。在命令行中,键入以下内容
kubectl version
如果你没有看到带有客户端和服务器版本的回复,你需要 安装 和配置它。
如果你在 Windows 或 Mac 上运行,请确保它正在使用 Docker for Desktop 上下文,方法是运行以下命令
kubectl config use-context docker-for-desktop
现在你正在使用 Kubernetes!你可以通过键入以下内容来查看节点
kubectl get nodes
现在让我们运行该应用程序。创建一个名为 deployment.yaml 的文件,并将以下内容添加到其中,然后保存它
apiVersion: v1
kind: Service
metadata:
name: hello-python-service
spec:
selector:
app: hello-python
ports:
- protocol: "TCP"
port: 6000
targetPort: 5000
type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-python
spec:
selector:
matchLabels:
app: hello-python
replicas: 4
template:
metadata:
labels:
app: hello-python
spec:
containers:
- name: hello-python
image: hello-python:latest
imagePullPolicy: Never
ports:
- containerPort: 5000
这个 YAML 文件是 Kubernetes 指示你想要运行的内容的说明。它告诉 Kubernetes 以下内容
- 你想要一个暴露端口 6000 的负载均衡服务
- 你想要运行 hello-python 容器的四个实例
使用 kubectl 通过运行以下命令将 YAML 文件发送到 Kubernetes
kubectl apply -f deployment.yaml
你可以通过执行以下命令来查看 Pod 是否正在运行
kubectl get pods

现在导航到 https://127.0.0.1:6000,你应该会看到“Hello from Python!” 消息。
就是这样!该应用程序现在正在 Kubernetes 中运行!
更多信息
总结
在本演练中,我们容器化了一个应用程序,并使其在 Docker 和 Kubernetes 中运行。这个简单的应用程序只触及了可能性的表面(以及你需要学习的内容)。
下一步
如果你刚刚开始,并且此演练对你有所帮助,那么以下资源将是进一步扩展你的 Kubernetes 知识的良好下一步
- 微服务、Docker 和 Kubernetes 简介 - James Quigley 的 55 分钟视频
- 这是一个很好的起点,因为它提供了比我在这里提供的更多信息。
- 使用 Docker 和 Kubernetes 容器化你的应用程序 - Gabriel N Schenker 博士的免费电子书
- 这是我最喜欢的关于 Docker 和 Kubernetes 的书。
- Kubernetes 学习路径:从零到英雄的 50 天 Kubernetes 之旅 - 在微软网站上
- 这是一个 10 页的 PDF,其中包含大量视频链接(与 Brendan Burns 一起)、文档站点以及一个非常好的 Azure Kubernetes 服务研讨会。
如何在 Docker Desktop 中启用 Kubernetes
安装 Docker Desktop 后,打开设置

选择左侧的 Kubernetes 菜单项,并验证是否选中了 启用 Kubernetes。如果未选中,请选中它,然后单击右下角的应用按钮
