如何使用 Okteto 在 Kubernetes 上部署 Python 应用程序

游客2024-06-20 04:18:54

介绍

Okteto 是一个开发平台,用于简化 Kubernetes 应用程序的开发过程。它允许开发人员直接在 Kubernetes 集群中构建和测试他们的应用程序,而无需设置复杂的本地开发环境。Okteto 支持对在 Kubernetes 集群中运行的应用程序进行实时更新,使开发人员能够实时查看其代码更改,而无需重新构建或重新部署其应用程序。

在本教程中,您将创建一个 Python 应用程序,并使用 Okteto 将其部署在 Kubernetes 上。

先决条件

在开始本教程之前,需要满足以下条件:Before you begin this tutorial, you'll need the following:

  • Kubernetes 1.28 集群。在本教程中,设置将使用至少具有 3 个节点(每个节点 4 个 CPU 和 16GB)的 DigitalOcean Kubernetes 集群

  • kubectl 已安装并配置为与群集通信。

  • Docker Hub 帐户。

  • 在本地计算机上运行的 Docker。

  • 使用Okteto必须获得许可证。注册 Okteto 30 天免费试用版以获得许可证密钥。

  • Helm 包管理器安装在本地计算机上。为此,请完成如何使用 Helm 3 包管理器在 Kubernetes 集群上安装软件教程的步骤 1。

  • 指向 Nginx Ingress 使用的负载均衡的完全注册域名。您需要创建一个 A 包含名称 * 和负载均衡器 IP 的记录。

  • 步骤 1 - 创建 Python 应用程序

    首先,您需要确保 Python 安装在 Ubuntu 系统上。您可以通过打开终端并键入以下内容来检查:

    --version

    如果安装了 Python,则此命令将显示 Python 的版本。如果没有,您可以使用以下命令安装它:

    sudoaptinstall-y

    接下来,创建一个目录来存储应用程序代码和其他配置。

    mkdir my-app

    接下来,导航到应用程序目录并创建一个虚拟环境来隔离项目依赖项。

    cd my-app
  • python3
  • -m
  • venv python-env
  • 接下来,使用以下命令激活虚拟环境。

    source python-env/bin/activate

    接下来,为应用程序创建新的 Python 文件。例如,创建一个简单的 app.py 文件:

    nano app.py

    添加以下代码:

    import Flask
  • app
  • =
  • 烧瓶
  • __name__)
  • @app.route
  • '/'
  • def hello
  • 返回“你好,这是一个简单的 Python 应用程序!如果
  • __name__
  • ==
  • '__main__'
  • app.run
  • debug
  • =
  • True,
  • 主机='0.0.0.0'

    接下来,安装 Flask Web 框架。

    install flask

    现在,使用以下命令运行 Python 应用程序。


    您将看到以下输出。

    Output(0.0.0.0)
  • * 在 http://127.0.0.1:5000 上运行 * 在 http://172.20.10.2:5000 上运行 按 CTRL+C 退出 * 使用
  • 统计数据
  • 重新启动 * 调试器处于活动状态
  • * 调试器密码:311-959-468
  • 现在 Flask 应用程序正在本地运行,您可以使用以下命令 curl对其进行验证:

    curl-X-H"Content-Type: application/json" http://localhost:5000

    您应该会从 Flask 应用程序收到以下响应。

    OutputHello, This is a simple Python App!

    完成项目处理后,可以通过运行以下命令停用虚拟环境:

    deactivate

    此时,您已经创建了一个 Python 应用程序并在本地对其进行了测试。

    步骤 2 - Dockerize Python 应用程序

    Docker化 Python 应用程序涉及创建一个 Docker 映像,其中包含运行应用程序所需的 Python 环境和依赖项。

    首先,创建一个在 Python 应用程序的根目录中命名 Dockerfile 的文件。

    nano Dockerfile

    添加以下内容:

    # Use an official Python runtime as a parent image
  • 来自 python:3.8-slim
  • # 设置容器中的工作目录
  • WORKDIR /app
  • # 将当前目录内容复制到容器中 /app
  • 添加
  • .
  • /app
  • # 安装 requirements.txt 中指定的任何需要的依赖项
  • RUN pip
  • 安装
  • 烧瓶
  • # 使端口 5000 在此容器之外的世界可用
  • 曝光
  • 5000# 定义环境变量
  • 环境名称 DockerizedPythonApp
  • # 容器启动时运行 app.py
  • CMD
  • [“python3”
  • “./app.py”]

    在此 Dockerfile 中:

    • FROM python:3.8-slim:指定要使用的基础映像。您正在使用安装了 Python 3.8 的官方 Python 映像。

    • WORKDIR /app:将容器中的工作目录设置为 /app

    • ADD . /app:将当前目录的内容复制到容器 /app 的目录中。

    • RUN pip install flask:安装 Flask 框架。

    • EXPOSE 5000:公开端口 5000 以允许传入连接。

    • CMD ["python3", "app.py"]:指定容器启动时要运行的命令。在本例中,它运行 app.py.

    • 现在,运行以下命令,根据 Dockerfile 中的说明生成映像。

      docker-t.

      生成 Docker 映像后,可以使用生成的映像在容器中运行应用程序:

      docker-dit-p5000:5000 my-app:latest

      此命令从 my-app 映像运行容器,并将容器端口映射到主机端口 5000

      可以使用该命令验证正在运行的 docker ps 应用容器。

      dockerps

      输出将是:

      OutputCONTAINER ID   IMAGE           COMMAND              CREATED         STATUS         PORTS                                       NAMES
    • 761c54c77411 my-app:latest  
    • “python3 ./app.py”
    •  
    • 3
    • 秒前 向上
    • 3
    • 秒  
    • 0.0.0.0
    • :5000-
    • >5000
    • /tcp, :::5000-
    • >5000
    • /tcp pedantic_wescoff
    • 打开 Web 浏览器或使用 curl 使用 URL http://your-server-ip:5000 访问应用程序。您应该会看到一条消息 Hello, This is a simple Python App! ,指示您的 Python 应用程序正在 Docker 容器内运行。

      到目前为止,您已经成功地对 Python 应用程序进行了 docker化。

      步骤 3 - 将 Python Docker 映像推送到 DockerHub 注册表

      首先,您需要有一个 DockerHub 帐户。如果没有,可以在 DockerHub 网站上创建它。

      使用命令 docker login 登录 Docker Hub。系统将提示你输入 Docker Hub 用户名和密码。

      docker

      此命令的输出为:

      Outputhead over to https://hub.docker.com to create one.
    • 用户名: username@gmail.com 密码: 警告
    • 您的密码将以未加密的方式存储
    • /root/.docker/config.json 中。 配置凭据帮助程序以删除此警告。看
    • https://docs.docker.com/engine/reference/commandline/login/#credentials 店
    • 登录成功
    • 在将映像推送到 Docker Hub 之前,您还需要使用 Docker Hub 用户名和所需的存储库名称对其进行标记。

      docker tag my-app yourusername/my-app:latest

      现在,您可以使用该 docker push 命令将 Docker 映像推送到 Docker Hub。

      docker push yourusername/my-app:latest

      推送映像后,可以通过使用 Docker Hub CLI 搜索映像来验证它在 Docker Hub 上是否可用。

      docker search yourusername/my-app

      Python 应用 Docker 映像现已在 Docker Hub 上提供,可以由其他人拉取或部署到各种环境。

      步骤 4 - 创建 Kubernetes 清单以部署 Python 应用程序

      现在,您需要使用 Okteto 创建一个 Kubernetes 清单文件,以定义名为 my-app的应用程序的部署、服务和入口资源。

      nano k8s.yaml

      将以下配置添加到文件中。

      apiVersion: apps/v1
      kind
    • 部署
    • 元数据
    •  
    • 名称My-App产品规格
    •  
    • 选择器matchLabels
    •  
    • 应用my-app
    •  
    • 模板元数据
    •  
    • 标签应用my-app产品规格
    •  
    • 容器
    •  
    • -
    • 图片
    • YouruserName/
    • my-app名称My-App---api版本
    • v1
    • kind
    • 服务
    • 元数据
    •  
    • 名称My-App产品规格
    •  
    • 类型
    • ClusterIP  
    • 端口
    •  
    • -
    • 名称:“my-app”端口5000
    •  
    • 选择器应用my-app---api版本
    • networking.k8s.io/v1
    • kind
    • 入口
    • 元数据
    •  
    • 名称My-App
    •  
    • 注释dev.okteto.com/generate-host
    • my-app产品规格
    •  
    • 活动规则-
    • 网址路径
    •  
    • -
    • 后端
    •  
    • 服务名称My-App端口
    •  
    • 货号
    • 5000路径
    • /
    • pathType
    • 特定于实现
    • 上面的文件部署了一个名为 using Okteto 的应用程序 my-app ,通过端口 5000上的 ClusterIP 服务在内部公开它,并设置一个 Ingress 资源来将 HTTP 流量路由到应用程序。特定于 Okteto 的注释用于启用 Okteto 提供的某些功能,例如自动生成主机名。

      第 5 步 - 使用 Helm 安装 Okteto

      首先,您需要将 Okteto Helm 存储库添加到您的 Helm 客户端。

      add okteto https://charts.okteto.com

      添加 Okteto Helm 存储库后,应更新 Helm 存储库,以确保您拥有有关可用图表的最新信息:

      helm repo update

      接下来,为 Okteto 创建一个 config.yaml

      nano config.yaml

      添加您的 Okteto 许可证密钥、子域和其他配置,如下所示:

      license: INSERTYOURKEYHERE
      子域
    • okteto.example.com
    • 构建套件
    •  
    • 持久性已启用True注册表
    •  
    • 存储文件系统
    •  
    • 持久性已启用True

      注意:将许可证密钥替换为您的有效 Okteto 许可证密钥和 okteto.example.com 您的域名。

      现在,使用 config.yaml 配置文件安装最新版本的Okteto。

      install-f--namespace okteto --create-namespace

      安装 Okteto 后,您将获得以下输出。

      OutputNAME: okteto
    • 上次部署时间:
    • 2024 年 3
    • 12
    • 日星期二
    • 20
    • :27:21 NAMESPACE: okteto 状态:已部署 修订版:
    • 1
    • 测试套件:无 笔记: 恭喜
    • Okteto 安装成功
    • 按照以下步骤完成域配置:
    • 1
    • . 创建一个通配符 A 记录
    • “*.okteto.example.com”
    • ,将其指向 Okteto NGINX 入口控制器 External-IP:   $ kubectl get
    • service
    • -l=
    • app.kubernetes.io/name
    • =
    • ingress-nginx,app.kubernetes.io/component
    • =
    • controller
    • --namespace=
    • okteto
    • 2
    • . 通过
    • https://okteto.okteto.example.com/login #token=88f8cc11访问您的 Okteto 实例

      注意:记住上面输出中的个人访问令牌 88f8cc11 。您将需要它来验证 Okteto。

      等待一段时间,然后获取 DigitalOcean 动态分配给您刚刚安装并配置为 Okteto 一部分的 NGINX Ingress 的 IP 地址:

      service-l=app.kubernetes.io/name=ingress-nginx,app.kubernetes.io/component=--namespace=okteto

      您将看到以下输出。

      OutputNAME                              TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)                      AGE
    • okteto-ingress-nginx-controller 负载平衡器  
    • 10.101.31.239
    •  
    • 45.76.14.191
    •  
    • 80
    • :31150/TCP,443:31793/TCP 3m21s
    • 您需要获取该 EXTERNAL-IP 地址并将其添加到您选择使用的域的 DNS 中。这是通过创建 A 名为 *的记录来完成的。

      现在,打开您的 Web 浏览器并访问您的 Okteto 实例 https://okteto.okteto.example.com/login#token=88f8cc11。

      步骤 6 - 安装和配置 Okteto CLI

      Okteto CLI 是一个开源命令行工具,允许您直接在 Kubernetes 上开发应用程序。

      您可以使用 在 Linux 和 macOS curl上安装 Okteto CLI。打开终端并运行以下命令:

      sudocurl-sSfL|sh

      安装完成后,您可以通过运行以下命令来验证 Okteto CLI 是否已正确安装:

      okteto version

      此命令将显示系统上安装的Okteto CLI版本。

      Output2.25

      接下来,您需要使用您的个人访问令牌通过 Okteto CLI 进行身份验证。

      --token 88f8cc11 --insecure-skip-tls-verify

      其输出将是:

      Output✓  Using okteto-admin @ okteto.okteto.example.com

      接下来,运行以下命令以验证是否配置了 Okteto CLI。

      okteto context list

      这将给出以下输出:

      OutputName                                      Namespace     Builder                                 Registry
    • https://okteto.okteto.example.com * okteto-admin tcp://buildkit.okteto.example.com:443 registry.okteto.example.com vke-4b7aaaa6-78fa-4a19-9fb3-cf7b8c1ec678 默认      
    • docker
    •                                  -
    • 第 7 步 - 创建您的 Okteto 清单

      要开始开发 Python 应用程序,您需要创建一个 Okteto 清单文件并定义开发环境的配置。

      让我们为一个简单的 Python 应用程序创建一个 okteto.yaml 文件。

      nano okteto.yaml

      添加以下配置。

      deploy:
    •  
    • -
    • kubectl 应用
    • -
    • f k8s.yaml
    • 开发
    •  
    • 我的应用程序命令
    • bash
    • 环境
    •  
    • -
    • FLASK_ENV=发展
    • 同步
    •  
    • -
    • .
    • /应用程序
    • 反转
    •  
    • -
    • 9000
    • 9000
    •  
    • -
    • /根/.cache/pip
    • 在上面的文件中,

      • deploy:本部分定义部署配置。当您运行 okteto up or okteto deploy时,Okteto 将执行 kubectl apply -f k8s.yaml 命令以部署文件中定义 k8s.yaml 的 Kubernetes 资源。这允许您将部署配置与开发环境配置分开指定。

      • command: bash:指定开发环境启动时要运行的命令。

      • environment:指定要在开发环境中设置的环境变量。在本例中,它设置为 FLASK_ENV 开发。

      • sync:指定要在本地计算机和开发环境之间同步的文件夹。它将当前目录 (.)/app 开发环境中的目录同步。

      • reverse:指定端口转发规则,用于将开发环境中的端口公开到本地计算机。在这种情况下,它会将端口 9000 从开发环境转发到本地计算机上的端口 9000

      • volumes:指定要挂载到开发环境中的其他卷。在这种情况下,它会将可能用于缓存 pip 包的目录装载 /root/.cache/pip 到开发环境中。

      • 现在,使用以下命令将 Python 应用程序部署到 Kubernetes 集群。

        okteto deploy

        成功部署后,你将看到以下输出。

        Outputdeployment.apps/my-app created
      • 已创建服务/我的应用程序 ingress.networking.k8s.io/my-app 创建 i
      • “Okteto”
      • 没有可用的端点
      • 点击此
      • 链接
      • 详细了解如何
      • 应用程序创建公共终结点:    https://www.okteto.com/docs/cloud/ssl/ ✓ 开发环境
      • “Okteto”
      • 成功部署 我运行
      • “okteto up”
      • 以激活您的开发容器
      • 接下来,返回您的 Web 浏览器并刷新 Okteto 仪表板。您将看到已部署的应用程序:

        您还可以使用 URL https://my-app-okteto-admin.okteto.example.com 访问 Python 应用程序。

        步骤 8 - 直接在 Kubernetes 上开发 Python 应用程序

        在本节中,您将使用该 okteto up 命令直接在 Kubernetes 上部署 Python 应用程序。此命令会将本地代码与开发环境同步。您可以在本地计算机上使用首选的 IDE 或文本编辑器修改代码,更改将自动与 Kubernetes 中的开发环境同步。

        让我们使用 Okteto 启动开发环境:

        okteto up

        此命令将根据文件中指定的 okteto.yaml 配置创建开发环境。

        Outputi  Using okteto-admin @ okteto.okteto.example.com as context
      • 我  
      • “Okteto”
      • 已经部署。要重新部署,请运行
      • “okteto deploy”
      • “okteto up --deploy”
      • i 构建部分未在您的 okteto 清单
      • 定义 ✓ 成功附加持久卷 ✓ 成功拉取图像 ✓ 文件同步    背景:okteto.okteto.example.com    命名空间: okteto-admin    名称:my-app    反转:  
      • 9000
      • <
      • -
      • 9000
      • root@my-app-okteto-7767588c8d-ndzj7:/app
      • #

        接下来,运行 Python 应用程序:


        您将看到以下输出。

        Output'app'
      • * 调试模式:开启 警告:这是一台开发服务器。请勿在生产部署
      • 使用它。请改用生产 WSGI 服务器。 * 在所有地址
      • 上运行 (0.0.0.0
      • * 在 http://127.0.0.1:5000 上运行 * 在 http://10.244.97.92:5000 上运行 按 CTRL+C 退出 * 使用
      • 统计数据
      • 重新启动 * 调试器处于活动状态
      • * 调试器密码:126-620-675
      • 现在,编辑您的 app.py 应用程序文件:

        nano app.py

        修改以下行:

            return"Hello, This is a simple Python App Deployed on Kubernetes"

        保存并关闭文件。Okteto 将自动检测代码更改并立即将其应用于 Kubernetes。

        返回 Web 浏览器并重新加载 Python 应用程序的页面。您将在以下屏幕上看到修改后的应用程序。

        结论

        在本教程中,你已创建一个基本的 Python 应用程序,并使用 Okteto 将其部署在 Kubernetes 集群上。Okteto 能够将本地代码更改与开发环境实时同步,从而实现快速开发迭代和对代码更改的即时反馈。总体而言,Okteto 使开发人员能够专注于构建高质量的 Python 应用程序,而无需担心 Kubernetes 基础设施的复杂性。