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 安装步骤
- 下载二进制: 从官方 release 页面获取与集群版本匹配的 kubectl。
- 设置执行权限并移入 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
- 配置 kubeconfig: 将集群管理员提供的 kubeconfig 文件放置到
~/.kube/config,或通过KUBECONFIG环境变量指定。 - 验证集群连通性:
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 工具链架构关系
下图展示了本课程工具链各组件之间的数据流与依赖关系:
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以应对私有仓库场景。
至此,工具链底座已全部就绪。下一阶段将基于这套环境开展容量性能压测场景设计与脚本编排。