Files
autumn-recruitment/05.架构/ci-cd/K8s 发布与可观测性体系_test.md

143 lines
7.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags: [test/review, architecture, arch/cicd]
create time: 2026-08-09 12:00
---
# K8s 发布与可观测性体系 — 测试题
## 概述
本测试覆盖 RollingUpdate 策略详解、蓝绿部署 vs Canary 发布、HPA/VPA 自动扩缩容、Prometheus 指标采集链路、Grafana Dashboard 数据源以及日志收集方案。共 10 道题目(6 选择 + 3 填空 + 1 简答)。
---
## 一、选择题(6道,由浅入深)
> **难度阶梯**: Q1-Q2 基础概念 → Q3-Q4 核心原理 → Q5-Q6 深入应用/边界场景
### Q1(基础)— 考察定义层面
K8s Deployment 的 RollingUpdate 策略中,`maxUnavailable=0` 和 `maxSurge=1` 的含义是:
A. 更新期间最多有 0 个新 Pod 同时运行
B. 逐台升级,保证零停机——每次只启动 1 个新 Pod,旧 Pod 终止后再启动下一个
C. 所有 Pod 同时替换,然后检查是否可用
D. 先删除全部旧 Pod 再创建新 Pod
### Q2(基础)→
Canary 发布相比蓝绿部署的主要优势是什么?
A. 回滚速度更快
B. 资源消耗更低
C. 风险最低——只有小部分用户先体验新版本
D. 实现复杂度更低
### Q3(进阶)— 核心原理
HPA(Horizontal Pod Autoscaler)扩容的基本计算公式是:
A. `targetReplicas = currentReplicas * desiredMetricValue / currentMetricValue`
B. `targetReplicas = ceil(currentReplicas * currentMetricValue / desiredMetricValue)`
C. `targetReplicas = currentReplicas + (currentMetricValue - desiredMetricValue)`
D. `targetReplicas = floor(currentReplicas * 2)`
### Q4(进阶)— 比较/辨析
以下关于 Prometheus Pull 模式的说法哪个是正确的?
A. Push 模式下失联的服务会立即被标记为 down
B. Pull 模式下失联的 service 会自动被忽略(不再收到数据即标记为 down)
C. Prometheus 不支持自定义业务指标
D. Prometheus 的采集间隔是实时的,没有延迟
### Q5(深入)— 场景推理
某秒杀系统需要在流量洪峰到来前自动扩容。以下方案最合理的是:
A. 完全依赖 HPA,等 CPU 使用率上升后触发扩容
B. 提前设置 minReplicas >= 预期峰值的 80%,配合 HPA 动态调整上限
C. 使用 VPA Auto 模式代替 HPA
D. 手动扩容并在活动结束后手动缩容
### Q6(深入)— 源码级/边界场景
关于 Prometheus 的四种核心指标类型,以下匹配哪个是错误的?
A. Counter — 单调递增计数器,适合画 Rate 曲线
B. Gauge — 可上可下的仪表值,如活跃连接数
C. Histogram — 分桶统计,自动生成 count + sum + bucket
D. Summary — 服务端计算分位数(P50/P99),客户端不做计算
---
## 二、填空题(3道)
### F1 — 填空1
K8s 中新 Pod 必须通过 _____ Probe 才会被加入 Service 的 Endpoint 列表。如果失败,即使新 Pod 已 Running 也不会接收流量。livenessProbe 用于检测进程存活并可能触发重启;而 _____ Probe 用于决定"这个 Pod 是否可以接受流量"。
> **提示**: 两个空填同一种类型的探针名称。
### F2 — 填空2
Fluentd/Filebeat DaemonSet 采集日志后的两种典型存储方案:**ELK 栈**建立_____索引(搜索能力强但存储成本高);**Loki**不建立全文索引,只索引_____(Labels),存储成本极低。
> **提示**: ELK 的核心搜索机制和 Loki 的区别。
### F3 — 填空3
VPA(Vertical Pod Autoscaler)的 Offline 模式行为是_____——只推荐建议值而不直接应用,人工审核后手动调整。这种模式适合_____阶段。
> **提示**: 原文 VPA 表格中的描述。
---
## 三、简答题(1道)
### S1
面试官问:"HPA 能基于自定义业务指标(如 Kafka 消费 lag、QPS)进行扩缩容吗?如何做到?"请给出完整回答,包括必要的组件链和技术路径。
> **答题框架提示**:
> 1. 明确回答能否
> 2. 解释 Custom Metrics API 的工作原理
> 3. 列出关键组件及其职责
> 4. 结合实际场景举例
---
## 参考答案与解析
### 选择题答案
| 题号 | 正确答案 | 解析 |
|------|---------|------|
| Q1 | B | maxSurge=1 表示更新过程中允许超出目标副本数 1 个,maxUnavailable=0 表示不允许任何不可用实例。逐台升级确保零停机,但速度慢。生产环境高可用场景推荐此配置。 |
| Q2 | C | Canary 只有少量流量进入新版本(如 10%),大部分用户还在稳定版。这样风险最低——有问题也只影响一小部分用户。蓝绿需要双倍资源,且一旦切到新版本就是全部流量都有问题。 |
| Q3 | B | `ceil(current * current_metric / desired_metric)`。例如当前 5 副本,CPU 91%,目标 70% → ceil(5 × 91 / 70) = ceil(6.5) = 7。注意分子是当前值、分母是目标值。 |
| Q4 | B | A 错:Push 模式下挂了停止发数据但采集器不知道不存在了;C 错:通过 Custom Metrics API + adapter 可以读任意业务指标;D 错:采集间隔 15~60 秒,有分钟级延迟。 |
| Q5 | B | HPA 不是实时的(依赖 metrics-server 15~60 秒采样),等 CPU 上升再扩容已经来不及。minReplicas 预热的做法可以应对已知高峰。VPA 不适合因为它是垂直扩缩(改资源配额需重建 Pod),不能快速应对流量变化。 |
| Q6 | D | D 错误——Summary 的分位数计算在**客户端**完成(SDK 内部算 P50/P99),服务器端不做计算但有额外开销。Histogram 是在服务器端做分桶统计。原文原话:Summary = 客户端计算分位数。 |
### 填空题答案
| 题号 | 答案 | 解析 |
|------|------|------|
| F1 | `readiness`;`readiness` | Readiness Probe 决定 Pod 是否能接收流量(加入 Endpoint)。livenessProbe 检测进程是否存活。二者职责不同:Ready = 可服务,Live = 没挂。 |
| F2 | `全文`;`Labels` | ELK 对每个字段建 inverted index 支持全文检索,但 JSON 结构化索引非常占空间。Loki 只对 Labels 建索引,查询时先用 label 过滤再检索内容,存储成本低几个数量级。 |
| F3 | `只推荐不应用`;`微服务刚上线` | 刚上线阶段运维难以精确预估资源需求,可以让 VPA 学习实际使用模式后给出最优建议。Offline 模式不会自动修改 Pod Spec,避免误配导致业务中断。 |
### 简答题参考答案
S1:**参考答案要点**:
1. **明确回答**:可以。HPA 不仅支持 CPU/内存指标,还支持自定义业务指标。
2. **Custom Metrics API**:HPA 通过 Kubernetes Custom Metrics API 获取任意指标值,不限于 K8s 原生指标。
3. **关键组件链**:Prometheus adapter(或 custom-metrics-adapter)负责将 Prometheus 中的数据暴露给 Custom Metrics API。流程:App 暴露 /metrics → Prometheus scrape → adapter 查询 Prometheus → HPA 读取指标 → 计算目标副本数。
4. **实际例子**:根据 Kafka consumer lag 扩缩容——当 lag > 阈值时 HPA 增加 Pod 数加快消费;lag < 阈值时缩容节省资源。也可以根据 QPS、错误率等业务指标触发。
**评分标准**:答出任意 2 个要点即可得满分;完全正确需覆盖全部要点。
## 关联笔记
- [[负载均衡算法]]
- [[限流熔断降级]]