Kompose:从Docker-compose到Kubernetes的工具

编者注:今天的帖子由Skippbox的创始人Sebastien Goasguen发表,展示了一种新工具,可以从“ docker-compose”迁移到Kubernetes。

跳箱,我们开发了 共同 一种将Docker Compose应用程序自动转换为Kubernetes清单的工具。允许您使用单个kompose up命令在Kubernetes集群上启动Compose应用程序。我们非常高兴能向 Kubernetes孵化器。因此,这里有一个简短的介绍,以及促使我们进行开发的一些激励因素。

Docker对于开发人员来说是很棒的。它使每个人都可以快速开始使用已打包在Docker映像中并且可在Docker注册表中使用的应用程序。为了构建多容器应用程序,Docker开发了Docker-compose(又名Compose)。 Compose接收多容器应用程序的基于yaml的清单,并使用docker-compose up命令启动所有必需的容器。但是,Compose仅在本地或与Docker Swarm集群一起使用。

但是,如果您想使用Swarm以外的其他方式该怎么办?当然就像Kubernetes。

撰写格式不是定义分布式应用程序的标准。因此,您只需要在选择的容器协调器中重写应用程序清单即可。

我们将kompose视为向Docker用户公开Kubernetes原理以及轻松地从Docker Swarm迁移到Kubernetes的绝佳方法,以在生产环境中操作您的应用程序。

在整个夏天,Kompose在Red Hat的Tomas Kral和Suraj Deshmukh以及Google的Janet Kuo的帮助下找到了一种新设备。与我们自己的首席kompose开发人员Nguyen An-Tu一起,使kompose变得更加令人兴奋。我们向SIG应用程序中的Kubernetes孵化器提出了Kompose,并获得了Kubernetes总体社区的批准;您现在可以在 Kubernetes孵化器.

Kompose现在支持Docker-compose v2格式,最近增加了持久卷声明,以及每个pod多个容器。通过指定与默认Kubernetes不同的提供程序,它也可以用于OpenShift部署。 Kompose现在也可以在Fedora软件包中使用,我们希望在接下来的几周内可以在CentOS发行版中看到它。

共同是一个单个Golang二进制文件,您可以通过 在GitHub上发布。让我们跳过构建说明,直接进入示例。

让我们一起旋转吧!

Docker的留言簿应用程序

Guestbook应用程序已成为Kubernetes的典型示例。在Docker-compose格式中, 留言簿 可以用这个最小的文件开始:

version: "2"



services:

  redis-master:

    image: gcr.io/google\_containers/redis:e2e

    ports:

      - "6379"

  redis-slave:

    image: gcr.io/google\_samples/gb-redisslave:v1

    ports:

      - "6379"

    environment:

      - GET\_HOSTS\_FROM=dns

  前端:

    image: gcr.io/google-samples/gb-frontend:v4

    ports:

      - "80:80"

    environment:

      - GET\_HOSTS\_FROM=dns

它包含三个服务。 redis-master节点,一组redis-slave,可以对其进行缩放,并通过其DNS名称查找redis-master。还有一个PHP前端,该前端在端口80上公开。生成的应用程序允许您留下存储在redis集群中的短消息。

要在普通的Docker主机上使用docker-compose入门,请执行以下操作:

$ docker-compose -f docker-guestbook.yml up -d

Creating network "examples\_default" with the default driver

Creating examples\_redis-slave\_1

Creating examples\_frontend\_1

Creating examples\_redis-master\_1

到目前为止,到目前为止,这是普通的Docker使用情况。现在,让我们看看如何在Kubernetes上获得此功能而无需重新编写任何内容。

带“ 共同”的留言簿

Kompose当前具有上,下和转换三个主要命令。为了简单起见,在这里我们将展示一种用于启动Guestbook应用程序的用法。

与docker-compose类似,我们可以使用kompose up命令指向表示Guestbook应用程序的Docker-compose文件。像这样:

$ 共同 -f ./examples/docker-guestbook.yml up

We are going to create Kubernetes deployment and service for your dockerized application.

If you need more kind of controllers, use 'kompose convert' and 'kubectl create -f' instead.



INFO[0000] Successfully created service: redis-master

INFO[0000] Successfully created service: redis-slave

INFO[0000] Successfully created service: 前端

INFO[0000] Successfully created deployment: redis-master

INFO[0000] Successfully created deployment: redis-slave

INFO[0000] Successfully created deployment: 前端



Application has been deployed to Kubernetes. You can run 'kubectl get deployment,svc' for details.

共同自动将Docker-compose文件转换为Kubernetes对象。默认情况下,它每个创建一个部署和一个服务 撰写 服务。此外,它会自动检测您当前的Kubernetes端点并在其上创建资源。一组标志可用于生成复制控制器,副本集或后台驻留程序集,而不是部署。

就是这样!无需执行任何操作,转换将自动发生。
现在,如果您现在已经有点Kubernetes,那么您已经熟悉了客户端kubectl,并且可以检查在集群上创建的内容。

$ kubectl get pods,svc,deployments

NAME                             READY        STATUS        RESTARTS     AGE

frontend-3780173733-0ayyx        1/1          Running       0            1m

redis-master-3028862641-8miqn    1/1          Running       0            1m

redis-slave-3788432149-t3ejp     1/1          Running       0            1m

NAME                             CLUSTER-IP   EXTERNAL-IP   PORT(S)      AGE

frontend                         10.0.0.34    \<none\>        80/TCP       1m

redis-master                     10.0.0.219   \<none\>        6379/TCP     1m

redis-slave                      10.0.0.84    \<none\>        6379/TCP     1m

NAME                             DESIRED      CURRENT       UP-TO-DATE



AVAILABLE   AGE

frontend                         1            1             1            1           1m

redis-master                     1            1             1            1           1m

redis-slave                      1            1             1            1           1m

确实,您看到了三个服务,三个部署以及生成的三个Pod。要快速访问该应用程序,请访问 前端 在本地服务并享受Guestbook应用程序,但这一次是从Docker-compose文件开始的。

kompose.png

希望这能使您快速了解kompose并让您兴奋。它们是更令人兴奋的功能,例如创建不同类型的资源,创建Helm图表,甚至使用实验性的Docker捆绑格式作为输入。查看Lachlan Evenson的博客,网址为 将Docker捆绑包与Kubernetes结合使用。有关整体演示,请参阅我们的演讲 酷比康

前往 Kubernetes孵化器 并查看kompose,它将帮助您轻松地从Docker组合应用程序迁移到生产环境中的Kubernetes集群。