4. 配置文件结构:YAML 配置文件的设计原则
在 Kubernetes 环境容量压测巡检脚本中,YAML 配置文件是连接脚本逻辑与集群环境的“契约”。一个设计良好的配置文件应当遵循可读性优先、职责分离、默认值兜底三大原则。本章将围绕集群信息、压测参数、巡检阈值三个核心模块,拆解 YAML 配置的结构设计与调试要点。
设计原则速览:
- 可读性优先:使用清晰的键名、合理的缩进、必要的注释,避免过度嵌套。
- 职责分离:集群连接信息、压测执行参数、巡检判定阈值分属不同区块,互不耦合。
- 默认值兜底:脚本内部为每个参数提供安全默认值,YAML 中缺失时自动回退,避免空指针或异常中断。
4.1 配置文件整体结构
一个标准的压测巡检 YAML 配置文件包含三个顶级字段:cluster、stress、inspection。以下为完整结构示例:
# kubernetes-stress-inspection-config.yaml
# 版本: v2.1
# 用途: 集群容量压测与巡检参数配置
cluster:
name: "production-cluster-01"
kubeconfig: "/home/sre/.kube/config"
context: "prod-context"
namespace: "stress-test"
timeout: 30s
stress:
mode: "deployment" # 可选: deployment / job / statefulset
replicas: 10
cpu_limit: "500m"
memory_limit: "512Mi"
duration: "5m"
concurrency: 3
image: "registry.example.com/stress-ng:latest"
node_selector:
kubernetes.io/hostname: "node-01"
inspection:
interval: 10s
thresholds:
cpu_usage_percent: 80
memory_usage_percent: 85
pod_restart_count: 3
node_disk_pressure: false
api_server_latency_ms: 500
etcd_db_size_mb: 100
关键点:YAML 中不要使用 Tab 缩进,统一使用两个空格。字符串值如果包含特殊字符(如冒号、#),建议使用双引号包裹。
4.2 集群信息模块(cluster)
cluster 区块负责定义脚本如何连接目标 Kubernetes 集群。它不包含任何压测或巡检逻辑,只提供连接上下文。
| 字段 | 类型 | 必填 | 说明 | 默认值 |
|---|---|---|---|---|
name |
string | 是 | 集群标识名,用于日志和告警 | 无 |
kubeconfig |
string | 否 | kubeconfig 文件路径;若为空则使用环境变量 KUBECONFIG |
~/.kube/config |
context |
string | 否 | 指定 kubeconfig 中的 context;若为空则使用当前 context | 当前 context |
namespace |
string | 是 | 压测资源部署的目标命名空间 | default |
timeout |
duration | 否 | API Server 连接超时时间 | 30s |
避坑提示:如果
kubeconfig 和 context 同时缺失,脚本会尝试使用默认 kubeconfig 和当前 context。在多集群环境下,务必显式指定 context,避免误操作到非目标集群。
4.3 压测参数模块(stress)
stress 区块控制压测任务的执行方式。它决定了脚本创建什么样的工作负载、运行多长时间、以及如何调度到节点上。
| 字段 | 类型 | 必填 | 说明 | 默认值 |
|---|---|---|---|---|
mode |
string | 是 | 工作负载类型:deployment / job / statefulset |
deployment |
replicas |
int | 是 | 副本数,决定压测并发规模 | 1 |
cpu_limit |
string | 否 | 每个 Pod 的 CPU 资源上限 | 500m |
memory_limit |
string | 否 | 每个 Pod 的内存资源上限 | 512Mi |
duration |
duration | 是 | 压测持续时长,例如 5m、1h |
5m |
concurrency |
int | 否 | 同时创建 Pod 的并发数,控制 API 请求速率 | 1 |
image |
string | 否 | 压测容器镜像地址 | registry.example.com/stress-ng:latest |
node_selector |
map | 否 | 将压测 Pod 调度到指定节点 | 无 |
调试建议:首次压测时,建议将
replicas 设为 1、concurrency 设为 1,先验证镜像拉取和 Pod 启动是否正常,再逐步增加并发规模。
4.4 巡检阈值模块(inspection)
inspection 区块定义脚本在压测过程中持续监控哪些指标,以及触发告警的阈值。阈值设置过高会漏报,过低则导致误报,需要根据集群基线反复校准。
| 字段 | 类型 | 必填 | 说明 | 默认值 |
|---|---|---|---|---|
interval |
duration | 否 | 巡检轮询间隔 | 10s |
cpu_usage_percent |
int | 否 | 节点 CPU 使用率告警阈值(百分比) | 80 |
memory_usage_percent |
int | 否 | 节点内存使用率告警阈值(百分比) | 85 |
pod_restart_count |
int | 否 | 单个 Pod 重启次数告警阈值 | 3 |
node_disk_pressure |
bool | 否 | 是否检测节点磁盘压力状态 | false |
api_server_latency_ms |
int | 否 | API Server 响应延迟告警阈值(毫秒) | 500 |
etcd_db_size_mb |
int | 否 | etcd 数据库大小告警阈值(MB) | 100 |
校准建议:阈值不应一次性设置到位。建议先运行一次无压测的“基线巡检”,记录集群空闲时的指标值,然后在此基础上上浮 30%~50% 作为初始阈值。
4.5 配置文件结构关系图
下图展示了 YAML 配置文件中三个模块之间的数据流向与依赖关系:
4.6 参数调试与校验流程
在将配置文件投入正式压测前,建议按以下步骤进行调试与校验:
- 语法校验:使用
python -c "import yaml; yaml.safe_load(open('config.yaml'))"检查 YAML 格式是否正确。 - 字段完整性检查:脚本启动时自动校验必填字段是否存在,缺失时打印错误并退出。
- 集群连通性测试:脚本先执行
kubectl cluster-info验证cluster模块配置是否有效。 - 压测参数合理性检查:例如
replicas不能为 0,duration不能小于 30 秒。 - 阈值范围检查:百分比阈值应在 0~100 之间,延迟阈值应为正数。
调试脚本片段示例:
import yaml
import sys
def validate_config(path):
with open(path, 'r') as f:
config = yaml.safe_load(f)
required = ['cluster', 'stress', 'inspection']
for key in required:
if key not in config:
raise ValueError(f"缺少顶级字段: {key}")
# 校验 cluster 必填字段
cluster = config['cluster']
if 'name' not in cluster or 'namespace' not in cluster:
raise ValueError("cluster 模块缺少 name 或 namespace")
# 校验 stress 必填字段
stress = config['stress']
if 'mode' not in stress or 'replicas' not in stress or 'duration' not in stress:
raise ValueError("stress 模块缺少 mode/replicas/duration")
print("配置文件校验通过")
return config
if __name__ == "__main__":
validate_config(sys.argv[1])
4.7 多环境配置管理建议
在实际 SRE 工作中,通常需要管理开发、测试、预发、生产等多套环境的配置。推荐以下管理策略:
- 环境变量覆盖:YAML 中支持
${ENV_VAR}占位符,脚本在加载时自动替换。例如namespace: "stress-${ENV}"。 - 配置分层:将公共参数放在
base.yaml,环境差异参数放在dev.yaml/prod.yaml,脚本启动时合并。 - 版本控制:所有 YAML 配置文件纳入 Git 仓库,每次修改附带变更记录。
- 配置热加载:巡检脚本支持
SIGHUP信号重新加载配置文件,无需重启进程即可调整阈值。
最佳实践:生产环境的巡检阈值建议比开发环境严格 10%~20%。例如开发环境 CPU 阈值设为 85%,生产环境设为 75%,提前发现资源瓶颈。