2018 年 Docker 大事件回顾,Docker Compose 助力简化 Kubernetes 体验

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

screenshot

出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五,与您不见不散!


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

screenshot

随着 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).Lines
908
$ cd ../../docker-compose
$ (Get-Content docker-compose.yml | Measure-Object -line).Lines
174

仅使用原始 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 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、Pod、Deployments 和 ReplicaSet 等较低级别的对象:

$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/db-85849797f6-bhpm8 1/1 Running 0 57s
pod/web-7974f485b7-j7nvt 1/1 Running 0 57s
pod/words-8fd6c974-44r4s 1/1 Running 0 57s
pod/words-8fd6c974-7c59p 1/1 Running 0 57s
pod/words-8fd6c974-zclh5 1/1 Running 0 57s
 
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/db ClusterIP None 55555/TCP 57s
service/kubernetes ClusterIP 10.96.0.1 443/TCP 4d
service/web ClusterIP None 55555/TCP 57s
service/web-published LoadBalancer 10.102.236.49 localhost 33000:31910/TCP 57s
service/words ClusterIP None 55555/TCP 57s
 
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
 
NAME DESIRED CURRENT READY AGE
replicaset.apps/db-85849797f6 1 1 1 57s
replicaset.apps/web-7974f485b7 1 1 1 57s
replicaset.apps/words-8fd6c974 3 3 3 57s

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

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

与其他的 Kubernetes 工具集成

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

kind: Stack
apiVersion: compose.docker.com/v1beta2
metadata:
 name: hello
spec:
 services:
 - name: hello
 image: garethr/skaffold-example
 ports:
 - mode: ingress
 target: 5678
 published: 5678
 protocol: tcp

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

apiVersion: skaffold/v1alpha5
kind: Config
build:
 tagPolicy:
 sha256: {}
 artifacts:
 - image: garethr/skaffold-example
 local:
 useBuildkit: true
deploy:
 kubectl:
 manifests:
 - stack.yaml

未 来

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

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

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
存储 Kubernetes 监控
Docker与Kubernetes集成挑战及方案
面对这些挑战,并不存在一键解决方案。如同搭建灌溉系统需要考虑多种因素,集成Docker与Kubernetes也需要深思熟虑的规划、相当的技术知识和不断的调试。只有这样,才能建立起一个稳定、健康、高效的Docker-Kubernetes生态,让你的应用像花园中的植物一样繁荣生长。
185 63
|
2月前
|
NoSQL Redis Docker
使用Docker Compose工具进行容器编排的教程
以上就是使用Docker Compose进行容器编排的基础操作。这能帮你更有效地在本地或者在服务器上部署和管理多容器应用。
259 11
|
4月前
|
网络协议 Ubuntu Docker
Docker Compose--命令说明
Docker Compose--命令说明
691 30
|
4月前
|
网络协议 NoSQL Redis
Docker Compose--模板文件
Docker Compose--模板文件
290 29
|
4月前
|
Linux Docker Windows
Docker Compose
Docker Compose
401 29
|
4月前
|
关系型数据库 MySQL 数据库
Docker Compose-实战
Docker Compose-实战
134 5
|
4月前
|
Docker 容器
在openEuler 22.03 LTS上安装Docker CE和Docker Compose
以上就是在openEuler 22.03 LTS上安装Docker CE和Docker Compose的过程。希望这个指南能帮助你顺利完成安装。
836 12
|
5月前
|
存储 Kubernetes 调度
Kubernetes、Docker和Containerd的关系解析
总的来说,Docker、Containerd和Kubernetes之间的关系可以用一个形象的比喻来描述:Docker就像是一辆装满货物的卡车,Containerd就像是卡车的引擎,而Kubernetes就像是调度中心,负责指挥卡车何时何地送货。
233 12
|
6月前
|
Kubernetes Docker 容器
Kubernetes与Docker参数对照:理解Pod中的command、args与Dockerfile中的CMD、ENTRYPOINT。
需要明确的是,理解这些都需要对Docker和Kubernetes有一定深度的理解,才能把握二者的区别和联系。虽然它们都是容器技术的二个重要组成部分,但各有其特性和适用场景,理解它们的本质和工作方式,才能更好的使用这些工具,将各自的优点整合到生产环境中,实现软件的快速开发和部署。
178 25
|
6月前
|
弹性计算 运维 Ubuntu
在阿里云ECS云服务器上安装、配置及高效使用Docker与Docker Compose
本文介绍了在阿里云ECS上使用Ubuntu系统安装和配置Docker及Docker Compose的详细步骤。通过这些工具,可以快速部署、弹性扩展和高效管理容器化应用,满足开发和运维需求。内容涵盖Docker的安装、镜像源配置、创建Web程序镜像以及使用Docker Compose部署WordPress等实际操作,并分享了使用体验,展示了阿里云实例的高性能和稳定性。
1188 4