Kubernetes入门(使用Python)

作者:Jason Haley(独立顾问)

因此,您知道要在Kubernetes中运行应用程序,但不知道从何处开始。也许您正在起步,但仍然不知道自己不知道什么。在此博客中,您将逐步了解如何对应用程序进行容器化并使其在Kubernetes中运行。

本演练假定您是开发人员,或者至少对命令行感到满意(最好是bash shell)。

我们会做什么

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

先决条件

容器化应用程序

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

获取应用程序代码

使用git将存储库克隆到本地计算机:

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

转到应用程序目录:

cd hello-python/app

此目录中只有两个文件。如果您查看main.py文件,则会看到该应用程序打印出问候消息。您可以在 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所需的软件包列表,并且将由 点子 安装Flask库。

注意: When you start writing more advanced Python, you'll find it's not always recommended to use 点子 安装 and may want to use virtualenv (or pyenv) to 安装 your dependencies in a virtual environment.

在本地运行

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

点子 安装 -r requirements.txt
python main.py

This will start a development web server hosting your application, which you will be able to see by navigating to http://localhost:5000. Because port 5000 is the default port for the development server, we didn’t need to specify it.

创建一个Dockerfile

既然您已经验证了源代码的工作原理,那么将应用程序容器化的第一步就是创建一个Dockerfile。

在hello-python / app目录中,创建一个具有以下内容的名为Dockerfile的文件并将其保存:

FROM python:3.7

RUN mkdir /app
WORKDIR /app
ADD . /app/
RUN 点子 安装 -r requirements.txt

EXPOSE 5000
CMD ["python", "/app/main.py"]

该文件是Docker用来构建映像的一组指令。对于这个简单的应用程序,Docker将:

  1. 取得官方 Python基础图片 适用于Docker Hub的3.7版。
  2. 在图像中,创建一个名为app的目录。
  3. 将工作目录设置为该新应用程序目录。
  4. 将本地目录的内容复制到该新文件夹中。
  5. 运行pip安装程序(就像我们之前所做的一样)将需求拉入映像。
  6. 通知Docker容器在端口5000上侦听。
  7. 配置启动命令以在容器启动时使用。

建立影像

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

docker build -f Dockerfile -t hello-python:latest .
注意: 在此示例中,我使用了:latest标记,如果您不熟悉它的含义,则可能需要阅读 Docker:最新的困惑 .

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

docker image ls

Docker映像清单

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

在Docker中运行

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

docker run -p 5001:5000 hello-python

现在导航到http:// localhost:5001,您应该看到“ Hello form 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

如果执行以下命令,则可以看到容器正在运行:

kubectl get pods

广告连播列表

现在,浏览至http:// localhost:6000,您应该会看到“ Hello form Python!”。信息。

而已!该应用程序现在正在Kubernetes中运行!

更多信息

概要

在本演练中,我们将一个应用程序容器化,并使其在Docker和Kubernetes中运行。这个简单的应用程序仅能触及所有可能的内容(以及您需要学习的内容)。

下一步

如果您只是入门,而本演练对您很有用,那么以下资源将是您进一步扩展Kubernetes知识的良好下一步:

如何在Docker桌面中启用Kubernetes

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

Docker设置菜单

选择 Kubernetes 左侧的菜单项,并验证 启用Kubernetes 被检查。如果不是, 检查 然后点击 应用 右下角的按钮:

Kubernetes选项卡