可以像Docker Compose一样使用Kubernetes吗?

时间:2016-06-15 21:02:23

标签: docker kubernetes docker-compose google-kubernetes-engine

我一直在挖掘Kubernetes文档几个小时。我理解核心设计,服务,控制器,吊舱等概念。

然而,我不明白的是我可以声明性地配置群集的过程。也就是说,我可以编写配置文件(或其中的一组)来定义组合,以及扩展云部署的选项。我希望能够在不运行大量cli命令的情况下声明我想要哪些容器,它们将如何通信,如何扩展等等。

Kubernetes是否有docker-compose功能?

我希望我的应用程序在git中定义为版本控制 - 而不依赖于手动cli交互。

这是否可以以简洁的方式进行?是否有比官方文档更清晰的参考文献?

4 个答案:

答案 0 :(得分:32)

如果你还在寻找,也许这个工具可以提供帮助:https://github.com/kelseyhightower/compose2kube

您可以创建撰写文件:

# sample compose file with 3 services
web:
  image: nginx
  ports:
    - "80"
    - "443"
database:
  image: postgres
  ports:
    - "5432"
cache:
  image: memcached
  ports:
    - "11211"

然后使用该工具将其转换为kubernetes对象:

compose2kube -compose-file docker-compose.yml -output-dir output

将创建这些文件:

output/cache-rc.yaml
output/database-rc.yaml
output/web-rc.yaml

然后您可以使用kubectl将它们应用于kubernetes。

答案 1 :(得分:15)

如果您有现有的Docker Composer文件,可以查看Kompose project

  

kompose是一个工具,可以帮助熟悉docker-compose的用户转移到Kubernetes。 kompose获取Docker Compose文件并将其转换为Kubernetes资源。

     

kompose是一个便利工具,可以从本地Docker开发到使用Kubernetes管理您的应用程序。将Docker Compose格式转换为Kubernetes资源清单可能并不准确,但在首次在Kubernetes上部署应用程序时,它会有很大帮助。

要运行docker-compose.yaml文件或您自己的文件,请运行:

kompose up

使用一个简单的命令将docker-compose.yaml转换为Kubernetes部署和服务:

$ kompose convert -f docker-compose.yaml
INFO Kubernetes file "frontend-service.yaml" created         
INFO Kubernetes file "redis-master-service.yaml" created     
INFO Kubernetes file "redis-slave-service.yaml" created      
INFO Kubernetes file "frontend-deployment.yaml" created      
INFO Kubernetes file "redis-master-deployment.yaml" created  
INFO Kubernetes file "redis-slave-deployment.yaml" created

有关详情,请查看:http://kompose.io/

答案 2 :(得分:9)

Docker正式宣布了kubernetes集群的docker-compose功能。因此,从现在开始,您可以将kubernetes资源组合到一个文件中,并使用该单个文件来应用它们。

首先,我们需要将Compose on Kubernetes控制器安装到您的Kubernetes集群中。该控制器使用标准的Kubernetes扩展点将Stack引入Kubernetes API。查看完整的文档以安装docker compose控制器:

  

https://github.com/docker/compose-on-kubernetes

让我们编写一个简单的yaml文件:

version: "3.7"
services:
  web:
    image: dockerdemos/lab-web
    ports:
     - "33000:80"
  words:
    image: dockerdemos/lab-words
    deploy:
      replicas: 3
      endpoint_mode: dnsrr
  db:
    image: dockerdemos/lab-db

然后,我们将使用docker客户端将其部署到运行控制器的Kubernetes集群:

$ docker stack deploy --orchestrator=kubernetes -c docker-compose.yml words
Waiting for the stack to be stable and running...
db: Ready       [pod status: 1/1 ready, 0/1 pending, 0/1 failed]
web: Ready      [pod status: 1/1 ready, 0/1 pending, 0/1 failed]
words: Ready    [pod status: 1/3 ready, 2/3 pending, 0/3 failed]
Stack words is stable and running

然后我们可以通过Kubernetes API与这些对象进行交互。在这里,您可以看到我们已经自动创建了较低级别的对象,例如服务,窗格,部署和副本集:

$ kubectl get deployments
NAME                    DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/db      1         1         1            1           57s
deployment.apps/web     1         1         1            1           57s
deployment.apps/words   3         3         3            3           57s    

请务必注意,这不是一次转换。 Kubernetes API服务器上的撰写将堆栈资源引入Kubernetes API。因此,我们可以在构建应用程序时以相同的抽象级别查询和管理所有内容。这使得深入研究上面的细节对于理解事物的工作方式或调试问题很有用,但在大多数情况下并不是必需的:

$ kubectl get stack
NAME      STATUS      PUBLISHED PORTS   PODS     AGE      
words     Running     33000             5/5      4m

答案 3 :(得分:7)

Kubernetes肯定有自己的yaml(如“Deploying Applications”所示)

但是作为“Docker Clustering Tools Compared: Kubernetes vs Docker Swarm”,它并没有为(仅)编写Docker,它有自己的系统。

你可以使用docker-compose来启动Kubernetes,如“vyshane/kid”所示:它会掩盖一些kubectl commands cli in scripts(可以版本化)。