Kompose: Docker-compose 到 Kubernetes 的迁移工具
在 skippbox,我们开发了 Kompose 这一工具,他能够自动把 Docker Compose 应用转换为 Kubernetes 描述文件。利用一个简单的 kompose up 命令,就可以在 Kubernetes 集群上启动 Compose 应用。我们非常乐于将其捐献给 Kubernetes Incubator。下面介绍 一下这一工具的开发动机和用法。
Docker 给了开发者以巨大的帮助。让每个人都能够从 Docker Registry 启动一个打包好的 Docker 应用。为了对付多容器应用, Docker开发了 Docker-compose (也就是 Compose)。Compose 借助 yaml 格式的描述文件来定义一个多容器应用,然后就可以用一个简单的 docker-compose up来启动这一应用中的多个容器。然而,Compose 只能够在本地或者 Docker Swarm 集群中运行。
那如果我们需要在 Swarm 之外运行怎么办?比如 Kubernetes?
Compose 格式并非为分布式而诞生的。所以,你只能为你选择的容器编排工具重新编写应用描述文件。
我们利用 Kompose,能够简单的完成将应用从 Docker Swarm 到 Kubernetes 的转换过程,这样就为 Docker 用户敞开了 Kubernetes 的大门。
今年夏天,来自红帽子的 Tomas Kral 和 Suraj Deshmukh,以及来自 Google 的 Janet Kuo,他们和 Kompose 的主要开发者 Nguyen An-Tu 一起为 Kompose 锦上添花。我们把 Kompose 提交给 Kubernets Incubator,得到了 Kubernetes 社区的支持,现在可以在 Kubernetes Incubator 找到 Kompose。
Kompose 目前支持 Docker-compose v2 格式,最近还加入了持久卷所有权(PVC)、以及多容器 Pod 的支持。除了缺省的 Kubernetes 之外,我们还支持 Openshift 的发布能力。Kompose 现在还出现在了 Fedora 包中,未来也会进入 CentOS 中去。
Kompose 是一个 Golang 应用,可以从 Github 上获取。下面让我们跳过 Build 环节直接进入实例。
Docker 的留言板应用
留言板应用是 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 frontend: image: gcr.io/google-samples/gb-frontend:v4 ports: - "80:80" environment: - GET_HOSTS_FROM=dns
其中包含了三个服务:
- 一个 Redis 主节点;
- 一组能够横向扩展并借助 DNS 找到 Master 的 Redis 从节点;
- 暴露于 80 端口的 PHP 前端。
这些组合在一起,让用户可以发表留言,并保存在 Redis 集群中。
要启动这个应用:
$ 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 的留言板应用
Kompose 目前有三个主要的命令:up、down 以及 convert。为了行文方便,我们只简单说一下留言吧应用的启动。
跟 docker-compose 类似,我们可以用 kompose up 命令处理 Docker compose 文件,来启动应用:
$ kompose -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: frontend INFO[0000] Successfully created deployment: redis-master INFO[0000] Successfully created deployment: redis-slave INFO[0000] Successfully created deployment: frontend Application has been deployed to Kubernetes. You can run 'kubectl get deployment,svc' for details.
Kompose 自动把 Docker-compose 文件转为 Kuberntes 对象。缺省情况下,他会为一个 Compose 服务创建一个 Deployment 以及一个服务。另外还能自动检测当前的 Kuberntes 端点,并在上面创建对象。可以通过一系列的选项来创建 Replication Controller、Replica Set 或者 Daemon Set。
就这样完成了自动转换,如果你了解一些 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
看到了三个服务、三个 Deployment 以及三个 Pod。可以通过 frontend 服务来访问留言板应用。只不过这次的留言板,是从 Docker-Compose 文件启动的。
以上给读者快速的介绍了一下 kompose。还有很多激动人心的特性,例如创建不同类型的资源、创建 Helm Chars,甚至可以使用试验性的 Docker bundle 格式进行输入(Lachlan Evenson 的博客:using a Docker bundle with Kubernetes)。可以在我们的 KubeCon 上的视频 中看到完整的演示。
前往 Kubernetes incubator 获取 Kompose,可以帮助你轻松地把应用从 Docker Compose 迁移为 Kubernetes 集群应用。
本文转自中文社区-Kompose: Docker-compose 到 Kubernetes 的迁移工具

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Kubernetes共享使用Ceph存储
目录 简要概述 环境测试 结果验证 简要概述 Kubernetes pod 结合Ceph rbd块设备的使用,让Docker 数据存储在Ceph,重启Docker或k8s RC重新 调 度pod 不会引起数据来回迁移。 工作原理无非就是拿到ceph集群的key作为认证,远程rbdmap映射挂载使用。那么就要启用一个基于key的secret资源,之后k8s pod指定要用的rbd就可以了。 环境测试 我的OS是ubuntu 14.04,一个master,两个minon 节点,一个镜像仓库服务,这样保证了k8s集群跑起来,这个过程就略过了。 1.内核升级 这里的ceph 版本装的是10.2.2,客户端内核过低会引起挂载失败,主要就是minion节点。 # curl -sSL https://get.docker.com | sh && service docker restart # apt-get install linux-image-4.4.0-22-generic && reboot 2.安装ceph-common,让minion调用rbd root...
- 下一篇
kubernetes资源对象--secret和Service Account
secret 概念 secret资源对象主要目的是保存和处理敏感信息/私密数据,比如密码,OAuth tokens,ssh keys等信息。将这 些信息放在secret对象中比直接放在pod或docker image中更安全,也更方便使用。 类型 Opaque任意字符串,默认类型 kubernetes.io/service-account-token:作用于Service Account kubernetes.io/dockercfg:作用于Docker registry,用户下载docker镜像认证使用 Opaque 创建 文件方式 首先把需要加密的内容实现base64编码 echo -n lykops | base64 bHlrb3Bz echo -n 1qaz2wsx | base64 MXFhejJ3c3g= 然后写入lykops-secret.yaml apiVersion: v1 kind: Secret metadata: name: lykops-secret namespace: default type: Opaque data: password: MXFhejJ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Linux系统CentOS6、CentOS7手动修改IP地址
- Red5直播服务器,属于Java语言的直播服务器
- Docker安装Oracle12C,快速搭建Oracle学习环境