3. 环境准备与工具链:kubectl、helm、metrics-server、prometheus-operator、kube-state-metrics 部署

在开始容量性能压测与巡检脚本编排之前,必须构建一套标准化的工具链底座。本章将指导你完成从命令行工具到监控数据采集层的全链路部署,确保后续压测指标可采集、巡检脚本可执行、故障排查可追溯。

3.1 工具链全景与版本约束

以下表格列出了本课程使用的核心工具及其版本要求,所有组件均部署在 Kubernetes v1.28+ 集群之上:

组件 版本 部署方式 核心用途
kubectl v1.28+ 二进制 / 包管理器 集群交互、资源编排、故障排查
helm v3.14+ 二进制 / 脚本 Chart 管理、应用部署、版本回滚
metrics-server v0.7+ Helm Chart / YAML Pod/Node CPU、内存实时指标采集
prometheus-operator v0.72+ Helm Chart (kube-prometheus-stack) Prometheus 实例管理、告警规则、ServiceMonitor
kube-state-metrics v2.12+ 随 prometheus-operator 部署 Kubernetes 对象状态指标暴露
版本对齐提示: 本课程所有压测脚本和巡检规则均基于上述版本验证。若使用更低版本,可能导致 metrics-server 的 /metrics/resource 端点不可用,或 prometheus-operator 的 CRD 版本不兼容。

3.2 kubectl 与 helm 安装

kubectl 和 helm 是操作集群的双手,建议优先使用包管理器安装以保持版本一致性。

3.2.1 kubectl 安装步骤

  1. 下载二进制: 从官方 release 页面获取与集群版本匹配的 kubectl。
  2. 设置执行权限并移入 PATH:
curl -LO "https://dl.k8s.io/release/v1.28.0/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
kubectl version --client
  1. 配置 kubeconfig: 将集群管理员提供的 kubeconfig 文件放置到 ~/.kube/config,或通过 KUBECONFIG 环境变量指定。
  2. 验证集群连通性:
kubectl cluster-info
kubectl get nodes -o wide

3.2.2 helm 安装步骤

curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
helm version
生产建议: 在离线环境或内网环境中,提前下载 helm 二进制和常用 Chart 包(如 prometheus-community 仓库)到本地 artifacts 服务器,避免部署时因网络超时而中断。

3.3 metrics-server 部署

metrics-server 是 Kubernetes 核心指标管道(Metrics Pipeline)的必备组件,它为 kubectl top 命令和 HPA(水平自动扩缩)提供数据来源。

3.3.1 使用 Helm 部署

helm repo add metrics-server https://kubernetes-sigs.github.io/metrics-server/
helm repo update

helm upgrade --install metrics-server metrics-server/metrics-server \
  --namespace kube-system \
  --set args={--kubelet-insecure-tls} \
  --set resources.requests.cpu=50m \
  --set resources.requests.memory=100Mi
注意: 参数 --kubelet-insecure-tls 仅在测试环境或自签名证书场景下使用。生产环境应配置正确的 kubelet 证书,或使用 --kubelet-ca-cert 指定 CA 证书路径。

3.3.2 验证部署

kubectl -n kube-system get pods -l app.kubernetes.io/instance=metrics-server
kubectl top nodes
kubectl top pods -A

若 kubectl top nodes 返回正常数据,说明 metrics-server 已成功接入集群指标管道。

3.4 prometheus-operator 与 kube-state-metrics 部署

prometheus-operator 通过 CRD(Custom Resource Definition)将 Prometheus 的部署、配置、告警规则全部声明式管理。kube-state-metrics 作为其子 Chart 自动部署,负责将 Deployment、StatefulSet、Pod 等 Kubernetes 对象的状态转换为 Prometheus 指标。

3.4.1 使用 kube-prometheus-stack 一键部署

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

cat <<EOF > prometheus-values.yaml
prometheus:
  prometheusSpec:
    retention: 15d
    resources:
      requests:
        memory: 2Gi
        cpu: 500m
    serviceMonitorSelectorNilUsesHelmValues: false
    ruleSelectorNilUsesHelmValues: false

alertmanager:
  enabled: true
  config:
    global:
      resolve_timeout: 5m
    route:
      receiver: 'default-receiver'
    receivers:
    - name: 'default-receiver'
      webhook_configs:
      - url: 'http://alert-webhook.monitoring.svc:8080/alert'

grafana:
  enabled: true
  adminPassword: "admin123"
  persistence:
    enabled: true
    size: 10Gi

kubeStateMetrics:
  enabled: true
EOF

helm upgrade --install kube-prometheus prometheus-community/kube-prometheus-stack \
  --namespace monitoring --create-namespace \
  --values prometheus-values.yaml

3.4.2 验证组件状态

kubectl -n monitoring get pods
kubectl -n monitoring get servicemonitors
kubectl -n monitoring get prometheusrules

确认以下 Pod 均处于 Running 状态:

  • prometheus-kube-prometheus-prometheus-0 — Prometheus 主实例
  • alertmanager-kube-prometheus-alertmanager-0 — Alertmanager 告警管理
  • kube-prometheus-grafana-xxxxx — Grafana 可视化面板
  • kube-prometheus-kube-state-metrics-xxxxx — kube-state-metrics 指标暴露

3.5 工具链架构关系

下图展示了本课程工具链各组件之间的数据流与依赖关系:

Kubernetes 压测工具链架构图 Kubernetes 压测工具链架构 Kubernetes 集群 (v1.28+) kubectl helm metrics-server prometheus-operator kube-state-metrics Prometheus 数据采集目标 Node Exporter / Pod 资源指标 / Kubernetes 对象状态 / 自定义业务指标

3.6 部署后快速验证清单

完成所有组件部署后,执行以下验证步骤确保工具链就绪:

验证项 命令 预期结果
kubectl 连通性 kubectl cluster-info 返回集群 master 和 coreDNS 地址
helm 仓库 helm repo list prometheus-community 仓库状态正常
metrics-server 指标 kubectl top nodes 显示各节点的 CPU 和内存使用率
Prometheus 目标 kubectl -n monitoring port-forward svc/kube-prometheus-prometheus 9090:9090
浏览器访问 localhost:9090/targets
所有 target 状态为 UP
kube-state-metrics 指标 kubectl -n monitoring port-forward svc/kube-prometheus-kube-state-metrics 8080:8080
访问 localhost:8080/metrics
返回 kube_deployment_status_replicas 等指标
巡检脚本前置条件: 后续章节的巡检脚本将直接调用 kubectl top 获取实时资源数据,并通过 Prometheus API 查询历史趋势。请确保 metrics-server 和 Prometheus 的 Service 名称与端口在集群内可解析,建议将 Prometheus Service 固定为 prometheus-operated.monitoring.svc.cluster.local:9090。

3.7 常见部署问题与排查

  • metrics-server 启动失败: 检查 kubelet 证书是否被 metrics-server 信任。查看日志 kubectl -n kube-system logs -l app.kubernetes.io/instance=metrics-server,若出现 x509: certificate signed by unknown authority,则需配置 --kubelet-insecure-tls 或挂载正确的 CA 证书。
  • Prometheus 无法采集 kube-state-metrics: 确认 ServiceMonitor 的 namespaceSelector 和 labelSelector 是否匹配。使用 kubectl -n monitoring get servicemonitors -o yaml 检查 selector 配置。
  • helm 部署超时: 镜像拉取策略建议设置为 IfNotPresent,并在 values 中指定 imagePullSecrets 以应对私有仓库场景。

至此,工具链底座已全部就绪。下一阶段将基于这套环境开展容量性能压测场景设计与脚本编排。