143 lines
7.1 KiB
Markdown
143 lines
7.1 KiB
Markdown
|
|
---
|
|||
|
|
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 个要点即可得满分;完全正确需覆盖全部要点。
|
|||
|
|
|
|||
|
|
## 关联笔记
|
|||
|
|
- [[负载均衡算法]]
|
|||
|
|
- [[限流熔断降级]]
|