如何在OpenShift中实现Pod内容器B退出时容器A随退或重建Pod?
实现容器B退出时容器A随之退出/替换Pod的方法
针对你要实现的需求(当cache-store-2退出时,让app-server-2也退出或替换整个Pod),下面是几种实用的解决方案,直接修改你的Deployment配置就能生效:
方案1:给app-server-2添加检测cache-store-2状态的存活探针
让app-server-2的存活探针定期检查cache-store-2的可用性,一旦cache-store-2退出,探针失败后OpenShift会重启app-server-2;如果cache-store-2无法恢复,Deployment会自动替换整个不健康的Pod。
修改app-server-2的存活探针配置:
- name: app-server-2 image: 'app:latest' # 保留原有资源、端口等配置 livenessProbe: tcpSocket: port: 6379 # 直接检测cache-store-2的Redis端口 initialDelaySeconds: 10 # 容器启动10秒后开始探针 periodSeconds: 5 # 每5秒检测一次 failureThreshold: 3 # 连续失败3次触发重启
方案2:开启Pod进程命名空间共享,让app-server-2检测Redis进程
通过开启Pod的进程命名空间共享,让app-server-2可以直接看到cache-store-2的进程,用命令探针判断Redis是否在运行。
- 在Pod的spec里添加共享配置:
spec: shareProcessNamespace: true # 开启进程命名空间共享 containers: # 原有两个容器的配置...
- 修改app-server-2的存活探针为命令式:
- name: app-server-2 image: 'app:latest' # 保留原有配置 livenessProbe: exec: command: - sh - -c - "pgrep -f redis-server" # 检查Redis进程是否存在 initialDelaySeconds: 10 periodSeconds: 3 failureThreshold: 2
当Redis进程退出,pgrep返回非0值,探针失败后触发容器重启,最终Pod会被替换。
方案3:依赖Pod默认重启策略强化绑定
Pod默认的restartPolicy: Always会在容器退出时尝试重启,但结合上面的探针配置后,当cache-store-2持续无法恢复,kubelet会多次尝试重启失败后,标记Pod为不健康,Deployment会自动创建新Pod替换它。
如果你的业务要求两个容器必须同时在线,优先选方案1或2,能更精准地绑定两者的状态。
内容的提问来源于stack exchange,提问作者Mayank Singh Rathore
相关产品推荐
相关产品推荐

