在 Debian 上进行 Kubernetes 性能测试
一 环境与工具准备
二 快速上手 应用层 HTTP 压测
kubectl create deployment nginx --image=nginx:1.25 --replicas=3
kubectl expose deployment nginx --port=80
kubectl run k6 --image=grafana/k6:latest --restart=Never -it --rm \
--env K6_OUT=json=/results/k6.json \
-- ./run - < scripts/nginx-test.js
scripts/nginx-test.js 示例:import http from 'k6/http';
import { sleep } from 'k6';
export let options = { vus: 50, duration: '5m' };
export default function () {
http.get('http://nginx/');
sleep(0.2);
}
kubectl run fortio --image=fortio/fortio --restart=Never -it --rm \
-- fortio load -c 50 -t 5m -qps 200 http://nginx/
三 集群级基准测试
apiVersion: clusterloader2/v1alpha1
kind: TestingConfig
testing:
- name: pod-density
jobs:
- name: create-pods
jobType: Create
objectBundle:
- basename: nginx
objectTemplatePath: "templates/nginx-deployment.yaml"
replicas: 100
./clusterloader2 run --testconfig=config/density.yaml \
--provider=local --nodes=3 --report-dir=/results
apiVersion: batch/v1
kind: Job
metadata:
name: fio-test
spec:
template:
spec:
containers:
- name: fio
image: fio/fio:latest
command: ["fio", "--name=randwrite", "--ioengine=libaio",
"--rw=randwrite", "--bs=4k", "--direct=1",
"--size=1G", "--numjobs=4", "--runtime=60",
"--filename=/mnt/testfile", "--group_reporting"]
volumeMounts:
- name: testvol
mountPath: /mnt
volumes:
- name: testvol
persistentVolumeClaim:
claimName: test-pvc
restartPolicy: Never
四 网络与自动扩缩容专项
# Server
kubectl run iperf-server --image=networkstatic/iperf3 -- iperf3 -s -p 5201
# Client(跨节点)
kubectl run iperf-client --image=networkstatic/iperf3 --restart=Never -it -- \
iperf3 -c iperf-server -p 5201 -t 60 -P 4
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: nginx-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: nginx
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
五 结果分析与优化闭环
perf record -F 99 -p $(pgrep kube-apiserver) -g -- sleep 60
perf script | stackcollapse-perf.pl | flamegraph.pl > apiserver.svg