Docker 让每个人都能够从 Docker Registry 启动一个打包好的 Docker 应用。Docker-Compose在Docker基础上解决了多容器应用之间的依赖启动问题。

Docker Compose 借助 yaml 格式的描述文件来定义一个多容器应用,然后就可以用一个简单的 docker-compose up来启动这一应用中的多个容器。然而,Compose 只能够在本地或者 Docker Swarm 集群中运行。

如果我们需要在 Swarm 之外运行怎么办?比如 Kubernetes?Compose 格式并非为分布式而诞生的,所以我们只能为选择的容器编排工具重新编写应用描述文件。

现在,在 Kubernetes Incubator 可以找到 Kompose。有了 Kompose,我们能够简单实现从 Docker Swarm 到 Kubernetes 的转换过程,这样就为 Docker 用户敞开了 Kubernetes 的大门。

Kompose 目前支持 Docker-compose v2 格式,最近还加入了持久卷所有权(PVC)、以及多容器 Pod 的支持。除了缺省的 Kubernetes 之外,我们还支持 Openshift 的发布能力。Kompose 现在还出现在了 Fedora 包中,未来也会进入 CentOS 中去。

Kompose 是一个 Golang 应用,可以从 Github 上获取。下面让我们跳过 Build 环节直接进入实例。

Kompose工具能够自动把 Docker Compose 应用转换为 Kubernetes 描述文件。利用简单的 kompose up 命令,可以在 Kubernetes 集群上启动 Compose 应用。

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 集群应用。

原作者: Sebastien Goasguen
原文: http://blog.kubernetes.io/2016/11/kompose-tool-go-from-docker-compose-to-kubernetes.html
译文:http://blog.fleeto.us/translation/kompose-tool-go-docker-compose-kubernetes

Kompose: Docker-compose 到 Kubernetes 的迁移工具的更多相关文章

  1. [Docker] Converting from Docker Compose to Kubernetes

    kompose is a tool to help users who are familiar with docker-compose move to Kubernetes. kompose tak ...

  2. kubernetes 实战6_命令_Share Process Namespace between Containers in a Pod&Translate a Docker Compose File to Kubernetes Resources

    Share Process Namespace between Containers in a Pod how to configure process namespace sharing for a ...

  3. Docker,Docker Compose,Docker Swarm,Kubernetes之间的区别

    Dcoker Docker 这个东西所扮演的角色,容易理解,它是一个容器引擎,也就是说实际上我们的容器最终是由Docker创建,运行在Docker中,其他相关的容器技术都是以Docker为基础,它是我 ...

  4. Istio入门实战与架构原理——使用Docker Compose搭建Service Mesh

    本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于Kubernetes的教程仿佛不是亲儿子,写得非常随便,不仅缺 ...

  5. 使用 Docker Compose 快速构建 TiDB 集群

    本文档介绍如何在单机上通过 Docker Compose 快速一键部署一套 TiDB 测试集群.Docker Compose 可以通过一个 YAML 文件定义多个容器的应用服务,然后一键启动或停止. ...

  6. Docker笔记(十二):Docker Compose入门

    1. Compose简介 Docker Compose是Docker官方的用于对Docker容器集群实现编排,快速部署分布式应用的开源项目.Docker Compose通过docker-compose ...

  7. 使用Docker Compose搭建Service Mesh

    使用Docker Compose搭建Service Mesh 本文将介绍如何使用Docker Compose搭建Istio.Istio号称支持多种平台(不仅仅Kubernetes).然而,官网上非基于 ...

  8. Docker Compose 项目打包部署

    Docker Compose 前面我们使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build.docker run 等命令操作容器.然而微服务架构的应用系统一 ...

  9. 基于Docker Compose的.NET Core微服务持续发布

    是不是现在每个团队都需要上K8s才够潮流,不用K8s是不是就落伍了.今天,我就通过这篇文章来回答一下. 一.先给出我的看法和建议 我想说的是,对于很多的微小团队来说,可能都不是一定要上K8s,毕竟上K ...

随机推荐

  1. 找出k个数相加得n的所有组合

    Find all possible combinations of k positive numbers that add up to a number n,each combination shou ...

  2. quartz.net 3.x 使用总结

    quartz文档:https://www.quartz-scheduler.net/documentation/index.html 这里用新建的控制台项目进行演示. 目标效果为每隔一秒在控制台上输出 ...

  3. Linux 学习(01):Linux Shell

    进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示 ...

  4. IPFS: Merkle DAG数据结构

    今天带大家来深入探索一下IPFS的核心数据结构Merkle DAG 什么是 Merkle DAG? Merkle DAG是IPFS系统的核心概念之一,当然Merkle DAG并不是IPFS团队发明的, ...

  5. 前端的UI设计与交互之图标篇

    图标是具有指代意义的图形,也是一种标识.通过使用图标表达命令,强调状态,表示产品或类别.为了系统及跨平台之间图形认知保持一致, 图标在设计和使用时有以下两个原则点需要注意:简单的图形语言以及高辨识度. ...

  6. Algorithm --> n位数去掉k位后找最小数

    去掉K位求取最小数 一个n位的数,去掉其中的k位,怎样使留下来的(n-k)位数按原来的前后顺序组成的数最小 例如 8314925去掉4个数,留下125最小,注意有前后顺序要求,要是没有顺序当然是123 ...

  7. postman简单教程,使用tests模块来验证接口时是否通过

    接口测试醉重要的就是返回数据的检查,一个简单的接口,我们可以肉眼检查返回数据,但接口一旦多起来且复杂,每次的检查都会很费劲,此时我们就需要postman 的tests模块来代替 概念: Postman ...

  8. ORACLE 监听

    今天来学习一下监听的相关内容,昨晚被老大问了两个关于监听很简单的问题,但是却吞吞吐吐回答,而且有一个问题还答错了,刚刚查了下资料,才发现"驴头对了马嘴",哭笑不得. 一.监听(li ...

  9. curl 获取外网IP

    #curl http://members.3322.org/dyndns/getip121.204.134.10

  10. 爬虫(BeautifulSoup--select--class的选择)

    <div class="item name" title="中央公园"> <a href="/Attraction_Review-g ...