一、工具定位与互补性
工具 | 核心能力 | 检查范围 |
---|---|---|
kubeval | 校验 YAML 语法和 API 版本兼容性 | 确保资源配置符合 Kubernetes 版本规范 |
kube-score | 检查安全配置与最佳实践 | 识别资源限制缺失、权限过高等问题 |
协同作用:
-
kubeval 确保配置文件的语法正确性,避免低级错误导致部署失败。
-
kube-score 确保配置遵循安全与性能最佳实践,降低生产环境风险。
二、整合校验流程
1. 本地手动校验
# 步骤 1:使用 kubeval 检查语法和 API 版本
kubeval --strict --exit-on-error ./manifests/*.yaml
# 步骤 2:使用 kube-score 检查最佳实践
kube-score score --exit-one-on-warning ./manifests/*.yaml
2. 自动化脚本整合
创建 validate.sh
脚本,一键运行双校验:
#!/bin/bash
# 检查 kubeval
echo "Running kubeval..."
kubeval --strict --exit-on-error $@
if [ $? -ne 0 ]; then
echo "kubeval validation failed!"
exit 1
fi
# 检查 kube-score
echo "Running kube-score..."
kube-score score --exit-one-on-warning $@
if [ $? -ne 0 ]; then
echo "kube-score validation failed!"
exit 1
fi
echo "All checks passed!"
使用方式:
./validate.sh ./manifests/deployment.yaml
三、CI/CD 流水线集成
1. GitHub Actions 示例
name: Kubernetes Config Validation
on: [push]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# 步骤 1:kubeval 校验
- name: Run kubeval
uses: instrumenta/kubeval-action@v1
with:
files: ./k8s/*.yaml
kubernetes_version: "1.27"
strict: true
# 步骤 2:kube-score 校验
- name: Run kube-score
uses: docker://zegl/kube-score
with:
args: score --exit-one-on-warning ./k8s/*.yaml
2. GitLab CI 示例
stages:
- validate
kubeval-check:
stage: validate
image: garethr/kubeval
script:
- kubeval --strict --exit-on-error ./k8s/*.yaml
kube-score-check:
stage: validate
image: zegl/kube-score
script:
- kube-score score --exit-one-on-warning ./k8s/*.yaml
四、校验场景与示例
1. 校验 Helm 渲染后的模板
# 渲染 Helm Chart 并校验
helm template my-chart | tee /dev/tty | kubeval --strict -
helm template my-chart | tee /dev/tty | kube-score score -
2. 忽略特定规则
# 忽略 kubeval 的缺失 Schema 警告
kubeval --ignore-missing-schemas deployment.yaml
# 忽略 kube-score 的资源限制检查
kube-score score --ignore-test container-resources deployment.yaml
五、校验结果处理
1. kubeval 典型问题
-
错误示例:
ERR - deployment.yaml - my-app: spec.replicas: Invalid type. Expected: integer, given: string
修复:将
spec.replicas
的值从字符串"3"
改为整数3
。
2. kube-score 典型问题
-
错误示例:
CRITICAL: Container Resources (my-container): CPU limit is not set
修复:添加
resources.limits.cpu
字段。
六、进阶用法
1. 自定义校验规则
-
kubeval:使用本地 Schema 文件校验私有 CRD:
kubeval --schema-location=file:///schemas --strict deployment.yaml
-
kube-score:定义自定义规则文件(
custom-rules.yaml
):- id: require-annotations description: All resources must have 'owner' annotation severity: CRITICAL resource: "*" field: metadata.annotations.owner value: required
运行:
kube-score score -r custom-rules.yaml deployment.yaml
2. 输出格式与报告
-
JSON 报告:
kubeval --output=json deployment.yaml > kubeval-report.json kube-score score -o json deployment.yaml > kube-score-report.json
-
CI 友好格式:
kubeval --output=tap deployment.yaml kube-score score --output-format=ci deployment.yaml
七、总结
整合优势:
-
全面覆盖:从语法到安全配置的全方位检查。
-
快速反馈:在开发阶段提前拦截问题,减少调试时间。
-
自动化保障:通过 CI/CD 强制校验,确保生产配置合规。
推荐流程:
-
本地开发阶段:使用脚本或 IDE 插件实时校验。
-
代码提交时:通过 Git 钩子(pre-commit)触发校验。
-
CI/CD 流水线:强制阻断未通过校验的部署。
通过结合 kubeval
和 kube-score
,可显著提升 Kubernetes 配置的健壮性,降低运维风险。