这篇文章已超过一年。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已失效。

Kubernetes 入门 (使用 Python)

那么,你知道你想在 Kubernetes 中运行你的应用程序,但不知道从何开始。或者你可能已经开始着手,但仍然不知道自己有哪些知识盲点。在这篇博客中,你将逐步了解如何将应用程序容器化并在 Kubernetes 中运行。

本教程假定你是一名开发者,或者至少熟悉命令行(最好是 bash shell)。

我们将做什么

  1. 获取代码并在本地运行应用程序
  2. 创建镜像并在 Docker 中运行应用程序
  3. 创建部署并在 Kubernetes 中运行应用程序

前提条件

将应用程序容器化

在本节中,你将获取一些源代码,验证它在本地运行正常,然后创建应用程序的 Docker 镜像。示例应用程序是一个非常简单的 Flask Web 应用程序;如果你想在本地测试它,你需要安装 Python。否则,你可以跳到“创建 Dockerfile”部分。

获取应用程序代码

使用 git 将仓库克隆到本地机器

git clone https://github.com/JasonHaley/hello-python.git

切换到 app 目录

cd hello-python/app

此目录中只有两个文件。如果你查看 main.py 文件,你会看到应用程序打印出一条问候消息。你可以在 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 库。

本地运行

使用以下命令手动运行安装程序和应用程序

pip install -r requirements.txt
python main.py

这将启动一个开发 Web 服务器来托管你的应用程序,你可以通过导航到 http://localhost: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 将执行以下操作:

  1. 从 Docker Hub 获取版本 3.7 的官方 Python 基础镜像
  2. 在镜像中,创建一个名为 app 的目录。
  3. 将工作目录设置为新的 app 目录。
  4. 将本地目录的内容复制到镜像中的这个新文件夹中。
  5. 运行 pip 安装程序(就像我们之前做的那样),将 requirements 拉取到镜像中。
  6. 通知 Docker 容器监听端口 5000。
  7. 配置容器启动时使用的启动命令。

创建镜像

在你的命令行或 shell 中,在 hello-python/app 目录中,使用以下命令构建镜像

docker build -f Dockerfile -t hello-python:latest .

这将执行上面列出的七个步骤并创建镜像。要验证镜像是否已创建,请运行以下命令

docker image ls
Docker image listing

应用程序现在已被容器化,这意味着它可以在 Docker 和 Kubernetes 中运行了!

在 Docker 中运行

在跳入 Kubernetes 之前,让我们验证它是否可以在 Docker 中运行。运行以下命令让 Docker 在容器中运行应用程序并将其映射到端口 5001

docker run -p 5001:5000 hello-python

现在导航到 http://localhost:5001,你应该会看到“Hello from Python!”消息。

更多信息

在 Kubernetes 中运行

你终于准备好在 Kubernetes 中运行应用程序了。因为你有一个 Web 应用程序,所以你将创建一个 Service 和一个 Deployment。

首先验证你的 kubectl 已配置。在命令行中,输入以下内容

kubectl version

如果你没有看到 Client 和 Server 版本回复,你需要安装和配置它。

如果你在 Windows 或 Mac 上运行,请通过运行以下命令确保它正在使用 Docker 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 的负载均衡 Service
  • 你想要运行四个 hello-python 容器实例

使用 kubectl 通过运行以下命令将 YAML 文件发送到 Kubernetes

kubectl apply -f deployment.yaml

如果你执行以下命令,你可以看到 Pod 正在运行

kubectl get pods
Pod listing

现在导航到 http://localhost:6000,你应该会看到“Hello from Python!”消息。

就是这样!应用程序现在已在 Kubernetes 中运行!

更多信息

总结

在本教程中,我们将一个应用程序容器化,并在 Docker 和 Kubernetes 中运行起来。这个简单的应用程序只是触及了可能性(以及你需要学习的内容)的表面。

下一步

如果你刚入门,并且本教程对你有帮助,那么以下资源应该是你进一步扩展 Kubernetes 知识的良好下一步选择

如何在 Docker Desktop 中启用 Kubernetes

安装 Docker Desktop 后,打开“设置”

Docker settings menu

选择左侧的 Kubernetes 菜单项,并验证 Enable Kubernetes 是否已选中。如果未选中,请选中它,然后点击右下角的 Apply 按钮

Kubernetes tab