DevOps与阿里云容器服务(三)

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: ### 前言 你若问十个哲学家什么是『哲学』通常你会得到十一种答案(有一种是你自己的)。 你若问十个持续交付布道师什么是『DevOps』,你恐怕得到的是上百种答案(因为你自己也有好几种)。 只有一个哲学问题是严肃的,那就是生与死。

前言

你若问十个哲学家什么是『哲学』通常你会得到十一种答案(有一种是你自己的)。

你若问十个持续交付布道师什么是『DevOps』,你恐怕得到的是上百种答案(因为你自己也有好几种)。

U10337P1482DT20140723145551.jpg

只有一个哲学问题是严肃的,那就是生与死。

而对于DevOps只有三个问题是严肃的

1.如何重建你的系统      (How to recreate your system?)
2.如何安全地部署你的系统 (How to safely change your system)
3.部署后的问题监控与解决 (When something has gone wrong)

而今天我们要谈的是如何安全的部署你的系统,部署这个名词包含了很多的含义,最简单的解释就是如何让你的程序运行在最终的环境上。但是部署的方式上面有非常多的最佳实践。接下来我们来讨论下常见的几种发布方式,以及这些发布方式和容器结合的使用。

发布策略

常见的发布策略有蓝绿发布、金丝雀发布(灰度发布)、ABTest,在国内的开发者中,对这几个概念有独立的理解。蓝绿发布通常被大家成为热部署;金丝雀发布在国内的名头完全被他的变种发布方式盖过了,主要是灰度发布与ABTtest,下面我们来详细的为大家解释一下他们之间的异同。

蓝绿发布

在发布的过程中用户无感知服务的重启,通常情况下是通过新旧版本并存的方式实现,也就是说在发布的流程中,新的版本和旧的版本是相互热备的,通过切换路由权重的方式(非0即100)实现不同的应用的上线或者下线。

greendeployment.png

bluedeployment.png

金丝雀发布

通过在线上运行的服务中,新加入少量的新版本的服务,然后从这少量的新版本中快速获得反馈,根据反馈决定最后的交付形态。
canarydeployment.png

灰度发布

灰度发布是通过切换线上并存版本之间的路由权重,逐步从一个版本切换为另一个版本的过程。虽然马丁·扶老耳朵大人认为灰度发布与金丝雀发布是等同的,但是在具体的操作和目的上面个还是有些许差别的。金丝雀发布更倾向于获取快速的反馈,而灰度发布更倾向于从一个版本到另一个版本平稳的切换。
canary-release-1.png
canary-release-2.png
canary-release-3.png

ABTest

ABTest和灰度发布非常像,但是从发布的目的上,可以简单的区分灰度发布与ABTest,ABTest侧重的是从A版本或者B版本之间的差异,并根据这个结果进行决策。最终选择一个版本进行部署。因此和灰度发布相比,ABTest更倾向于去决策,和金丝雀发布相比,ABTest在权重和流量的切换上更灵活。
abtesting.png

阿里云容器服务实现蓝绿发布

下面我们通过一个简单的例子来演示蓝绿发布的流程。假设我们要进行蓝绿发布的应用是一个nginx的静态页面,初始的应用模板如下

nginx-v1:
  image: 'registry.aliyuncs.com/ringtail/nginx:1.0'
  labels:
    aliyun.routing.port_80: nginx
  restart: always

部署后页面的效果如下
635465b5b738a248975dabd6aff19204.png

点击变更配置
95bbe369b1759b527c894ffcfa65eabf.png

选择变更的发布策略与新版本服务的配置
241244debc3d1339f2f363ab9479ab4f.png

nginx-v2:
  image: 'registry.aliyuncs.com/ringtail/nginx:2.0'
  labels:
    aliyun.routing.coexist: true
    aliyun.routing.port_80: nginx
  restart: always

