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

开始使用 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 文件,你将看到该应用程序打印出一个 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 库。

在本地运行

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

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 将会

  1. 从 Docker Hub 获取版本 3.7 的官方 Python 基础镜像
  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://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
Pod listing

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

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

更多信息

总结

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

下一步

如果你刚刚开始,并且此演练对你有所帮助,那么以下资源将是进一步扩展你的 Kubernetes 知识的良好下一步

如何在 Docker Desktop 中启用 Kubernetes

安装 Docker Desktop 后,打开设置

Docker settings menu

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

Kubernetes tab