在kubernetes 1.18以前没有 sidecar 的概念
sidecar 容器的角色是用户主观赋予的。
对 Istio 用户来说,一个常见的困扰是:sidecar 和用户容器的在 Pod 终止阶段,是 sidecar 和普通容器的生命周期的不确定性。关闭pod时我们会给一个pod的terminationGracePeriodSeconds关闭时间用于处理余下的请求。
但是istio是自动注入模式,我们没有控制istio-proxy的启动和关闭。如果istio-proxy先与业务容器停止,那业务容器本身所有请求都处理不了。
为了彻底解决上述痛点,从 kubernets 1.18版本开始,k8s 内置的 Sidecar 功能将确保 sidecar 在正常业务流程开始之前就启动并运行,即通过更改pod的启动生命周期,在init容器完成后启动sidecar容器,在sidecar容器就绪后启动业务容器,从启动流程上保证顺序性。而 Pod 终止阶段,只有当所有普通容器都已到达终止状态, 才会向sidecar 容器发送 SIGTERM 信号。
所以在1.18以前这个模式是有问题的。建议3.0直接默认安装1.18.6,并在自动注入程序是标注istio-proxy为 Sidecar