在蓝绿发布中,新版本与旧版本不能共用同一个名字;如果共享同一个路由地址,那么需要添加aliyun.routing.coexist的label,这个label的含义是,当前的服务与其他服务共享路由地址,在蓝绿发布的场景中,为了保证应用的零宕机切换,新版本的服务的路由权重默认为0,需要通过路由管理页面进行调整,方可进行流量切换。在进行发布的过程中,会经历两个状态,一个是蓝绿发布中,一个是蓝绿发布待确认。

7e861ed9770267948dd004d9818a9fce.png
09cee4dc0f8d93b2b1018dfe031f313c.png

蓝绿发布中表示,新版本的服务尚未启动完成,而蓝绿发布待确认表示新版本的服务已经启动完成,此时需要进行发布确认或者发布回滚方可进行下一次发布。进入应用的详情页面,可以看到新版本的应用和旧版本的应用并存。其中蓝色的表示旧版本的服务,绿色表示新版本的服务。如果一个服务在前后两个版本中都存在且没有变化,那么会出现黄色的标签,表示这个应用在蓝绿发布中不会出现任何变化。
2938d9729d92b322e35fd07a5f3af3bc.png
点击路由列表,调整与之对应的路由权重。
6298b980543df7c0a00055891ff86a4a.png
如图所示,旧版本服务的权重为100,新版本服务的权重为0,下面我们将旧版本服务的权重调整为0,新版本服务的权重调整为100

33564af8bd4f8798d8c829f88f63ab00.png
3ccf3311cd5258e4015dd446e46ca249.png

由于默认路由服务是进行会话保持的,您可以打开一个新的浏览器窗口,访问新的版本,结果如下。
d332d4762eb9ae4a8df2f0db73683444.png

当整个发布流程验证完毕后,需要进行发布确认,方可进行下一次发布。
9fbc7129f428236874b35cf349ce89cf.png
点击发布确认后,查看应用的详情,可以看到应用的服务列表已经更新了,旧的服务已经完全下线删除了
a4c1be7512c09f24367f18d18211a5cf.png

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
29天前
|
敏捷开发 Kubernetes 测试技术
阿里云云效产品使用问题之 拉取阿里云acr仓库的镜像时,配置内网地址还是公网地址
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
20天前
|
Kubernetes Devops 持续交付
容器化技术在DevOps中的应用
【7月更文挑战第6天】容器化技术在DevOps中的应用极大地提高了软件开发的效率和可靠性。通过自动化部署、持续集成与持续交付、环境一致性以及资源管理和监控等功能,容器化技术为开发人员和运维人员提供了更加便捷、高效的管理和部署方式。随着云计算技术的不断发展和普及,容器化技术将在DevOps中发挥越来越重要的作用。
|
22天前
|
存储 弹性计算 运维
阿里云容器服务Kubernetes版(ACK)部署与管理体验评测
阿里云容器服务Kubernetes版(ACK)是一个功能全面的托管Kubernetes服务,它为企业提供了快速、灵活的云上应用管理能力。
89 2
|
28天前
|
运维 Kubernetes 安全
《阿里云产品四月刊》—享道出行:容器弹性技术驱动下的智慧出行稳定性实践(1)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
|
28天前
|
弹性计算 Cloud Native 数据库
《阿里云产品四月刊》—享道出行:容器弹性技术驱动下的智慧出行稳定性实践(2)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
|
28天前
|
弹性计算 Serverless 调度
《阿里云产品四月刊》—享道出行:容器弹性技术驱动下的智慧出行稳定性实践(3)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
|
28天前
|
弹性计算 Kubernetes 调度
《阿里云产品四月刊》—享道出行:容器弹性技术驱动下的智慧出行稳定性实践(4)
阿里云瑶池数据库云原生化和一体化产品能力升级,多款产品更新迭代
|
8天前
|
API 开发工具 数据安全/隐私保护
阿里云云效操作报错合集之流水线镜像已经生成,但容器没有出现,是什么导致的
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
8天前
|
持续交付 开发工具 对象存储
阿里云云效产品使用合集之构建物如何上传到阿里云OSS
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
8天前
|
敏捷开发 Kubernetes 测试技术
阿里云云效产品使用合集之流水线创建时,不想选择节点和容器,该如何操作
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。

相关产品

  • 容器计算服务