阿里云服务网格ASM 基于Istio ,对Istio 进行了云上托管和适配,并且新增了相关功能,以及大规模服务网格场景下的性能优化等。作为业内首个全托管Istio兼容的阿里云服务网格产品ASM,一开始从架构上就保持了与社区、业界趋势的一致性,控制平面的组件托管在阿里云侧,与数据面侧的用户集群独立。ASM产品是基于社区Istio定制实现的,在托管的控制面侧提供了用于支撑精细化的流量管理和安全管理的组件能力。通过托管模式,解耦了Istio组件与所管理的K8s集群的生命周期管理,使得架构更加灵活,提升了系统的可伸缩性。从2022年4月1日起,阿里云服务网格ASM正式推出商业化版本, 提供了更丰富的能力、更大的规模支持及更完善的技术保障,更好地满足客户的不同需求场景, 详情可见产品介绍:https://www.aliyun.com/product/servicemesh
背景
像所有软件一样,您的服务网格应该保持最新。ASM Follow 社区版本节奏,每季度发布新版本,定期发布补丁以修复错误和安全漏洞。
为了减少客户的版本升级频率和降低升级风险,ASM 推出了金丝雀升级方式,以支持实例跨ASM 次要版本进行升级。
也就是对服务网格的控制平面执行金丝雀升级方式。以便在将工作负载切换到新版本之前验证控制平面功能。
ASM 的升级管理
ASM 的 “升级管理”菜单下提供了 针对ASM 实例版本升级的功能,目前支持两种升级方式:
- 原地升级
- 金丝雀升级 (ASM 版本要求:企业版或者旗舰版,且版本>=1.12.4.58)
ASM 版本格式说明:
\<major>.\<minor>.\<patch>.\<asm-patch>[-\<sequence>-aliyun]
其中:
- major: 主要版本
- minor: 次要版本
- patch: 修订版本
- \<major>.\<minor>.\<patch> 对应社区版本,比如1.12.4
- asm-patch: asm 的修订版本, 对应asm 在社区版本的基础上的修订。比如1.12.4.58 其中58 对应这里的asm-patch
- sequence: 对应为版本代码对应的Git Commit
相对于原地升级,金丝雀升级方式可以支持先验证新版本,然后功能验证无误后再切换为当前版本,提供给业务一种更稳妥的升级方式。特别是跨一个次要版本的升级情况,比如从1.12.4 升级到1.14.5 之类的。
金丝雀版本升级可用于minor 版本有变化情况下的升级方式,比如从1.12.4 升级到1.13.4 或者 1.14.5 ,最多支持跨一个次要版本
仅asm-patch 版本有变化的情况,采用原地升级方式即可。
Sidecar 注入说明以及如何验证金丝雀版本
当一个ASM 实例开启金丝雀升级后,对应这个ASM 实例的控制面 会同时存在两个版本 ,比如若从ASM 1.12.4.58 金丝雀到 1.13.4 的某个版本,会同时存在1.12.4 和 1.13.4 两个控制面版本
对应ACK/ASK 集群下我们的部署的业务服务 ,我们一般是给其所在namespace 打上了对应的注入标签,
默认是istio-injection=enabled 标签,对应会注入同版本的sidecar 容器。
当两个版本同时存在时,namespace 标签下业务注入的sidecar 版本的映射关系说明如下:
当前版本
istio-injection=enabled 标签注入的sidecar 对应为asm 当前版本,并连到当前asm 版本对应的控制面。
额外地也可以显示地通过给namespace 打上istio.io/rev=$revision 标签标明需要注入的sidecar 版本, 其中$revision 变量格式为x-y-z, 比如1-12-4
也可以通过给namespace 打上istio.io/rev=stable 标签标明需要注入的sidecar 版本为当前的ASM 版本。
注:
对同一个namespace ,不应该同时存在 istio-injection 和 istio.io/rev 两个标签。
金丝雀版本
类似地,若业务服务需要注入金丝雀版本对应的sidecar, 我们可以采用给namespace 打上如下标签:
istio.io/rev=$revision 或者 istio.io/rev=canary ,建议使用 istio.io/rev=$revision 方式。
其中$revision 对应格式为版本的x-y-z 方式,比如1-13-4。
常规操作,举例说明如下:
- 首先,我们在ack 集群下新建一个用于验证金丝雀版本的namespace ,比如canary
- 然后 kubectl label ns canary istio.io/rev=1-13-4
- 最后,在canary namespace 下部署对应测试用的业务服务即可,对应该业务的deployment 会注入1.13.4 版本的sidecar, 并连接到1.13.4 版本的istiod 控制面。
FAQ
- 当金丝雀版本切换为正式版本时,对应之前部署的业务服务注入的sidecar 仍旧为老版本,我们如何升级到新版本呢?
按照提示进入数据面的升级,可以看到待升级的工作负载,然后点击 “滚动升级” 触发业务服务deployment的滚动更新即可。