介绍
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
接下来,使用以下命令激活虚拟环境。
source python-env/bin/activate
接下来,为应用程序创建新的 Python 文件。例如,创建一个简单的 app.py
文件:
nano app.py
添加以下代码:
import Flask
接下来,安装 Flask Web 框架。
install flask
现在,使用以下命令运行 Python 应用程序。
您将看到以下输出。
Output(0.0.0.0)
现在 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
在此 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
打开 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.
在将映像推送到 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/v1kind:
上面的文件部署了一个名为 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 许可证密钥和 okteto.example.com
您的域名。
现在,使用 config.yaml
配置文件安装最新版本的Okteto。
install-f--namespace okteto --create-namespace
安装 Okteto 后,您将获得以下输出。
OutputNAME: 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
您需要获取该 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
第 7 步 - 创建您的 Okteto 清单
要开始开发 Python 应用程序,您需要创建一个 Okteto 清单文件并定义开发环境的配置。
让我们为一个简单的 Python 应用程序创建一个 okteto.yaml
文件。
nano okteto.yaml
添加以下配置。
deploy:
在上面的文件中,
deploy
:本部分定义部署配置。当您运行okteto up
orokteto 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
接下来,返回您的 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
接下来,运行 Python 应用程序:
您将看到以下输出。
Output'app'
现在,编辑您的 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 基础设施的复杂性。