Skip to content

K8s 运维:探针 / 发布 / 扩缩容 / 监控 / 排障 / 安全 ​

一、健康探针(Probes) ​

探针失败后果用途
livenessProbe重启容器检测死锁/卡死,活着但不健康就重启
readinessProbe从 Service 摘除(不接流量)未就绪时不转发流量,就绪后再加入 Endpoints
startupProbe重启容器慢启动应用,成功前不执行 liveness/readiness(防误杀)

检查方式:httpGet / tcpSocket / exec / grpc。 关键参数:initialDelaySeconds、periodSeconds、timeoutSeconds、failureThreshold。

高频坑:liveness 检查依赖外部服务(如 DB),外部抖动会导致容器被误重启 → 制造雪崩。liveness 应只检查"自身是否卡死"。

二、发布策略 ​

  • 滚动更新(RollingUpdate):默认。用 maxSurge(最多超出期望副本数)和 maxUnavailable(最多不可用数)控制节奏,逐批替换,保证不中断。
  • 重建(Recreate):先全删再全建,会短暂中断,适合不兼容升级。
  • 蓝绿(Blue-Green):两套环境切换,秒级回滚(需 Ingress/Service 切流,非 K8s 原生,需工具)。
  • 金丝雀(Canary):先给小比例流量验证,再逐步放量(可用两个 Deployment + Service 权重,或 Istio/Argo Rollouts)。
  • 回滚:kubectl rollout undo deployment/x [--to-revision=n]。

三、扩缩容 ​

  • HPA(水平):按指标(CPU/内存/自定义,如 QPS)调整副本数。依赖 metrics-server。
  • VPA(垂直):调整 Pod 的 requests/limits。
  • Cluster Autoscaler:节点不够时增删节点。
  • KEDA:基于事件(队列长度等)的弹性伸缩。

四、可观测性(监控/日志/追踪) ​

  • 监控指标:Prometheus(拉取 + 时序库)+ Grafana(可视化);K8s 指标经 kubelet/cAdvisor、kube-state-metrics 暴露。
  • 日志:容器标准输出 → 节点日志文件 → 采集(Fluent Bit/Fluentd/Filebeat)→ 集中存储(ELK/Loki)。
  • 追踪:OpenTelemetry / Jaeger,分布式链路。
  • 三大支柱:Metrics、Logs、Traces。

五、常见故障排查(高分实操题) ​

Pod 状态异常:

  • Pending:调度失败。kubectl describe pod 看 Events(资源不足、亲和性、PVC 未绑、污点)。
  • ImagePullBackOff / ErrImagePull:镜像名/标签错、私有仓库缺 imagePullSecret、网络不通。
  • CrashLoopBackOff:容器反复退出。看 kubectl logs <pod> --previous、退出码(137=OOMKill/SIGKILL,1=应用错误)、describe 事件。
  • OOMKilled:超内存 limit,调大 limit 或查内存泄漏。
  • Terminating 卡住:finalizer 未清、优雅退出超时(terminationGracePeriodSeconds)、节点失联。
  • Running 但不 Ready:readiness 探针失败,检查探针配置与应用健康端点。

常用命令:

bash
kubectl get pods -o wide
kubectl describe pod <name>            # Events 是排查金矿
kubectl logs <pod> [-c container] [--previous] [-f]
kubectl exec -it <pod> -- sh
kubectl get events --sort-by=.lastTimestamp
kubectl top pod / node                 # 需 metrics-server
kubectl get ep <svc>                   # 看 Service 后端是否为空

"Service 访问不通"排查链(经典):

  1. kubectl get ep <svc> → Endpoints 是否为空?空则 selector 不匹配或无就绪 Pod。
  2. Pod 是否 Ready?readiness 探针配置对否。
  3. Service 端口/targetPort 是否正确?
  4. 节点上 kube-proxy 规则、CNI 是否正常?
  5. NetworkPolicy 是否拦截?

六、安全 ​

  • RBAC:Role/ClusterRole + RoleBinding/ClusterRoleBinding,决定"谁能对什么资源做什么"。
  • ServiceAccount:Pod 的身份,用于访问 apiserver 或云资源(IRSA/Workload Identity)。
  • NetworkPolicy:Pod 级网络隔离。
  • Pod Security:限制特权容器、root、capabilities(Pod Security Admission)。
  • Secret 管理:etcd 加密、外部 KMS/Vault、避免明文入库。
  • 镜像安全:私有仓库、镜像扫描、最小基础镜像、只读根文件系统、非 root 运行。

七、高频速答 ​

Q:liveness 和 readiness 的区别? A:liveness 失败重启容器(治卡死);readiness 失败从负载均衡摘除(控流量)。生命周期不同、目的不同。

Q:优雅停机怎么保证? A:K8s 先发 preStop hook、把 Pod 从 Endpoints 摘除,再发 SIGTERM,等待 terminationGracePeriodSeconds 后 SIGKILL。应用要处理 SIGTERM 做优雅退出。

Q:如何做到零停机发布? A:滚动更新 + readiness 探针 + 优雅停机 + 足够副本 + PodDisruptionBudget。

Q:容器退出码 137 是什么意思? A:128+9=SIGKILL,常见于 OOMKilled 或被强制杀死。

Q:HPA 不生效? A:缺 metrics-server、未设 requests、指标不可用、或已达 min/max 副本。

糌粑的面经笔记 · VitePress 版