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

61
我已经在 Kubernetes 文档中挖掘了几个小时。我理解了核心设计和服务、控制器、Pod 等概念。
然而,我不理解的是如何以声明性方式配置集群。也就是说,我想编写一个配置文件(或一组配置文件),以定义云部署的组成和扩展选项。我希望能够声明我想要哪些容器放在哪些 Pod 中,它们将如何通信,如何扩展等,而无需运行大量的 cli 命令。
Kubernetes 是否有类似于docker-compose的功能?
我希望我的应用程序可以在 git 中定义,可以进行版本控制,而不依赖于手动 cli 交互。这是否可能以简明的方式完成?是否有比官方文档更清晰的参考资料?
4个回答

33
如果您仍在寻找,也许这个工具可以帮助:https://github.com/kelseyhightower/compose2kube 您可以创建一个Compose文件:
# 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上。


21
如果你已经有了现有的Docker Composer文件,可以看一下Kompose项目

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/


13

Docker已正式宣布将docker-compose功能引入Kubernetes集群。从现在开始,您可以在一个文件中组合Kubernetes资源,并使用该单个文件应用它们。

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

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

让我们编写一个简单的Compose 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与这些对象进行交互。在这里,您可以看到我们已自动创建了较低级别的对象,例如服务、Pod、部署和副本集:
$ 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上编写应用程序时,Compose on Kubernetes API Server会向Kubernetes API引入Stack资源,因此我们可以查询和管理所有内容,就像构建应用程序时所使用的抽象级别一样。这使得深入了解上述细节有助于理解工作原理或调试问题,但大多数情况下并非必需:

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

7

Kubernetes肯定有自己的yaml(如“部署应用程序”所示)

但是,正如“比较Docker集群工具:Kubernetes vs Docker Swarm”所述,它不是为Docker编写的,而是有自己的系统。

您可以使用docker-compose启动Kubernetes,如“{{link3:vyshane / kid }}”所示:这确实掩盖了一些{{link4:kubectl命令cli in scripts}}(可以进行版本控制)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接