没有可用软件包 docker-compose。_2018年Docker大事件回顾,Docker Compose助力简化Kubernetes体验...

59e8c5e961fa3674a44288cfb189a980.png

每周一、三、五,与您不见不散!


随着2018年的结束,我们将回顾排名前五的最受读者欢迎的文章。今天将分享该系列的最后一篇文章,Docker Compose 助力 Kubernetes,帮您轻松上手 Kubernetes。

3101aaa256442c8008a41f2d6b1d01e0.png

随着 Docker 对 Kubernetes 开放 Docker Compose的支持,现在的用户可以选择在任意 Kubernetes 集群上使用这个全新的功能。


如果已经拥有 Kubernetes 为什么还需要 Compose 呢?

Kubernetes API 非常庞大。最新版本中有超过50个第一梯队的对象,从 Pods 和 Deployments 到 Validating Webhook Configuration 和 ResourceQuota。这无疑会导致配置的冗长,这就需要由开发人员进行管理。让我们看一个具体的例子:

Sock Shop 是微服务应用程序的典型示例。它是由使用多种技术和后端组成的多个服务,所有 服务都打包成为 Docker 镜像。它还提供了使用不同工具的示例配置,包括 Compose 和原始 Kubernetes 配置。接下来,我们来看看这些配置的相对大小:

Sock Shop 示例:https://github.com/microservices-demo/microservices-demo

$ git clone https://github.com/microservices-demo/microservices-demo.git$ cd deployment/kubernetes/manifests$ (Get-ChildItem -Recurse -File | Get-Content | Measure-Object -line).Lines908$ cd ../../docker-compose$ (Get-Content docker-compose.yml | Measure-Object -line).Lines174

仅使用原始 Kubernetes 对象描述完全相同的多服务应用程序所需的配置数量是 Compose 的5倍以上。这不仅仅是作者的前期成本,这也是维持的持续成本。Kubernetes API 具有强大的通用性,它公开了用于构建全系列分布式系统的低级原语。Compose 不仅仅只是一个 API,而是一个专注于提高开发人员生产力的高级工具。这就是将 Compose和 Kubernetes 组合在一起的原因。对于一组相互连接的 web 服务的常见情况,Compose 提供了一个简化 Kubernetes 配置的抽象。对于其他内容,您仍然可以下载到原始的 Kubernetes API 语言。让我们看看这一切是如何运作的。

首先,我们需要将 Kubernetes 控制器上的 Compose 安装到您的 Kubernetes 集群中。该控制器使用标准的 Kubernetes 扩展点将`Stack`堆栈引入 Kubernetes API。您可以使用任意的 Kubernetes 集群,但如果您还没有可用的集群,请记住 Docker Desktop 内置了 Kubernetes 和 Compose 控制器,启用它们就像在设置中勾选一个框一样简单。

要在任意 Kubernetes 群集上手动安装控制器,请浏览 https://github.com/docker/compose-on-kubernetes 参阅完整的安装说明文档。

接下来让我们编写一个简单的 Compose 文件:

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 wordsWaiting 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、Pod、Deployments 和 ReplicaSet 等较低级别的对象:

$ kubectl get allNAME READY STATUS RESTARTS AGEpod/db-85849797f6-bhpm8 1/1 Running 0 57spod/web-7974f485b7-j7nvt 1/1 Running 0 57spod/words-8fd6c974-44r4s 1/1 Running 0 57spod/words-8fd6c974-7c59p 1/1 Running 0 57spod/words-8fd6c974-zclh5 1/1 Running 0 57s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEservice/db ClusterIP None 55555/TCP 57sservice/kubernetes ClusterIP 10.96.0.1 443/TCP 4dservice/web ClusterIP None 55555/TCP 57sservice/web-published LoadBalancer 10.102.236.49 localhost 33000:31910/TCP 57sservice/words ClusterIP None 55555/TCP 57s NAME DESIRED CURRENT UP-TO-DATE AVAILABLE AGEdeployment.apps/db 1 1 1 1 57sdeployment.apps/web 1 1 1 1 57sdeployment.apps/words 3 3 3 3 57s NAME DESIRED CURRENT READY AGEreplicaset.apps/db-85849797f6 1 1 1 57sreplicaset.apps/web-7974f485b7 1 1 1 57sreplicaset.apps/words-8fd6c974 3 3 3 57s

需要注意的是,这不是一次性的转换。Kubernetes API 服务器上的 Compose 将`Stack`堆栈资源引入 Kubernetes API。因此,我们可以在构建应用程序时以相同的抽象级别查询和管理所有内容。这使得深入研究上述细节对于理解工作原理或调试问题非常有用,但大部分时间都不需要:

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

与其他的 Kubernetes 工具集成

因为`Stack`堆栈现在是本地 Kubernetes 的对象,所以您可以使用其他的 Kubernetes 工具来处理它。例如,将其保存为`stack.yaml`:

kind: StackapiVersion: compose.docker.com/v1beta2metadata: name: hellospec: services: - name: hello image: garethr/skaffold-example ports: - mode: ingress target: 5678 published: 5678 protocol: tcp

您可以使用 Skaffold 等工具自动重建镜像,并在更改应用程序的任何详细信息时自动重新部署堆栈。 这使得本地内环开发体验非常棒。您只需要以下`skaffold.yaml`的配置文件:

apiVersion: skaffold/v1alpha5kind: Configbuild: tagPolicy: sha256: {} artifacts: - image: garethr/skaffold-example local: useBuildkit: truedeploy: kubectl: manifests: - stack.yaml

未 来

我们已经对 Helm 插件有了一些想法,使用 Compose 来描述您的应用程序,并尽可能简单地使用 Helm 进行部署。 我们还有很多其他想法,可以帮助简化与 Kubernetes 一起工作的开发人员的体验,同时又不会失去平台的任何功能。我们还希望与更广泛的 Cloud Native 社区合作,因此如果您有任何想法和建议,可以随时告诉我们。

Kubernetes 旨在扩展,我们希望您喜欢我们今天所发布的内容。如果您是数百万 Compose 用户的一员,那么您现在就可以更轻松地迁移到 Kubernetes 并管理您的应用程序。如果你是一个 Kubernetes 用户,在过多的低级配置上苦苦挣扎,那么试试 Compose 吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值