初创期应用架构实践 (8):交付与部署

叁叁肆2018-11-14 09:43

欢迎访问网易云社区,了解更多网易技术产品运营经验。


3.2.3 交付与部署


传统的软件部署方式中,应用软件包开发完成后交付给运维人员,运维人员需要准备 服务器资源,部署应用程序,部署相关的依赖如数据库、缓存等,这种部署方式极其烦琐, 不够灵活。在基于云原生架构中,交付和部署变得非常简单。


后端服务 

云计算服务商提供常见的后端依赖,如关系型数据库、缓存服务、对象存储、负载均 衡等服务,都是开箱即用的。直接使用这些云服务,避免了我们自己搭建这些后端依赖服 务,降低了部署的复杂性。这些服务往往都是按需计费,有专业的运维团队保证数据的可 靠,保证服务的高可用,比起我们自己手动搭建的后端服务,无论是稳定性,还是性价比 方面,直接使用云计算服务商提供的云服务都是比较不错的选择。


所以,特别在初创期应用部署的时候,我们往往不需要考虑依赖的后端服务的部署, 只需要考虑好自己的应用部署,然后直接购买相应的后端资源即可,由云计算服务商来完 成相应资源的分配及相关后端服务的部署。


Pods 与 Replication Controller 

在使用容器对我们的应用部署环境进行管理后,实现了对部署环境的版本化控制,也 保障了测试环境与生产环境的环境一致性,消除了环境不一致带来的部署时的问题。


仅使用容器的话,我们还需要购买云主机,在云主机上部署容器服务。一旦云主机出 现问题,我们还是需要手动运维,没有自动拉起,故障转移。当遇到性能瓶颈的时候,还 需要手动去购买云主机,然后再进行扩容。我们需要一个自动化的容器管理基础设施,来 改善对容器的运维,这个基础设施,也叫容器编排服务。下面我们以目前流行的容器编排 服务 Kubernetes 为例来介绍。


Kubernetes 可以自动完成资源的调度,快速完成应用的部署;当有服务节点发生故障 的时候,Kubernetes 会自动完成故障转移;Kubernetes 还提供了自动的扩缩容、无缝滚动升 级等特性。


Pod 是 Kubernetes 中的一个概念,一个 Pod 可以是一组紧密耦合的容器(比如 Docker容器)的集合,也可以仅包含一个容器,这些容器都运行在同一个物理机或者虚拟机上。 一个 Pod 中的所有容器都运行在一个共享的上下文中,共享网络命名空间,持久化地卷存 储等资源。Pod 与 Pod 之间资源互相隔离,大体上,我们可以认为一个 Pod 是一个“逻辑 主机” 。


Pod 是 Kubernetes 进行资源调度及资源分配的最小单元,通过提供了 Pod 这一层的抽 象,而不是直接去管理容器,带来了灵活性,也可以去适应更多的场景,比如传统的 LAMP, 我们就可以考虑把相关的 Apache、MySQL 等作为不同的镜像运行在一个 Pod 中。Pod 不 会持久,我们可以认为其仅仅在运行时存在,一旦被删除了,Pod 中的所有数据就都不在 了,如果有数据持久需求,需要在启动相关容器的时候,挂载外部的文件系统,以达到将 产生的数据持久化到外部存储。


实际上,我们往往不会去直接操作 Pod,而是通过 Replication Controller 来对 Pod 进行 管理,Replication Controller 提供了集群范围内的 Pod 复制及调度的能力,它保证了在所有 时间内,都有特定数量的 Pod 副本在运行,如果 Pod 副本太多了,就杀死几个,如果太少 了,就多创建几个。和直接操作 Pod 不同,Replication Controller 监管着整个集群中所有节 点上面运行的 Pod,自动完成替换掉那些被删除或者被终止的 Pod。因此,哪怕我们仅仅运 行了一个 Pod 的副本,最好还是使用 Replication Controller 来管理,因为我们的 Pod 可能会 因为出现异常而终止,而使用 Replication Controller 管理后,一旦 Pod 出现异常,Replication Controller 就会创建出新的 Pod 运行实例来替换出现问题的 Pod。


应用部署 

我们的应用在部署的时候,可以使用基于 Pod 和 Replication Controller 的方式来进行。 我们仅仅需要配置好 Pod 需要的容器镜像及版本,设定好要运行几个副本,然后将其提交 给编排服务即可。


使用这样的部署方式,极大地提高了部署效率。当我们需要高可用部署和多点部署的 时候,只要指定部署几个副本,编排服务自动帮我们完成资源分配调度并按照我们的需求 部署运行多个副本。当有部署的节点由于硬件故障或者网络原因出现故障时,编排服务又 会自动将出问题的节点删除并创建新的节点进行替换。


滚动升级及回滚 

当需要对应用进行升级的时候,容器编排服务提供了自动的滚动升级机制。我们只需要 更新一下相关配置中的 Docker 镜像版本,即可触发编排服务的自动滚动升级。滚动升级的 时候,Replication Controller 会先创建出一个使用新的镜像版本的 Pod,然后删除一个使用旧 版本镜像的 Pod,并一直重复这个过程,直到旧版本的 Pod 全部被删除为止,完成升级更新。

如果在升级过程中或者在升级结束后,我们发现了新版本的问题,就可以直接回退 Pod 使用的容器镜像版本,Replication Controller 在获知这一改变后,会像滚动升级过程那样,对 升级过程进行回退,直到所有的 Pod 全部回退到旧版本的容器镜像为止,完成版本的回滚。

网易云基础服务 

网易云基础服务基于 Kubernetes 提供了开箱即用的容器编排服务,作为企业级的容器 云平台,支持针对应用集群的一键部署,云计算资源可以弹性扩展。上述所介绍的关于容 器部署过程及应用的滚动升级、回滚操作,都可以很方便地在网易云基础服务中进行,这 提高了交付及部署效率,使得我们的功能开发在初创期可以快速地迭代开发上线。


文章节选自《云原生应用架构实践》 网易云基础服务架构团队 著


网易云计算基础服务深度整合了 IaaSPaaS 及容器技术,提供弹性计算、DevOps 工具链及微服务基础设施等服务,帮助企业解决 IT、架构及运维等问题,使企业更聚焦于业务,是新一代的云计算平台。点击可免费试用