提示:本网站现在为维护调试状态

Kubernetes Pod 生命周期 + Init Container + Sidecar

Choyeon
Choyeon
2026年9月9日 1 分钟阅读 379 阅读
686 字 2,490 字符 更新于 2026年11月8日
Kubernetes Pod 生命周期 + Init Container + Sidecar
目录

Pod 是 K8s 最小调度单位,理解其状态流转和容器协作模式是应用稳定性的前提。一个 Pod 中多个容器的启动/终止顺序、探针配置的细微差别直接影响线上表现。

Pod 生命周期状态机

创建 → PodScheduled(调度到节点)→ Init Containers 依次执行 → 主容器启动 → PostStart 钩子 → readiness 通过才被 service 接收流量 → liveness 失败重启 → 删除时 SIGTERM → preStop → terminationGracePeriodSeconds 超时强制杀。

apiVersion: v1
kind: Pod
metadata: { name: web-app-pod, labels: { app: web } }
spec:
  terminationGracePeriodSeconds: 60
  shareProcessNamespace: true
  serviceAccountName: web-sa
  initContainers:
    - name: wait-for-db
      image: bitnami/postgresql:16
      command: ["/bin/sh", "-c", "until pg_isready -h postgres -p 5432 -U app; do echo wait; sleep 3; done;"]
    - name: migrate-db
      image: registry.example.com/app:${APP_VERSION}
      command: ["alembic", "upgrade", "head"]
      envFrom: [{ configMapRef: { name: web-config } }]
      volumeMounts: [{ name: app-secret, mountPath: /run/secrets, readOnly: true }]
    - name: fetch-assets
      image: amazon/aws-cli
      command: ["aws", "s3", "sync", "s3://app-assets/static/", "/var/www/static/", "--delete"]
      volumeMounts: [{ name: static-assets, mountPath: /var/www/static }]
  containers:
    - name: app
      image: registry.example.com/app:${APP_VERSION}
      ports: [{ containerPort: 8000, name: http }]
      lifecycle:
        postStart: { exec: { command: ["/bin/sh", "-c", "echo started >> /var/log/app/boot.log"] } }
        preStop:
          exec: { command: ["/bin/sh", "-c", "sleep 5; kill -SIGTERM 1; while pidof app >/dev/null; do sleep 1; done;"] }
      readinessProbe: { httpGet: { path: /health/ready, port: http }, initialDelaySeconds: 3, periodSeconds: 5 }
      livenessProbe: { httpGet: { path: /health/live, port: http }, initialDelaySeconds: 15, periodSeconds: 20, failureThreshold: 3 }
      startupProbe: { httpGet: { path: /health/started, port: http }, periodSeconds: 5, failureThreshold: 30 }
      resources:
        requests: { cpu: 100m, memory: 256Mi }
        limits:   { cpu: 1000m, memory: 1Gi }
      volumeMounts:
        - { name: static-assets, mountPath: /app/static, readOnly: true }
        - { name: app-logs, mountPath: /var/log/app }
    - name: envoy-sidecar
      image: envoyproxy/envoy:v1.30
      lifecycle:
        preStop: { exec: { command: ["/bin/sh", "-c", "curl -X POST http://localhost:15000/healthcheck/fail; sleep 10;"] } }
    - name: fluentbit-sidecar
      image: fluent/fluent-bit:3.0
      volumeMounts: [{ name: app-logs, mountPath: /var/log/app, readOnly: true }]
  volumes:
    - { name: static-assets, emptyDir: {} }
    - { name: app-logs, emptyDir: {} }
    - { name: app-secret, secret: { secretName: web-secret } }

Init 容器与 Sidecar 模式

Init Containers 按顺序逐一执行,成功后主容器才启动。适合做数据库等待、数据迁移、静态资源拉取。Sidecar 和主容器共享网络/卷,提供主容器无侵入的代理(istio/envoy)、日志收集(fluentbit)。

