Docker 已正式宣布 kubernetes 集群的 docker-compose 功能。因此,从现在开始,您可以将 kubernetes 资源组合到一个文件中,并使用该单个文件应用它们。
首先,我们需要将 Compose on Kubernetes 控制器安装到您的 Kubernetes 集群中。此控制器使用标准 Kubernetes 扩展点将 Stack 引入 Kubernetes API。查看完整文档以安装 docker compose 控制器:
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 与这些对象进行交互。在这里您可以看到我们已经自动创建了较低级别的对象,例如 Services、Pods、Deployment 和 ReplicaSets:
$ 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
请务必注意,这不是一次性转换。 Compose on Kubernetes API Server 将 Stack 资源引入 Kubernetes API。因此,我们可以在构建应用程序的同一抽象级别上查询和管理所有内容。这使得深入研究上述细节有助于理解事物的工作原理或调试问题,但大多数时候不需要:
$ kubectl get stack
NAME STATUS PUBLISHED PORTS PODS AGE
words Running 33000 5/5 4m