本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。

开始使用 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

切换到应用程序目录

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 服务器,您可以通过导航到 https://: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 获取官方 Python 基础镜像 3.7 版本。
  2. 在镜像中,创建一个名为 app 的目录。
  3. 将工作目录设置为该新的 app 目录。
  4. 将本地目录的内容复制到镜像中的新文件夹。
  5. 运行 pip 安装程序(就像我们之前做的那样),将所需组件拉入镜像。
  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

现在导航到 https://: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
Pod listing

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

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

更多信息

总结

在此演练中,我们容器化了一个应用程序,并使其在 Docker 和 Kubernetes 中运行。这个简单的应用程序只是冰山一角(以及您需要学习的内容)。

后续步骤

如果您刚刚开始,并且本教程对您有用,那么以下资源应该是您进一步扩展 Kubernetes 知识的良好下一步

如何在 Docker Desktop 中启用 Kubernetes

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

Docker settings menu

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

Kubernetes tab