容器类型 启动时机 与主容器关系 用途示例
Init Container 主容器之前串行 成功一次即可退出 等待DB、数据迁移
Sidecar 容器 与主容器并行 同生命周期同退 Service Mesh代理
Sidecar 容器 与主容器并行 生命周期相同 日志收集fluentbit
Main App 容器 Init完成后 业务主进程 Web服务API
Ephemeral 容器 任意时刻debug注入 临时 调试故障Pod

最佳实践

永远配 startupProbe 给冷启动慢的应用,preStop 里睡几秒等待 service 摘掉端点再终止,避免流量进来时进程已死掉。readiness 判断数据库依赖,不要启动就 ready。

X微博Telegram

本文作者

投票

你最希望 Rosetta 优先加入哪项功能?

社区投票(演示数据,可后台删除)

评论 (4)

0 / 3000
机器学习萌新
机器学习萌新2026年9月30日

代码示例里那个 SQL 查询是不是应该加个 LIMIT?不然数据量大的时候全表扫描会很慢哦。

开源贡献者小Z
开源贡献者小Zoss-z.dev2026年9月29日

请问一下,文中提到的连接池配置,如果是在高并发场景下,一般设置多少比较合适?

自由撰稿人阿秋
自由撰稿人阿秋qiuwrites.blog2026年9月29日

作为一个刚入行的后端新人,这篇文章帮我理清了好多概念,谢谢博主持续输出高质量内容!

咖啡与代码
咖啡与代码2026年9月29日

哈哈,楼主的踩坑经历和我一模一样!我当时就是没注意到这个配置,排查了整整两天,看到这篇文章泪目了。

相关文章

Zero Trust 安全架构入门:永不信任,始终验证

Zero Trust 安全架构入门:永不信任,始终验证

零信任安全模型系统入门:以"永不信任,始终验证"为核心原则,打破传统边界防护(VPN=内部可信)的思维。从身份认证(MFA/SAML)、设备健康检查、最小权限 RBAC、微隔离 mTLS、持续信任评分到可观测审计链路的 6 大支柱详解,附落地实施路线。

1 分钟阅读
Rust 所有权与借用机制:彻底理解生命周期

Rust 所有权与借用机制:彻底理解生命周期

系统攻克 Rust 最独特概念:所有权规则、可变/不可变借用约束、引用生命周期标注。通过编译错误示例 + 修复方案,彻底掌握借用检查器思维方式,写出安全零抽象开销的系统代码。

1 分钟阅读
Linux 性能调优:perf_events + bpftrace + BCC

Linux 性能调优:perf_events + bpftrace + BCC

从 CPU、内存、IO、网络四个维度,使用 perf_events 采样堆栈、bpftrace 一行脚本追踪内核点、BCC 工具集 biolatency/offcputime,快速定位生产服务器性能瓶颈,附真实排查思路。

1 分钟阅读
PostgreSQL 查询优化技巧

PostgreSQL 查询优化技巧

深入掌握 PostgreSQL 查询优化的核心方法:从 EXPLAIN ANALYZE 执行计划解读,到索引类型选择(B-tree/GIN/BRIN)、统计信息更新、连接策略调整、分区表设计,全方位提升数据库查询性能。

1 分钟阅读
Docker Compose 生产部署实战

Docker Compose 生产部署实战

本文深入讲解 Docker Compose 在生产环境中的最佳实践,覆盖多阶段构建、健康检查、资源限制、日志配置、网络隔离、密钥管理等核心话题,助你构建稳定可扩展的容器化部署方案。

1 分钟阅读
测试金字塔:单元/集成/E2E 测试比例与落地

测试金字塔:单元/集成/E2E 测试比例与落地

系统解析测试金字塔架构:从底层单元测试(大量快速、Mock 隔离依赖)、中层集成测试(服务/数据库/消息协作真实交互)、顶层 E2E 测试(真实用户路径少量精测)的推荐比例 70% / 20% / 10%,附项目覆盖率指标与落地实践。

1 分钟阅读