前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >istio 常见问题: Sidecar 启动顺序问题

istio 常见问题: Sidecar 启动顺序问题

原创
作者头像
imroc
发布于 2021-05-03 11:52:44
发布于 2021-05-03 11:52:44
1.9K0
举报

本文摘自 istio 学习笔记

背景

一些服务在往 istio 上迁移过渡的过程中,有时可能会遇到 Pod 启动失败,然后一直重启,排查原因是业务启动时需要调用其它服务(比如从配置中心拉取配置),如果失败就退出,没有重试逻辑。调用失败的原因是 envoy 还没就绪(envoy也需要从控制面拉取配置,需要一点时间),导致业务发出的流量无法被处理,从而调用失败(参考 k8s issue #65502 )。

最佳实践

目前这类问题的最佳实践是让应用更加健壮一点,增加一下重试逻辑,不要一上来调用失败就立马退出,如果嫌改动麻烦,也可以在启动命令前加下 sleep,等待几秒 (可能不太优雅)。

如果不想对应用做任何改动,也可以参考下面的规避方案。

规避方案: 调整 sidecar 注入顺序

在 istio 1.7,社区通过给 istio-injector 注入逻辑增加一个叫 HoldApplicationUntilProxyStarts 的开关来解决了该问题,开关打开后,proxy 将会注入到第一个 container。

sidecar-order-1.png
sidecar-order-1.png
sidecar-order-2.png
sidecar-order-2.png

查看 istio-injector 自动注入使用的 template,可以知道如果打开了 HoldApplicationUntilProxyStarts 就会为 sidecar 添加一个 postStart hook:

2e3bb746.png
2e3bb746.png

它的目的是为了阻塞后面的业务容器启动,要等到 sidecar 完全启动了才开始启动后面的业务容器。

这个开关配置分为全局和局部两种,以下是启用方法。

全局配置:

修改 istio 的 configmap 全局配置:

代码语言:txt
AI代码解释
复制
kubectl -n istio-system edit cm istio

defaultConfig 下加入 holdApplicationUntilProxyStarts: true

代码语言:txt
AI代码解释
复制
apiVersion: v1
data:
  mesh: |-
    defaultConfig:
      holdApplicationUntilProxyStarts: true
  meshNetworks: 'networks: {}'
kind: ConfigMap

若使用 IstioOperator,defaultConfig 修改 CR 字段 meshConfig:

代码语言:txt
AI代码解释
复制
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
metadata:
  namespace: istio-system
  name: example-istiocontrolplane
spec:
  meshConfig:
    defaultConfig:
      holdApplicationUntilProxyStarts: true

局部配置:

如果使用 istio 1.8 及其以上的版本,可以为需要打开此开关的 Pod 加上 proxy.istio.io/config 注解,将 holdApplicationUntilProxyStarts 置为 true,示例:

代码语言:txt
AI代码解释
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      annotations:
        proxy.istio.io/config: |
          holdApplicationUntilProxyStarts: true
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: "nginx"

需要注意的是,打开这个开关后,意味着业务容器需要等 sidecar 完全 ready 后才能启动,会让 Pod 启动速度变慢一些。在需要快速扩容应对突发流量场景可能会显得吃力,所以建议是自行评估业务场景,利用局部配置的方法,只给需要的业务打开此开关。

完美方案: K8S 支持容器依赖

最完美的方案还是 Kubernetes 自身支持容器依赖,社区也提出了 Sidecar Container 的特性,只可惜最终还是被废弃了,新的方案还未落地,详细可参考 这篇笔记

参考资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
istio 庖丁解牛(二) sidecar injector
用户空间的Pod要想加入mesh, 首先需要注入sidecar 容器, istio 提供了2种方式实现注入:
钟华
2019/03/19
2K0
istio 庖丁解牛(二) sidecar injector
Istio实现sidecar自动注入
误入歧途
2024/05/08
2490
Istio实现sidecar自动注入
istio 常见问题: Sidecar 停止顺序问题
Istio 在 1.1 版本之前有个问题: Pod 销毁时,如果进程在退出过程中继续调用其它服务 (比如通知另外的服务进行清理),会调用失败。
imroc
2021/05/04
2K0
Istio 服务网格:深入学习网络流量和架构
作者 | Kasun Talwatta 译者 | 张卫滨 策划 | marsxxl 本文首先介绍了 Istio 的基础知识,然后结合实际的样例阐释了 Istio 是如何将 sidecar 容器注入到 Kubernetes 集群中,并实现流量拦截的。 本文最初发表于 Solo 官方博客,经原作者 Kasun Talwatta 授权,由 InfoQ 中文站翻译分享。 像 Istio 这样的服务网格项目会为我们的架构引入很多的特性和收益,包括更安全地管理集群中微服务之间的流量、服务发现、请求路由以及
深度学习与Python
2023/03/29
5940
Istio 服务网格:深入学习网络流量和架构
Istio 1.1 中的 Sidecar 资源
缺省情况下,Istio 在 Pod 创建之前将 istio-init 和 istio-proxy 注入到 Pod 之中,使用 istio-init 对 iptables 进行初始化,将业务容器的流量拦截到 istio-proxy,从而完成通信控制权的移交工作——应用容器的自发 Ingress 和 Egress 通信,都从 Envoy 中留过,Envoy 作为数据平面,需要接受来自控制面的 xDS 指令,据此作出通信决策。
崔秀龙
2019/07/23
1.4K0
istio 最佳实践: 优雅终止
本文介绍在 istio 场景下实现优雅终止时需要重点关注的点,一些容器场景通用的关注点请参考 Kubenretes 最佳实践: 优雅终止 。
imroc
2021/06/05
2.1K0
Istio 运维实战系列(1):应用容器对 Envoy Sidecar 的启动依赖问题
作者赵化冰,腾讯云高级工程师,Istio contributor,ServiceMesher管理委员,热衷于开源、网络和云计算。目前主要从事服务网格的开源和研发工作。 目录 故障现象 故障分析 解决方案 在应用启动命令中判断 Envoy 初始化状态 通过 pod 容器启动顺序进行控制 Kubernetes 支持定义 pod 中容器之间的依赖关系 解耦应用服务之间的启动依赖关系 小结 参考文档 本系列文章将介绍用户从 Spring Cloud,Dubbo 等传统微服务框架迁移到 Istio 服务网格时的一些
腾讯云原生
2020/09/10
2.8K0
Istio sidecar 注入分析
用户空间Pod要想加入服务网格, 首先需要注入sidecar container, istio 提供了2种方式实现注入:
腾讯云原生
2020/02/14
1.5K0
istio多集群链路追踪,附实操视频
这里的可观察性主要指服务网格的可观察性,也就是需要观测服务网格中运行的微服务。为什么可观察性很重要,因为随着微服务架构的流行,一个系统可能运行成百上千微服务,如果系统出现故障,定位问题带来很大的问题。有了观测系统,就能更好的分析问题发生的原因,已经更好的监控告警。服务网格可观察性主要分为三个大类,分别是log,metrics,tracing。log是指将分布式系统的日志收集起来集中存储,用于日志分析,常用的工具如efk。metrics是指收集服务网格的监控指标,进行监控告警,常用工具比如prometheus。tracing是指分布式链路追踪,用于可视化显示服务调用的依赖关系,及获取延迟数据,常用工具如zipkin,jaeger等。本文关注的是tracing,这里我们用到了zipkin作为tracing工具。
用户5166556
2023/03/18
6030
istio多集群链路追踪,附实操视频
openshift 4.3 Istio的搭建(istio 系列一)
注:不建议使用openshift 1.11(即kubernetes 3.11)安装istio,可能会出现如下兼容性问题,参见此issue
charlieroro
2020/05/20
1.2K0
(译)Istio Sidecar 注入:例外和除错
Kubernetes 环境下的 Istio 使用了 Sidecar 模型进行部署,把一个辅助容器(也就是 Sidecar)附加到业务 Pod 之中。这一过程让 Sidecar 容器和业务容器共享同样的网络栈,可以视为同一主机上的两个进程。这样一来,Istio 就能够接管业务应用的所有网络调用,就有了增强服务间通信能力的基础。
崔秀龙
2019/07/23
1.7K0
打造企业级自动化运维平台系列(十六):服务网格 Istio 详解
官方解释:An open platform to connect, secure, control and observe services.
民工哥
2024/01/18
7380
打造企业级自动化运维平台系列(十六):服务网格 Istio 详解
大规模场景下对Istio的性能优化
当前istio下发xDS使用的是全量下发策略,也就是网格里的所有sidecar(envoy),内存里都会有整个网格内所有的服务发现数据。这样的结果是,每个sidecar内存都会随着网格规模增长而增长。
tunsuy
2023/09/09
4420
Istio 系列篇二 | Istio 的安装以及入门使用
前面的 Istio 系列篇一 | 服务网格和 Istio ,主要让大家对 服务网格和 Istio 有个大概的了解。
gopher云原生
2022/02/23
4.5K0
Istio 系列篇二 | Istio 的安装以及入门使用
Istio注入SideCar原理
Istio提供一种简单的方式来建立已部署的服务的网络,具备负载均衡,服务到服务认证,监控等等功能,而不需要改动任何服务代码。
tunsuy
2023/08/19
3220
Istio注入SideCar原理
六, 跨语言微服务框架 - Istio Ingress和Egress详解(解决Istio无法外网访问问题)
在微服务中另外一个重点就是网关,网关理论包含入口网关和出口网关,传统意义上的网关很难做到出口网络控制,但是对于Istio是一件非常轻松的事情(因为所有的出口流量都会经过Istio),入口网关控制解析路由数据流向,出口网关控制对外访问的限制,在Istio中使用了 Ingress和Egress 来实现网关的功能.
喵了个咪233
2019/05/26
4.5K0
Istio Helm Chart 详解 - SidecarInjectorWebhook
关于自动注入操作的相关内容,可以参考官方文档中的相应章节,简单说来自动注入的两个先决条件:
崔秀龙
2019/07/23
1.2K0
外包精通--Istio Egress Gateway 之外部服务访问
由于所有来自启用了istio的pod的出站流量在默认情况下都被重定向到它的sidecar代理,所以在集群外部访问url取决于代理的配置。默认情况下,Istio将特使代理配置为传递未知服务请求。尽管这为开始使用Istio提供了一种方便的方法,但是配置更严格的控制通常是可取的。
Godev
2023/06/25
8050
大道至简,Istio 双向 tls服务通信详解
本文主要和大家聊一聊istio的双向tls。双向 tls支持主要针对通信方面,将明文传输的服务通信,转换为 Envoy 之间的加密通信。这一安全设置可以在全局、Namespace 或者单个服务的范围内生效。
灵雀云
2019/08/08
1.6K0
大道至简,Istio 双向 tls服务通信详解
Istio 网络:深入了解流量和架构
像 Istio 这样的服务网格项目为我们的架构引入了许多功能和优势,包括更安全地管理集群微服务之间的流量、服务发现、请求路由以及服务之间的可靠通信。
Luga Lee
2021/12/10
1.2K0
Istio 网络:深入了解流量和架构
推荐阅读
相关推荐
istio 庖丁解牛(二) sidecar injector
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档