标准答案

  1. init container 适合准备文件、等待条件或执行一次性初始化,成功后退出,失败会阻止 Pod 进入正常运行。
  2. sidecar 适合代理、日志、配置热加载等持续协作进程,但会增加资源、升级和停机协调复杂度。
  3. 共享 volume、网络和信号边界要明确,sidecar 不应无限阻塞主容器关闭。
  4. 初始化脚本要幂等、超时和最小权限,不能把迁移或外部依赖等待做成无期限循环。

题目解析

init container 按顺序运行并在主容器前成功退出,适合准备目录、生成配置或做一次性检查;sidecar 与主容器同时运行,适合代理、日志、热加载等持续协作。init 失败会阻止主容器启动,sidecar 则会影响 Pod 的资源、探针和停机协调。

初始化动作必须幂等、有限时、最小权限,不能把不可逆数据库迁移藏进每个 Pod 的 init。sidecar 要能响应 SIGTERM、在主容器退出时结束,并明确共享卷、网络、资源和失败后是否应阻止业务流量。

常见误区

  • 误区:用 init container 跑不可重入迁移。改正:使用独立、可审计、可回滚的迁移流程,并保证 init 重试安全。
  • 误区:sidecar 不响应终止信号。改正:实现关闭和 deadline,避免 Pod 长时间 Terminating。

作者信息