环境准备: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等测量值
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发布治理与容量基线数据采集。