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

Kompose 帮助开发者将 Docker Compose 文件迁移到 Kubernetes

我很高兴地宣布,Kompose,一个帮助开发者将 Docker Compose 应用迁移到 Kubernetes 的转换工具,已从Kubernetes 孵化器毕业,正式成为项目的一部分。

自 2016 年 6 月 27 日首次提交以来,Kompose 已发布 13 个版本,累计 851 次提交,自项目成立以来已新增 21 位贡献者。我们的工作始于 Skippbox(现为Bitnami的一部分),并得到了 Google 和 Red Hat 的贡献而发展壮大。

Kubernetes 孵化器让来自不同公司的贡献者互相了解,并在 Kubernetes 贡献者和维护者的指导下有效协作。我们的孵化期促成了这个对 Kubernetes 生态系统来说全新且有用的工具的开发和发布。

我们从最初的 Docker Compose 文件创建了一个可靠、可扩展的 Kubernetes 环境。我们努力将尽可能多的 key 转换为其等效的 Kubernetes 对应物。运行一个命令即可在 Kubernetes 上启动并运行:kompose up

没有社区的反馈和贡献,我们不可能做到这一点!

如果你还没有在 GitHub 上尝试Kompose,快去试试吧!

Kubernetes guestbook

Kubernetes 的首选示例是著名的guestbook,我们将其作为转换的基础。

这是来自官方kompose.io站点的一个示例,从一个简单的 Docker Compose文件开始)。

首先,我们将获取文件

$ wget https://raw.githubusercontent.com/kubernetes/kompose/master/examples/docker-compose.yaml

你可以先部署到 Docker Compose 进行测试

$ docker-compose up -d

Creating network "examples\_default" with the default driver

Creating examples\_redis-slave\_1

Creating examples\_frontend\_1

Creating examples\_redis-master\_1

当你准备好部署到 Kubernetes 时

$ kompose up


We are going to create Kubernetes Deployments, Services and PersistentVolumeClaims for your Dockerized application.


If you need different kind of resources, use the kompose convert and kubectl create -f commands instead.


INFO Successfully created Service: redis          

INFO Successfully created Service: web            

INFO Successfully created Deployment: redis       

INFO Successfully created Deployment: web         


Your application has been deployed to Kubernetes. You can run kubectl get deployment,svc,pods,pvc for details

查看Kompose 可以执行的其他示例

转换为其他 Kubernetes 控制器

Kompose 也可以通过使用 flag 转换为特定的 Kubernetes 控制器

$ kompose convert --help  

Usage:

  kompose convert [file] [flags]


Kubernetes Flags:

      --daemon-set               Generate a Kubernetes daemonset object

  -d, --deployment               Generate a Kubernetes deployment object

  -c, --chart                    Create a Helm chart for converted objects

      --replication-controller   Generate a Kubernetes replication controller object

…

例如,我们将guestbook示例转换为 DaemonSet

$ kompose convert --daemon-set

INFO Kubernetes file "frontend-service.yaml" created

INFO Kubernetes file "redis-master-service.yaml" created

INFO Kubernetes file "redis-slave-service.yaml" created

INFO Kubernetes file "frontend-daemonset.yaml" created

INFO Kubernetes file "redis-master-daemonset.yaml" created

INFO Kubernetes file "redis-slave-daemonset.yaml" created

Kompose 1.0 主要特性

随着我们的毕业,Kompose 1.0.0 版本也随之发布,以下是新特性

  • Docker Compose Version 3:Kompose 现已支持 Docker Compose Version 3。新的 key,例如 'deploy',现可转换为其等效的 Kubernetes 对应物。
  • Docker Push 和 Build 支持:当你 docker-compose.yaml 文件中提供了 'build' key 时,Kompose 将自动构建镜像并将其推送到相应的 Docker 仓库,供 Kubernetes 使用。
  • 新增 Key:随着版本 3 支持的加入,现已支持 pid 和 deploy 等新 key。有关 Kompose 支持的完整详细信息,请查看我们的转换文档
  • Bug 修复:每个版本我们都会修复转换时与边缘情况相关的任何 Bug。此版本修复了与目标名称中包含 './' 的 volume 转换相关的问题。

未来展望?

随着开发的持续推进,我们将努力为所有未来和当前的 Docker Compose 版本转换尽可能多的 Docker Compose key,将每个 key 转换为其等效的 Kubernetes 对应物。所有未来版本都将向后兼容。