初步使用Kubernetes或Kubernetes在生产环境中已经稳定运行了一段时间,如果想要接入Istio服务网格,那么对Kubernetes集群版本也有要求,如果读者正在使用的Kubernetes集群不支持对应的Istio版本,就需要对Kubernetes进行升级。下面给出一个升级Kubernetes的方案。
对于Kubernetes的升级,如果版本跨度较大,在线升级是非常困难的,可以使用了如下方法。
- 提前构建几套新的Kubernets集群,新集群使用较新的Kubernetes和Istio版本,Node规模较小。
- 修改与Kubernetes交互的PaaS平台所有服务的代码,兼容所有集群。
- 开发迁移工具,将业务应用对应在Kubernetes集群的资源对象迁移到新集群,尤其做好Inbound和Outbound的处理,并设置正确的Pod.metadata.annotations字段。如果不治理Dubbo等协议,要做好应用类型的盘点,关闭流量拦截功能。必要时可以编写工具,去注册中心抓取服务信息,保证服务信息的准确性和实时性。
- PaaS平台做好应用服务迁移前后的标记,相关的服务程序要兼容新旧集群同时在线。对用户无感知,用户使用体验和迁移前后无区别。
- 梳理应用迁移的流程并制作文档,尽量将所有流程自动化。
- 迁移过程不断回收老集群的Node,添加新集群的Node,充分利用资源。
- 应用迁移做好快速回滚方案,尽量保持应用在新旧集群同时在线,稳定运行后再回收旧集群的实例。
不管是容器化和还是服务网格,支撑它们不断推广的通常是降低成本、提高效率、提升SLA三方面。运维部和基础架构部作为后台技术部门,对业务研发团队提供支撑、赋能、引领。充分了解这些理念,可以让我们对技术的思考更加全面,也更加有利于新技术的落地。
利用Istio提供的三大能力,挖掘Istio的使用场景并解决生产环境的痛点,有利于服务网格的落地。这里有一些Istio的使用场景供参考。
- 将限流、熔断、超时、重试等HTTP流量治理功能平台化,让业务研发人员可以自主申请这些功能,充分保护业务应用的弹性。
- 利用Istio的资源对象PeerAuthentication对应用做双向TLS加密,提高应用安全性,大大提升项目上线前的安全审核效率。
- 使用Istio的资源对象AuthorizationPolicy对应用做访问控制,可以完美替代传统IP白名单,不再受固定IP的限制。
- Istio的流量镜像功能,可以轻松地将生产环境的宝贵流量复制到其他环境,赋能质量部门。
- 利用Istio的HTTP路由功能修改头信息,可以做到流量的染色和应用环境的隔离,极大提高研发人员开发新特性的效率和测试人员的测试效率。
- 利用Istio的HTTP路由功能,根据HTTP头信息区分流量,转发到不同的服务版本,可以按地区或用户属性等,对新的算法进行AB测试。
- 使用Istio的流量调度策略和服务子集功能,可以实现金丝雀发布,保障生产环境快速迭代下的SLA。
- 利用Istio的Envoy代理日志和应用链路信息,绘制应用拓扑,收集调用链信息,快速定位生产故障。
- 利用Istio的故障注入功能,配合ChaosBlade构建混沌工程。提前收集应用在故障下的表现并改进。