需求一
A 容器负责授权管理,当用户更改了授权时,需要重启 B 容器生效。
解决方案
通过 sidecar 启动一个 http server,并提供两个接口,接口一用于 K8S 的存活探针;接口二用于接收重启信号,供容器 A 调用。当收到重启信号时,修改接口一返回值,使其返回 500 http code,从而让 K8S 重启 Pod 内容器。
方案优点
不用修改容器 B,只需要新增一个 sidecar 容器,结合 Pod 内容器共用 pause 容器的 network namespace 特性,相当于给容器 B 增加了一个重启功能的 http 接口。
需求二
A 容器会在运行期间更改 B 容器的配置,但是 B 容器不支持热加载配置(例如实时修改日志收集 filebeat 的配置),需要重启才能生效。
解决方案
新增 sidecar 容器,提供存活探针接口。并 watch 配置文件,如果有变更,就修改存活探针接口的返回值,使其返回 500 http code,从而让 K8S 重启 Pod 内容器。