文档

基于容器服务的应用升级

更新时间:
一键部署

前提条件

此次示例基于阿里云专有云3.14及以上版本,最佳实践涉及阿里云容器服务Kubernetes产品,且已在环境部署完成Deployment。

背景信息

容器服务(Container Service)是一种高性能可伸缩的容器管理服务,支持企业级Kubernetes容器化应用的生命周期管理。

容器服务简化集群的搭建和扩容等运维工作,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳的Kubernetes容器化应用运行环境。容器服务是Kubernetes认证服务供应商,全球首批通过Kubernetes一致性认证的平台服务,为您提供专业的支持和服务。

  1. 容器技术。

    容器技术是一种轻量级的操作系统级虚拟化技术。用户通过容器镜像来交付应用,其中包含了应用程序及所需的运行时依赖。容器镜像具有良好的可移植性,可以在不同环境下保证部署的一致性。容器之间运行时相互隔离,具有相当好的安全性。

    容器技术避免了不同应用在同一个环境中可能存在的版本冲突,以及同一个软件在不同环境中可能存在的运行环境不一致的问题。所有容器共享宿主机的操作系统内核,这使得容器比虚拟机更轻量级,可以快速启动,并进行细粒度的资源控制。

    1. 容器技术与虚拟化。

      容器技术和传统的虚拟化并不冲突。传统的虚拟化方式是将操作系统到应用的所有要素全部包含在一起,如下图所示。1

      经典虚拟化2

      Docker+虚拟化(容器只将应用的代码和运行环境打包,镜像可以进行复用)

      结合容器和虚拟化技术,可以利用虚拟机提供弹性基础架构,提供更好的安全隔离,动态热迁移能力;同时还可以利用容器技术实现简化应用部署、运维,实现弹性应用架构。

    2. 技术特点。

      容器技术的特点是:敏捷、可移植、可控。

      敏捷:简单快速是容器技术吸引开发人员的重要特性,一致性的交付能力使得软件的交付更快,企业的开发效率更敏捷。

      可移植性:开发人员可以把容器化的应用从开发环境转移到测试环境,最终到生产环境。在这个过程中同样的镜像运行结构一致。这意味着计算能力可以跨越数据中心边界进行部署,从而让混合云中的计算能力迁移真正可行。

      可控:生产环境的应用需要保证服务等级协议(SLA),要有完善的管理能力、安全和监控能力。容器技术使应用环境标准化,开发人员可以利用自动化工具来管理基础架构和应用,保证了所有操作自动化、可控、可回溯。

应用升级

随着小步快跑、快速迭代的开发模式被越来越多的互联网企业认同和采用,应用的变更、升级频率变得越来越频繁。为了应对不同的升级需求,保证升级过程平稳顺利地进行,诞生了一系列的部署发布模式。

  1. 应用重建。

    即停机发布:把老版的应用实例完全停止,再发布新的版本。这种发布模式主要为了解决新老版本互不兼容、无法共存的问题,缺点是一段时间内服务完全不可用。3

  2. 蓝绿发布。

    蓝绿发布:在线上同时部署相同数量的新老版本应用实例。待新版本测试通过后,将流量一次性地切到新的服务实例上来。这种发布模式解决了停机发布中存在的服务完全不可用问题,但会造成比较大的资源消耗。4

  3. 滚动升级。

    滚动升级:分批次逐步替换应用实例。这种发布模式不会中断服务,同时也不会消耗过多额外的资源,但由于新老版本实例同时在线,可能导致来自相同客户端的请求在新老版中切换而产生兼容性问题。5

  4. 金丝雀发布。

    金丝雀发布:逐渐将流量从老版本切换到新版本上。若观察一段时间后没有发现问题,就进一步扩大新版本流量,同时减少老版本上流量。6

应用升级操作步骤

  1. 准备阶段。

    1. 首先登录Apsara Uni-manager运营控制台,在页面顶部的菜单栏中,单击产品>弹性计算>容器服务Kubernetes7

    2. 选择对应的组织及地域,进入容器服务页面;8

    3. 在左侧导航栏单击集群,在集群列表中单击已经创建完成的K8s集群,进入集群详情;9

    4. 在集群详情页面,在左侧导航栏单击工作负载>无状态,选择好对应的命名空间,可查看对应的Deployment;10

  2. 应用重建。

    1. 在应用重建场景下,单击需操作的Deployment操作下的更多>滚动升级>替换升级,此模式下, K8s会先删掉全部原有Pod再创建新的Pod。1112

  3. 滚动升级。

    在滚动升级场景下,单击需操作的Deployment操作下的更多>滚动升级,选择滚动升级,选择对应的不可用Pod最大数量超过期望的Pod数量,单击确定,进行滚动升级;K8s会将Pod分批次逐步替换掉,可用来实现服务热升级。

    不可用Pod最大数量:例如,当此值设置为30%时,滚动更新开始时会立即将旧Pod缩容到期望Pod个数的70%。新Pod准备就绪后,可以继续缩容旧有的Pod,然后对新的Pod扩容,确保在更新期间可用的 Pods总数在任何时候都至少为所需的Pod个数的70%。

    超过期望的Pod数量:例如,当此值为时,启动滚动更新后,会立即对新的Pod扩容,同时保证新旧Pod 的总数不超过所需Pod总数的 130%。一旦旧Pods被杀死,新的Pods可以进一步扩容, 同时确保更新期间的任何时候运行中的Pods总数最多为所需Pods总数的130%。13

  4. 蓝绿发布。

    1. 在蓝绿发布场景下,进入集群详细页面,示例图中,原Deployment详情中访问方式,由service-1提供对外服务;1415

    2. 单击原Deployment中的更多>复制创建,完成新Deployment的创建,并可对其进行升级,作为新版本;16

    3. 在新版本的Deployment详情中,单击访问方式>创建,完成新服务service-2的创建,在新版本测试完成后,由service-2服务对外提供服务,完成蓝绿发布;1718

  5. 金丝雀发布。

    1. 在金丝雀发布场景下,进入集群详细页面,在左侧导航栏中,单击路由>创建19

    2. 对服务权重进行配置:

      1. 单击开启服务权重,设置规则,添加服务详情,配置权重;实例图中50%流量会访问到旧服务service-1,50%流量则访问到新服务service-2。20

      2. 或单击灰度发布策略,可设置不同的Cookie、Header、Query部分的匹配规则,支持完整匹配和正则匹配,访问流量会到对应的服务中,完成金丝雀发布。21

通过以上的四种场景及操作,提供应用部署问题域中,升级、回滚问题的可重复、自动化的解决方案。

  • 本页导读
文档反馈