第28章|Kubernetes 入门 2:配置、机密与资源管理

上一章你会「把应用跑起来」;这一章解决「跑的时候吃什么配置、机密怎么藏、会不会把节点撑爆」。 核心三条线:ConfigMap 管非敏感配置,Secret 管敏感数据(但别迷信 base64), requests/limitsHPA 管算力与弹性。

Config

ConfigMap:可热更的配置面

  • 挂成文件或注入环境变量
  • 体积与更新行为要心里有数
  • immutable 可减少误触与控制器抖动
Secret

Secret ≠ 加密

  • base64 只是编码
  • RBAC + etcd 加密 + 外部密钥系统
  • 禁止写进镜像与日志
Capacity

资源与弹性

  • requests 参与调度,limits 是上限
  • 内存超 limit → OOMKill
  • HPA 按指标扩缩副本

1. ConfigMap:把配置从镜像里拽出来

配置进镜像 = 每改一次配置就要重建镜像。ConfigMap 把键值对或整文件交给 Pod 使用,常见两种方式:

注意:单个 ConfigMap 建议控制在合理大小(官方约 1Mi 量级);超大配置考虑拆对象或配置中心。
配置注入:ConfigMap vs Secret 两条通路 env(启动快照) vs volume(文件,可配合热重载) ConfigMap app.conf keys Secret Opaque / TLS / … Pod envFrom CM snapshot at start volume mount /etc/config/… secretKeyRef / volume mount never log · restrict RBAC tmpfs optional (secret volume) Runtime view ENV: LOG_LEVEL=info FILE: /etc/config/app.yaml Secret file mode 0400 ExternalSecret → sync (optional)
图 1:ConfigMap 可走 env 或 volume;Secret 同理。env 是启动快照,volume 更适合证书文件与需轮换的凭据。

2. Secret:必须配合「权限与加密」一起谈

API 里 Secret 的 data 字段是 base64——这是传输/存储格式,不是加密。能 kubectl get secret -o yaml 的人就能解码。 正经做法包括:RBAC 限制谁可读 Secret、集群启用 etcd 加密、生产用 Vault / 云 KMS / External Secrets Operator 把真正密钥放在集群外同步进来。

3. requests 与 limits:调度、QoS 与 OOM

requests:调度器用来选节点——「这台机器还剩多少可分配资源」。不设 requests 可能导致所有 Pod 堆在同一节点,最后一起 OOM。

limits:运行时硬顶。CPU 超限倾向节流(变慢);内存超限会被 cgroup OOMKill(容器重启)。

QoS 大类(简化):requests=limits → Guaranteed;只设其一或不等 → Burstable;都没设 → BestEffort(节点压力下最先被驱逐)。

实践:至少为内存设 requests;limits 略高于 requests 给一点突发;Java/Go 等要配合 JVM/GOMAXPROCS 理解,避免 limit 与进程自认 CPU 数不一致。
节点上的资源槽位:requests 调度 · limits 封顶 scheduler uses requests; kubelet enforces limits Node allocatable CPU pool (e.g. 8 cores allocatable) Pod A req 250m Pod B req 500m lim 2 free schedulable Memory pool Pod A req 256Mi lim 512Mi Pod B req 1Gi lim 1Gi (Guaranteed mem) mem > limit → OOMKilled · CPU > limit → throttled
图 2:requests 决定「能否调度上去、占多少账」;limits 决定「跑起来能不能突破」。内存超 limit 即 OOM。

4. HPA:按指标自动扩缩副本

HorizontalPodAutoscaler 根据 CPU 利用率(或自定义指标如 QPS、队列深度)在 minReplicasmaxReplicas 之间调整 Deployment 副本数。 需要 metrics-server(或自定义 metrics API)。扩缩行为可用 behavior 配置,避免「抖动扩缩」。

HPA 闭环:指标 → 决策 → 副本数 CPU% / custom metric → scale Deployment replicas metrics HPA target 70% CPU min 2 max 10 Deployment replicas: 3 → 5 scale out load drops → scale in (with stabilization)
图 3:HPA 持续采集指标,调整 Deployment 副本;缩容常需 stabilization window 防止抖动。

5. 最小清单

← 上一章:K8s 入门 1 下一章:K8s 进阶(Helm、Kustomize) →