Istio 升级新方式:金丝雀升级

简介: Istio 1.6 推出了渐进式的升级方式:金丝雀升级,为相对头疼的 Istio 升级问题提供了一种解决方案。

前言

自 1.5 版本开始,Istio 就弃用了之前使用 Helm 的安装方式。而 1.6 发布也有一段时间了,目前都已经到了 1.6.4 版本,就升级部分,Istio 1.6 推出了渐进式的升级方式:金丝雀升级,为相对头疼的 Istio 升级问题提供了一种解决方案。

Istio 不支持跨版本升级。本文仅讲解从 1.5 版本升级到 1.6 版本。如果您使用的是旧版本,请先升级到 1.5 版本。

金丝雀升级

顾名思义,金丝雀升级可以让新老版本的 istiod 同时存在,并允许将所有流量在由新版控制平面 istiod-canary 控制之前,先将一小部分工作负载交由新版本 istiod-canary 控制,并进行监控,渐进式的完成升级。该方式比原地升级安全的多,也是现在推荐的升级方式。

控制平面升级

首先需要下载新版本 Istio 并切换目录为新版本目录。

安装canary版本,将revision字段设置为canary

$ istioctl install --set revision=canary

这里会部署新的 istiod-canary,但并不会对原有的控制平面造成影响,部署成功后会看到两个并行的 istiod

$ kubectl get pods -n istio-system
NAME                                        READY   STATUS    RESTARTS   AGE
pod/istiod-85745c747b-knlwb                 1/1     Running   0          33m
pod/istiod-canary-865f754fdd-gx7dh          1/1     Running   0          3m25s

这里还可以看到新版的 sidecar injector 配置:

$ kubectl get mutatingwebhookconfigurations
NAME                            CREATED AT
istio-sidecar-injector          2020-07-07T08:39:37Z
istio-sidecar-injector-canary   2020-07-07T09:06:24Z

数据平面升级

只安装 canary 版本的控制平面并不会对现有的代理造成影响,要升级数据平面,并将他们指向新的控制平面,就需要在 namespace 中插入 istio.io/rev 标签。

例如,想要要升级 default namespace 的数据平面,需要添加 istio.io/rev 标签并删除istio-injection标签,以指向 canary 版本的控制平面:

$ kubectl label namespace default istio-injection- istio.io/rev=canary

注意:istio-injection 标签必须删除,因为该标签的优先级高于 istio.io/rev 标签,保留该标签将导致无法升级数据平面。

在 namespace 更新成功后,需要重启 Pod 来重新注入 Sidecar:

$ kubectl rollout restart deployment -n default

当重启成功后,该 namespace 的 pod 将被配置指向新的istiod-canary控制平面,使用如下命令查看启用新代理的 Pod:

$ kubectl get pods -n default -l istio.io/rev=canary

同时可以使用如下命令验证新 Pod 的控制平面为istiod-canary

$ istioctl proxy-config endpoints ${pod_name}.default --cluster xds-grpc -ojson | grep hostname
    "hostname": "istiod-canary.istio-system.svc"

这时 default namespace 内的 Pod 就完成了金丝雀升级,接下来就可以进行验证,确定这些 Pod 有没有因为 Istio 升级而导致功能异常。

原地升级 & 降级

目前原地升级有很大的概率通不过升级检测,导致无法升级,不推荐这种升级方式,这里就不做介绍了,详情见官方文档

并且虽然 Istio 提供了降级方式,但是经过测试降级的体验并不好,并且出现了由于不支持的 CRD apiVersion 导致无法降级的情况,所以请谨慎升级。

总结

总体来说,金丝雀升级的出现很好的解决了控制平面渐进式升级的需求,但是由于istioctl upgrade命令支持的场景和版本太少以及 Istio 整体架构的更改,目前的原地升级体验很差。

最近还爆出了谷歌将把 Istio 捐给一个新成立基金会的消息,看来 Istio 要走的路还很长。

目录
相关文章
|
16天前
|
监控 安全 Cloud Native
云原生安全:Istio在微服务架构中的安全策略与实践
【10月更文挑战第26天】随着云计算的发展,云原生架构成为企业数字化转型的关键。微服务作为其核心组件,虽具备灵活性和可扩展性,但也带来安全挑战。Istio作为开源服务网格,通过双向TLS加密、细粒度访问控制和强大的审计监控功能,有效保障微服务间的通信安全,成为云原生安全的重要工具。
38 2
|
1月前
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
53 8
|
1月前
|
Kubernetes 负载均衡 安全
Istio在微服务中释放服务网格的力量
Istio在微服务中释放服务网格的力量
50 4
|
3月前
|
负载均衡 监控 安全
Istio:微服务治理的超级英雄,一键解锁你的服务网格超能力,让管理复杂变简单!
【8月更文挑战第31天】随着云原生技术的发展,微服务架构成为主流,但其复杂性与管理难题也随之增加。Istio作为开源服务网格平台,通过独特的数据平面和控制平面设计,实现了微服务通信的透明管理,简化了治理复杂度。本文将对比Istio与传统微服务管理方法,详细介绍Istio的架构及其工作原理,包括Envoy代理、服务发现、负载均衡、流量管理、安全认证以及监控等功能。Istio不仅简化了微服务治理,还提供了强大的流量控制和安全机制,使开发者能更高效地管理应用。
71 2
|
3月前
|
开发者 项目管理 开发工具
震惊!单人开发者如何成功过渡到团队协作?Xamarin 项目管理经验大揭秘,让你的开发之路一帆风顺!
【8月更文挑战第31天】Xamarin 是移动应用开发领域的热门跨平台工具,适用于个人开发者及团队。个人开发时需明确需求、运用版本控制(如 Git)并合理规划项目结构以增强代码可维护性。团队协作时,则需建立有效沟通渠道、统一代码规范、严格版本控制及合理分配任务,以提升开发效率与项目质量。
63 1
|
3月前
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
在5G电信领域,Kubernetes集群中部署微服务至关重要,但也带来了重大的安全挑战。Istio作为一个强大的开源服务网格,能有效地管理这些微服务间的通信,通过其控制平面自动将Sidecar代理注入到各微服务Pod中,确保了安全且高效的通信。Istio的架构由数据平面和控制平面组成,其中Sidecar代理作为Envoy代理运行在每个Pod中,拦截并管理网络流量。此外,Istio支持多种Kubernetes发行版和服务,如EKS等,不仅增强了安全性,还提高了应用性能和可观测性。
75 0
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
|
5月前
|
Kubernetes 监控 负载均衡
Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
本文介绍了服务网格(Service Mesh)的概念及其在微服务架构中的重要性。微服务强调围绕业务构建团队和去中心化的数据管理,带来更高的灵活性和扩展性。然而,随着服务数量增加,网络通信成为挑战,包括服务发现、路由和安全等问题。 Service Mesh如Istio应运而生,通过边车代理解决服务间通信,提供服务发现、负载均衡、智能路由、安全和监控等功能。它与Kubernetes结合,增强了容器环境的服务管理能力。Istio的bookinfo示例展示了其在多语言微服务中的应用,简化了代码中的服务调用逻辑,使开发更专注于业务本身。
670 3
Istio:微服务开发的终极利器,你还在为繁琐的通信和部署流程烦恼吗?
|
Dubbo Java 应用服务中间件
开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比
开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比
1092 7
|
安全 前端开发 Cloud Native
Istio 探索:微服务的流量管理、安全性和策略加固
Istio 探索:微服务的流量管理、安全性和策略加固
97 0
|
Kubernetes 前端开发 Dubbo
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)
Spring Boot+gRPC构建微服务并部署到Istio(详细教程)