应用服务网格 ASM-Sidecar未就绪导致Pod启动失败:规避方案
规避方案
在Istio 1.7及以后版本,社区通过给istio-injector注入逻辑增加一个叫HoldApplicationUntilProxyStarts的开关来解决了该问题,开关打开后,Proxy将会注入到第一个Container,istio-proxy容器先于业务容器启动。
开关配置分为全局和局部两种,下面介绍两种启用方法。

需要注意的是,打开开关后,意味着业务容器需要等Sidecar完全Ready后才能启动,会让Pod启动速度变慢一些。在需要快速扩容应对突发流量场景可能会显得吃力,所以建议您自行评估业务场景,利用局部配置的方法,只给需要的业务打开此开关。
- 全局配置
- 执行以下命令,编辑IOP CR资源。
kubectl edit iop private-data-plane -n istio-system
在spec.values.global.proxy字段下添加以下配置:
holdApplicationUntilProxyStarts: true
- 执行以下命令,确认最新日志无报错。
kubectl logs -n istio-operator $(kubectl get po -n istio-operator | awk '{print $1}' | grep -v NAME)
- 执行以下命令,确认IOP CR是正常状态。
kubectl get iop -n istio-system
- 执行以下命令,滚动升级已添加到网格的服务。
kubectl rollout restart deployment nginx -n default
其中,nginx为示例服务,default为命名空间,请替换为实际取值。
- 执行以下命令,确认Pod重启成功。
kubectl get pod -n default | grep nginx
- 执行以下命令,确认Pod正常添加了postStart lifecycle,并且istio-proxy容器放在了第一个位置。
kubectl edit pod nginx-7bc96f87b9-l4dbl
- 执行以下命令,编辑IOP CR资源。
- 局部配置
如果使用Istio 1.8及其以上的版本,可以为需要打开此开关的Pod加上proxy.istio.io/config注解,将holdApplicationUntilProxyStarts置为true。
以default命名空间下nginx服务为例,用户其他服务操作类似。
kubectl edit deploy nginx -n default
在spec.template.metadata.annotations字段下添加以下配置:
proxy.istio.io/config: | holdApplicationUntilProxyStarts: true
- 容器云平台是什么_CCE证书_云平台容器技术
- 如何使用应用管理与运维平台_应用管理_应用运维_微服务应用治理
- 云容器实例_CCI_CCE容器实例弹性伸缩到CCI服务_VK插件
- 如何使用应用管理与运维平台环境管理功能_环境管理_创建环境_纳管资源
- 华为云CCE_华为云容器引擎CCE_容器高性能调度
- 如何快速体验应用管理与运维平台_快速体验_应用管理与运维平台_功能
- 如何创建用户并授权使用应用管理与运维平台_应用管理与运维平台_创建用户_用户授权
- 华为云CCE_华为云容器引擎CCE_容器微服务流量治理
- GaussDB集群搭建_SQL数据库是谁发明的_高斯数据库集群搭建_华为云
- 工作负载_云容器引擎_什么是工作负载