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并让您兴奋。它们是更令人兴奋的功能,例如创建不同类型的资源,创建Helm图表,甚至使用实验性的Docker捆绑格式作为输入。查看Lachlan Evenson的博客,网址为 将Docker捆绑包与Kubernetes结合使用。有关整体演示,请参阅我们的演讲 酷比康
前往 Kubernetes孵化器 并查看kompose,它将帮助您轻松地从Docker组合应用程序迁移到生产环境中的Kubernetes集群。
- 下载 Kubernetes
- 参与Kubernetes项目 的GitHub
- 发表问题(或回答问题) 堆栈溢出
- 与社区联系 松弛
- 在推特上关注我们 @Kubernetesio 有关最新更新