环境准备:K8s集群搭建与工具链部署

容量基线校准的第一步是搭建一个可复现、可销毁的压测环境。本章将指导你完成K8s集群(Minikube / Kind)、命令行工具(kubectl / Helm)以及压测工具(wrk / k6)的部署,确保后续压测数据采集与Helm Chart发布治理在统一的基础设施层上运行。

环境选择建议: 本地开发与单机压测推荐Minikube;需要模拟多节点调度、网络延迟或持久化存储时,优先使用Kind(Kubernetes in Docker)。两种集群均支持Helm Chart的完整生命周期管理。

2.1 集群搭建:Minikube vs Kind

两种本地集群方案在资源开销、启动速度、网络模型上存在差异,下表从压测场景出发进行对比:

对比维度 Minikube Kind
底层驱动 虚拟机(VirtualBox / HyperKit / KVM2) Docker容器(每个节点一个容器)
启动时间 2–5分钟(含VM启动) 30–60秒(纯容器化)
多节点支持 支持(需指定 --nodes) 原生支持,通过配置文件定义
持久化存储 内置 hostPath / 动态PV 需额外部署 CSI 驱动
网络模型 CNI 插件(Calico / Flannel) 内置 kindnetd(基于iptables)
压测适用场景 单机功能验证、小规模容量摸底 多节点调度测试、网络策略验证
容量基线校准建议: 首次压测使用Minikube快速验证Helm Chart部署与wrk/k6连通性;正式基线采集时切换至Kind,利用其多节点能力模拟真实调度行为。

2.2 集群搭建步骤(Kind)

以下以Kind为例,展示一个包含1个控制平面+2个Worker节点的集群配置:

# 1. 创建 kind-config.yaml
cat <<EOF > kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
  - role: control-plane
  - role: worker
  - role: worker
EOF

# 2. 启动集群
kind create cluster --config kind-config.yaml --name k8s-baseline

# 3. 验证节点状态
kubectl get nodes -o wide

# 4. 查看集群信息
kubectl cluster-info --context kind-k8s-baseline

Minikube启动命令(备选):

minikube start --cpus=4 --memory=8192 --nodes=3 \
  --kubernetes-version=v1.28.0 \
  --driver=docker \
  --cni=calico

2.3 kubectl 与 Helm 客户端安装

工具链版本必须与集群版本对齐,避免API兼容性问题。下表列出推荐版本与验证命令:

工具 推荐版本 安装方式 验证命令
kubectl v1.28.x(与集群小版本差≤2) curl -LO + chmod +x kubectl version --client
Helm v3.14+ get-helm-3 脚本 / 包管理器 helm version
# kubectl 安装(Linux amd64)
curl -LO "https://dl.k8s.io/release/v1.28.0/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/

# Helm 安装
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash

# 验证
kubectl version --client
helm version
版本对齐警告: kubectl 主版本与集群版本差异超过2时,可能导致资源字段解析错误,直接影响Helm Chart渲染与压测数据采集。务必使用 kubectl version --short 检查客户端与服务端版本。

2.4 压测工具部署:wrk 与 k6

wrk适合HTTP短连接高并发场景,k6支持复杂脚本与指标采集。两者均以Helm Chart形式部署到集群中,便于后续与容量基线校准流程集成。

2.4.1 wrk 部署(DaemonSet模式)

# 添加Helm仓库
helm repo add baseline-charts https://charts.baseline.example.com
helm repo update

# 安装wrk压测代理
helm install wrk-agent baseline-charts/wrk-agent \
  --namespace baseline \
  --create-namespace \
  --set replicaCount=3 \
  --set targetService=nginx-baseline \
  --set targetPort=80

# 验证Pod状态
kubectl get pods -n baseline -l app=wrk-agent

2.4.2 k6 部署(Job + ServiceMonitor)

# 安装k6 Operator
helm install k6-operator grafana/k6-operator \
  --namespace k6-system \
  --create-namespace

# 创建压测配置(k6-test.yaml)
cat <<EOF | kubectl apply -f -
apiVersion: k6.io/v1alpha1
kind: K6
metadata:
  name: baseline-stress
  namespace: baseline
spec:
  parallelism: 4
  script:
    configMap:
      name: k6-script
      file: baseline.js
  arguments: --out influxdb=http://influxdb.baseline:8086/k6
EOF

# 查看压测Job状态
kubectl get k6 -n baseline
指标采集说明: k6支持输出到InfluxDB + Grafana,后续章节将基于这些指标生成容量基线校准曲线。wrk的原始数据通过Prometheus exporter暴露,由Prometheus Server抓取。

2.5 环境验证清单

完成上述步骤后,执行以下验证确保环境就绪:

  • 集群连通性: kubectl get nodes 返回Ready状态,且节点数量≥2
  • Helm Chart部署: helm list -n baseline 显示wrk-agent与k6-operator状态为deployed
  • 压测工具连通: kubectl exec -n baseline deploy/wrk-agent -- wrk -t2 -c10 -d5s http://nginx-baseline.baseline 返回延迟与吞吐数据
  • 指标输出验证: k6 Job完成后,InfluxDB中应存在k6_http_req_duration等测量值
环境准备架构图:K8s压测基线环境 K8s集群(Kind / Minikube) 控制平面(Control Plane) Worker节点 1 Worker节点 2 压测工具链与指标采集 wrk-agent DaemonSet / 高并发HTTP k6 Operator 复杂脚本 / 分布式压测 InfluxDB + Prometheus 指标存储与抓取 Helm Chart统一管理所有组件的部署、升级与回滚,确保压测环境版本可追溯 kubectl + Helm CLI 作为操作入口,连接集群与工具链

2.6 常见问题与排查

  • Kind集群创建失败: 检查Docker daemon是否运行,docker info 确认资源充足;Kind要求Docker ≥ 20.10
  • Helm Chart部署超时: 使用 helm install --debug --dry-run 预览渲染结果,检查镜像拉取策略与资源限制
  • wrk压测无返回: 确认目标Service的Endpoint是否就绪,kubectl get endpoints -n baseline 查看IP列表
  • k6脚本执行报错: 使用 k6 run --verbose baseline.js 本地调试,确认ConfigMap挂载路径正确
环境就绪标志: 当你能在任意Worker节点上通过 kubectl exec 执行wrk并返回延迟分布数据,同时k6 Job在InfluxDB中写入时间序列指标时,环境准备阶段完成。下一阶段将基于此环境进行Helm Chart发布治理与容量基线数据采集。