写点什么

容器化应用:我们都经历了什么

作者:Rayzh
  • 2022 年 4 月 19 日
  • 本文字数:1654 字

    阅读完需:约 5 分钟

容器化应用:我们都经历了什么

回顾容器化应用从 0 到 1,逐步成为规范的这几年,我们在容器化落地实践的过程中得到了很多的经验和教训。

容器与虚拟机

选择容器化应用的最开始,总是拿着容器和虚拟机比较优劣。在给未接触到容器的同事普及的时候,我们告诉他,容器是轻量级的虚拟机。但是我们在实际落地的时候,是知道容器和虚拟机是有比较大的区别的。容器本身适用的场景和虚拟机也不同:容器偏应用,虚拟机是在物理机器上的一个模拟。

这张图应该是很多介绍容器的都会提交的对比:


Docker 的选择与使用

容器化应用最多的案例就是 Docker,这点在选型的时候也没太多争议。容器化起步的时候,Docker 就是我们对一个应用依赖环境的一个封装。我们把自己的应用镜像推送到公共到 Harbor 私有仓库,提供给不同服务器上做 docker run 的启动。

这阶段的日志管理、应用监控与原来的虚拟机部署程序没太多的区别。比如日志的采集是通过搜集 Docker 映射出来的日志文件目录,监控则是通过一个个 shell 命令定期采集指标提供给 Zabbix。容器,让一个程序运行的环境更规范化和简单化。

Docker Swarm

更多的业务容器化之后,我们面临的维护视角由原来的虚拟机管理转到了 Docker 容器管理。于是我们选择了当时比较成熟的 Docker Swarm。作为集群化管理的平台,我们为集群增加了相应的 Node 节点,然后统一去管理部署在不同的 Node 上的 Docker 应用。和在虚拟机上单独管理 Docker 相比,Docker Swarm 让我们有了一个统一的管理视角,更方便地监控和管理涉及到的 Docker 应用。

Kubernetes yaml

不夸张地说,Kubernetes(K8S)出现对整个容器生态是有着划时代意义的。作为一个容器编排的平台,它让部署容器化应用简单而高效。K8S 的各个组件,把应用的上下线、日常维护都变得便于监控和管理。我们在接触 K8S 的过程中,平台的理解和 K8S 资源描述的 yaml 文件编写是最大的门槛。

yaml 从 0 到 1 的编写,如何让它能描述自己实际的业务需求又可以简单易懂,确实让我们有些头大。在 POC 过程中,我们选择了一些依赖较少的无状态业务。在官方给的 deployment yaml 的基础上,我们一步步去添加程序所依赖的 configmap、env、service、hpa 等资源描述。

POC 到生产落地的过程中,为了满足不同的业务开发语言的场景,我们编写了很多 yaml 的参考示例。这些 yaml 更像是一个 k8s yaml 知识库的模版,让更多对 k8s yaml 不是很熟悉的同事能够参考这些快速地把以前在 Docker Swarm 运行的业务逐步切换到 Kubernetes 试运行。

Helm

Artifact Hub

我们引入 Helm 的使用,是希望能够对 K8S yaml 做一个补充。Helm 的定义:The Kubernetes Package Manager。相对于以往的 yaml 编写,Helm 根据参数动态的将模版文件渲染成最终的配置文件,对应用本身依赖的资源更加方便地做版本迭代。yaml 的编写偏配置型的描述;helm 则可以带有一些变量和逻辑控制,而且不同的 chart 版本依赖的资源内容如 configmap、image 可以完全不同。

一开始的 helm v2 使用有很多不便的地方,比如 tiller 服务端的存在。庆幸的是,v2 到 v3 的过渡时期,刚好腾出更多时间完善 yaml 编写的一些模块。期间我们也接触了外部的 K8S 应用落地的实践分享,也尝试了一段时间用 cdk8s(cdk8s)去生成我们的部署 yaml。最终,我们考虑到应用到实际情况,同时在使用 k8s yaml 和 helm v3。

K8S Operator

接触到 k8s operator 模式,是因为我们在实际业务部署过程中,使用到了一些标准的第三方中间件如 memcached、Prometheus 等。Kubernetes Operator 是一种封装、部署和管理 k8s 应用的方法,对于这些开源应用在 K8S 上的使用,我们使用这种方式纯粹是为了偷懒,不想重复的造轮子。当然,我们也做了适合自己应用的 operator,但是不具备普遍性。所以在选择虚拟机环境下运行的那些开源组件,在 K8S 的生态下,我们更倾向于 k8s operator 模式。

结束语

从虚拟机到容器,再到把 Kuernetes 作为应用部署到规范,这几年确实走了不少弯路。这篇文章描述了一个从 0 到 1 的建设容器生态的经历的大致过程。云原生生态包括很多东西,比如 kong、Traefik、Istio,选择什么方案都没有错,只是更合适。通过 Kuernetes 落地,把云原生的观念带到日常的工作中,才是正解。


发布于: 刚刚阅读数: 3
用户头像

Rayzh

关注

还未添加个人签名 2018.11.13 加入

仅仅是个做运维的...

评论

发布
暂无评论
容器化应用:我们都经历了什么_Docker_Rayzh_InfoQ写作社区