2018 年 Docker 大事件回顾,Docker Compose 助力简化 Kubernetes 体验
出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五,与您不见不散!
随着2018年的结束,我们将回顾排名前五的最受读者欢迎的文章。今天将分享该系列的最后一篇文章,Docker Compose 助力 Kubernetes,帮您轻松上手 Kubernetes。
随着 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 吧。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
ARM版Docker安装实战
ARM版Docker安装实战 tags: 网站 个人网站:https://wanghualong.cn/ 1 环境参考 硬件平台:Sail - i.max6Q 工业级开发板。(感谢电鱼公司无偿赞助开发板。公司主页:www.dianyu.net。) 操作系统: ubuntu 14.04(armhf) 2 安装基本软件 apt-get install curl wget apt-transport-https ca-certificates 3 更换系统软件源 备份原sources.list文件 # 备份原文件 cp /etc/apt/sources.list /etc/apt/sources.list.bak 新建sources.list # 新建文件 vi /etc/apt/sources.list 粘贴中科大Ubuntu armhf 源内容(Ubuntu 14.04 trusty) 中科大Ubuntu 14.04 trusty armhf 软件源(推荐https) # 默认注释了源码仓库,如有需要可自行取消注释 deb https://mirrors.ustc.edu.cn/ubun...
- 下一篇
1月16日云栖精选夜读 | 阿里P8架构师谈:Zookeeper的原理和架构设计,以及应用场景
随着信息化水平的不断提高,企业级应用系统变得越来越庞大,性能随之下降,用户抱怨频频。拆分系统是目前我们可选择的解决系统可伸缩性和性能问题的唯一行之有效的方法。但是拆分系统同时也带来了系统的复杂性——各子系统不是孤立存在的,它们彼此之间需要协作和交互(分布式系统)。 热点热议 阿里P8架构师谈:Zookeeper的原理和架构设计,以及应用场景 作者:mikechen优知 设计模式实战-策略模式(Strategy Pattern) 作者:芥末无疆 21分钟教会你分析MaxCompute账单 作者:祎休发表在:阿里巴巴大数据 —玩家社区 知识整理 在Data Lake Analytics中使用视图 作者:julian.zhou 发表在:阿里云Data Lake Analytics cheerp 减小调用转换类型的开销的方式 作者:钟元大老爷 JAVA ssm b2b2c多用户商城系统源码-hystrix工作原理 作者:it菲菲 Node.js+express+MongoDB+socket.io 做的一个即时聊天案例 作者:黄小凡 Python requests库 作者:hiekay 美文回顾...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Hadoop3单机部署,实现最简伪集群
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- 2048小游戏-低调大师作品
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果