Kubernetes Kompose 用户指南:从 Docker Compose 到 Kubernetes 的平滑迁移
kompose Convert Compose to Kubernetes 项目地址: https://gitcode.com/gh_mirrors/ko/kompose
前言
在现代容器化应用开发中,Docker Compose 是开发者常用的工具之一,用于定义和运行多容器应用。然而,当应用需要从开发环境迁移到生产环境时,Kubernetes 往往成为更合适的选择。这就是 Kompose 工具的用武之地——它能够将 Docker Compose 文件转换为 Kubernetes 资源定义,大大简化了迁移过程。
Kompose 基础转换示例
Kompose 支持两种主要的容器编排平台:Kubernetes 和 OpenShift。默认情况下,Kompose 会生成 Kubernetes 资源定义。
基本转换命令
kompose -f compose.yaml convert
这个简单的命令会将你的 compose.yaml
文件转换为 Kubernetes 资源定义文件。
多文件支持
如果你的应用配置分散在多个 Compose 文件中,Kompose 也能处理:
kompose -f compose.yaml -f override.yaml convert
或者通过环境变量指定:
COMPOSE_FILE="compose.yaml override.yaml" kompose convert
高级转换选项
控制器类型选择
Kompose 允许你指定生成的 Kubernetes 控制器类型:
kompose convert --controller daemonSet
支持的控制器类型包括:
- Deployment(默认)
- DaemonSet
- ReplicationController
- StatefulSet
OpenShift 支持
如果你的目标是 OpenShift 平台,只需指定 provider 参数:
kompose --provider openshift --file compose.yaml convert
使用标签进行高级配置
Kompose 提供了一套丰富的标签系统,允许你在 Compose 文件中直接定义 Kubernetes 特有的配置,而无需手动修改生成的 YAML 文件。
常用标签示例
-
控制器类型指定
services: web: image: nginx labels: kompose.controller.type: deployment
-
暴露服务
services: web: image: nginx ports: - "80:80" labels: kompose.service.expose: "example.com"
-
健康检查配置
services: api: image: my-api labels: kompose.service.healthcheck.liveness.http_get_path: /health kompose.service.healthcheck.liveness.http_get_port: 8080
-
存储卷配置
services: db: image: mysql volumes: - db-data:/var/lib/mysql labels: kompose.volume.size: 10Gi kompose.volume.storage-class-name: fast
重启策略详解
Kompose 会根据 Compose 文件中的 restart
策略来决定 Kubernetes 资源的创建方式:
| Compose restart
| Kubernetes 对象 | Pod restartPolicy
| |-------------------|----------------|---------------------| | (空) | 控制器对象 | Always | | always | 控制器对象 | Always | | unless-stopped | 控制器对象 | Always | | on-failure | Pod/CronJob | OnFailure | | no | Pod/CronJob | Never |
示例:一次性任务
services:
calculator:
image: perl
command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"]
restart: "no"
镜像构建与推送
Kompose 可以自动构建镜像并推送到注册表:
kompose --build --push-image=true convert
认证配置
Kompose 使用 Docker 的认证配置(通常位于 ~/.docker/config.json
)。在 macOS 上,如果遇到认证问题,可能需要:
- 从
config.json
中移除"credsStore": "osxkeychain"
- 重新登录 Docker
- 在 Docker Desktop 设置中取消勾选 "Securely store Docker logins in macOS keychain"
自定义构建命令
如果你不使用 Docker 作为构建工具,可以指定自定义命令:
kompose convert --build-command="podman build" --push-command="podman push"
注意事项
-
命名限制:Kubernetes 不允许在对象名称中使用下划线(
_
)或点号(.
),Kompose 会自动将其转换为连字符(-
) -
存储卷策略:当服务使用存储卷时,Kompose 会将部署策略从默认的 "RollingUpdate" 改为 "Recreate",以避免多个实例同时访问同一卷
-
生产环境建议:虽然
kompose.controller.port.expose
可以创建 hostPort,但在生产环境中不推荐使用这种方式
结语
Kompose 作为 Docker Compose 到 Kubernetes 的桥梁,极大地简化了应用从开发到生产的迁移过程。通过本文介绍的各种配置选项和标签系统,你可以灵活地控制转换过程,生成符合生产要求的 Kubernetes 资源定义。
记住,虽然 Kompose 提供了便捷的转换方式,但了解生成的 Kubernetes 资源定义仍然很重要,这有助于你在生产环境中进行更精细的调整和优化。
kompose Convert Compose to Kubernetes 项目地址: https://gitcode.com/gh_mirrors/ko/kompose
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考