<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>compose | 伪架构师</title>
    <link>/tags/compose/</link>
      <atom:link href="/tags/compose/index.xml" rel="self" type="application/rss+xml" />
    <description>compose</description>
    <generator>Source Themes Academic (https://sourcethemes.com/academic/)</generator><language>zh</language><lastBuildDate>Wed, 23 Nov 2016 09:26:57 +0800</lastBuildDate>
    <image>
      <url>/img/logo-wide.png</url>
      <title>compose</title>
      <link>/tags/compose/</link>
    </image>
    
    <item>
      <title>Kompose: Docker-compose 到 Kubernetes 的迁移工具</title>
      <link>/post/kompose-compose-to-kubernetes/</link>
      <pubDate>Wed, 23 Nov 2016 09:26:57 +0800</pubDate>
      <guid>/post/kompose-compose-to-kubernetes/</guid>
      <description>

&lt;p&gt;原文：&lt;a href=&#34;https://kubernetes.io/blog/2016/11/kompose-tool-go-from-docker-compose-to-kubernetes&#34; target=&#34;_blank&#34;&gt;Kompose: a tool to go from Docker-compose to Kubernetes&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;在 &lt;a href=&#34;http://www.skippbox.com/&#34; target=&#34;_blank&#34;&gt;skippbox&lt;/a&gt;，我们开发了 &lt;strong&gt;Kompose&lt;/strong&gt; 这一工具，他能够自动把 Docker Compose 应用转换为 Kubernetes 描述文件。利用一个简单的 &lt;code&gt;kompose up&lt;/code&gt; 命令，就可以在 Kubernetes 集群上启动 Compose 应用。我们非常乐于将其捐献给 &lt;a href=&#34;https://github.com/kubernetes-incubator&#34; target=&#34;_blank&#34;&gt;Kubernetes Incubator&lt;/a&gt;。下面介绍一下这一工具的开发动机和用法。&lt;/p&gt;

&lt;p&gt;Docker 给了开发者以巨大的帮助。让每个人都能够从 Docker Registry 启动一个打包好的 Docker 应用。为了对付多容器应用， Docker 开发了 Docker-compose （也就是 Compose）。Compose 借助 yaml 格式的描述文件来定义一个多容器应用，然后就可以用一个简单的 &lt;code&gt;docker-compose up&lt;/code&gt; 来启动这一应用中的多个容器。然而，Compose 只能够在本地或者 Docker Swarm 集群中运行。&lt;/p&gt;

&lt;p&gt;那如果我们需要在 Swarm 之外运行怎么办？比如 Kubernetes？&lt;/p&gt;

&lt;p&gt;Compose 格式并非为分布式而诞生的。所以，你只能为你选择的容器编排工具重新编写应用描述文件。&lt;/p&gt;

&lt;p&gt;我们利用 Kompose，能够简单的完成将应用从 Docker Swarm 到 Kubernetes 的转换过程，这样就为 Docker 用户敞开了 Kubernetes 的大门。&lt;/p&gt;

&lt;p&gt;今年夏天，来自红帽子的  Tomas Kral 和 Suraj Deshmukh，以及来自 Google 的 Janet Kuo，他们和 Kompose 的主要开发者 Nguyen An-Tu 一起为 Kompose 锦上添花。我们把 Kompose 提交给 Kubernets Incubator，得到了 Kubernetes 社区的支持，现在可以在 &lt;a href=&#34;https://github.com/kubernetes-incubator/kompose&#34; target=&#34;_blank&#34;&gt;Kubernetes Incubator&lt;/a&gt; 找到 Kompose。&lt;/p&gt;

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

&lt;p&gt;Kompose 是一个 Golang 应用，可以从 &lt;a href=&#34;https://github.com/kubernetes-incubator/kompose&#34; target=&#34;_blank&#34;&gt;Github&lt;/a&gt; 上获取。下面让我们跳过 Build 环节直接进入实例。&lt;/p&gt;

&lt;h2 id=&#34;docker-的留言板应用&#34;&gt;Docker 的留言板应用&lt;/h2&gt;

&lt;p&gt;留言板应用是 Kubernetes 的权威示例。如果要用 Docker Compose 来实现留言板，可以用下面的代码：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-yaml&#34;&gt;version: &amp;quot;2&amp;quot;

services:
  redis-master:
    image: gcr.io/google_containers/redis:e2e
    ports:
      - &amp;quot;6379&amp;quot;
  redis-slave:
    image: gcr.io/google_samples/gb-redisslave:v1
    ports:
      - &amp;quot;6379&amp;quot;
    environment:
      - GET_HOSTS_FROM=dns
  frontend:
    image: gcr.io/google-samples/gb-frontend:v4
    ports:
      - &amp;quot;80:80&amp;quot;
    environment:
      - GET_HOSTS_FROM=dns
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;其中包含了三个服务：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;一个 Redis 主节点；&lt;/li&gt;
&lt;li&gt;一组能够横向扩展并借助 DNS 找到 Master 的 Redis 从节点；&lt;/li&gt;
&lt;li&gt;暴露于 80 端口的 PHP 前端。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;这些组合在一起，让用户可以发表留言，并保存在 Redis 集群中。&lt;/p&gt;

&lt;p&gt;要启动这个应用：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;$ docker-compose -f docker-guestbook.yml up -d
Creating network &amp;quot;examples_default&amp;quot; with the default driver
Creating examples_redis-slave_1
Creating examples_frontend_1
Creating examples_redis-master_1
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;这就是一个简单的 Docker 用法，下面我肯看看如何在不重写任何东西的情况下，让这些工作在 Kubernetes 上完成。&lt;/p&gt;

&lt;h2 id=&#34;kompose-的留言板应用&#34;&gt;Kompose 的留言板应用&lt;/h2&gt;

&lt;p&gt;Kompose 目前有三个主要的命令：&lt;code&gt;up&lt;/code&gt;、&lt;code&gt;down&lt;/code&gt; 以及 &lt;code&gt;convert&lt;/code&gt;。为了行文方便，我们只简单说一下留言吧应用的启动。&lt;/p&gt;

&lt;p&gt;跟 &lt;code&gt;docker-compose&lt;/code&gt; 类似，我们可以用 &lt;code&gt;kompose up&lt;/code&gt; 命令处理 Docker compose 文件，来启动应用：&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;$ 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 &#39;kompose convert&#39; and &#39;kubectl create -f&#39; 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 &#39;kubectl get deployment,svc&#39; for details.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Kompose 自动把 Docker-compose 文件转为 Kuberntes 对象。缺省情况下，他会为一个 Compose 服务创建一个 Deployment 以及一个服务。另外还能自动检测当前的 Kuberntes 端点，并在上面创建对象。可以通过一系列的选项来创建 Replication Controller、Replica Set 或者 Daemon Set。&lt;/p&gt;

&lt;p&gt;就这样完成了自动转换，如果你了解一些 Kubernetes 的话，可以用 kubectl 命令来看看集群上运行的留言板。&lt;/p&gt;

&lt;pre&gt;&lt;code class=&#34;language-bash&#34;&gt;$ 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    &amp;lt;none&amp;gt;        80/TCP       1m
redis-master                     10.0.0.219   &amp;lt;none&amp;gt;        6379/TCP     1m
redis-slave                      10.0.0.84    &amp;lt;none&amp;gt;        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
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;看到了三个服务、三个 Deployment 以及三个 Pod。可以通过 frontend 服务来访问留言板应用。只不过这次的留言板，是从 Docker-Compose 文件启动的。&lt;/p&gt;

&lt;p&gt;&lt;img src=&#34;images/guestbook.png&#34; alt=&#34;guestbook&#34; /&gt;&lt;/p&gt;

&lt;p&gt;以上给读者快速的介绍了一下 kompose。还有很多激动人心的特性，例如创建不同类型的资源、创建 Helm Chars，甚至可以使用试验性的 Docker bundle 格式进行输入（Lachlan Evenson 的博客：&lt;a href=&#34;https://deis.com/blog/2016/push-docker-dab-kubernetes-cluster/&#34; target=&#34;_blank&#34;&gt;using a Docker bundle with Kubernetes&lt;/a&gt;）。可以在我们的 &lt;a href=&#34;https://www.youtube.com/watch?v=zqUfPPNVjI8&amp;amp;index=42&amp;amp;list=PLj6h78yzYM2PqgIGU1Qmi8nY7dqn9PCr4&#34; target=&#34;_blank&#34;&gt;KubeCon 上的视频&lt;/a&gt; 中看到完整的演示。&lt;/p&gt;

&lt;p&gt;前往 &lt;a href=&#34;https://github.com/kubernetes-incubator/kompose&#34; target=&#34;_blank&#34;&gt;Kubernetes incubator&lt;/a&gt; 获取 Kompose，可以帮助你轻松地把应用从 Docker Compose 迁移为 Kubernetes 集群应用。&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>
