内容简介:本文风哥教程参考Linux官方文档、Red Hat Enterprise Linux官方文档、Ansible Automation Platform官方文档、Docker官方文档、Kubernetes官方文档和Podman官方文档等内容,详细介绍了相关技术的配置和使用方法。
风哥提示:
本文档介绍Kubernetes集群的性能调优方法。
Part01-性能概述
1.1 调优方向
[root@k8s-master ~]# cat > /root/k8s-performance.txt << 'EOF' Kubernetes性能调优 ================== 1. 控制平面调优 - API Server性能 - etcd性能 - Controller Manager - Scheduler 2. 数据平面调优 - kubelet配置 - 容器运行时 - 网络性能 - 存储性能 3. 应用调优 - 资源配置 - 镜像优化 - 启动速度 - 运行效率 4. 监控指标 - CPU使用率 - 内存使用率 - 网络延迟 - I/O性能 EOF
Part02-etcd调优
2.1 etcd性能优化
[root@k8s-master ~]# ETCDCTL_API=3 etcdctl endpoint status –cluster –write-out=table
+————————+——————+———+———+———–+————+———–+————+——————–+——–+
| ENDPOINT | ID | VERSION | DB SIZE | IS LEADER | IS LEARNER | RAFT TERM | RAFT INDEX | RAFT APPLIED INDEX | ERRORS |
+————————+——————+———+———+———–+————+———–+————+——————–+——–+
| https://更多学习教程公众号风哥教程itpux_com192.168.1.100:2379 | abc123def456 | 3.5.9 | 100 MB | true | false | 2 | 1234567 | 1234567 | |
+————————+——————+———+———+———–+————+———–+————+——————–+——–+
# 查看etcd性能
[root@k8s-master ~]# ETCDCTL_API=3 etcdctl check perf
60 / 60 Booleans 100.00%
60 / 60 Bytes 100.00%
60 / 60 Integers 100.00%
60 / 60 Strings 100.00%
60 / 60 String-Integers 100.00%
60 / 60 String-Strings 100.00%
PASS: Throughput is 15000 requests/sec
PASS: Slowest request took 10ms
PASS: Stddev is 5ms
PASS
# 优化etcd配置
[root@k8s-master ~]# cat > /etc/kubernetes/manifests/etcd.yaml << 'EOF'
apiVersion: v1
kind: Pod
metadata:
name: etcd
namespace: kube-system
spec:
containers:
- command:
- etcd
- --advertise-client-urls=https://192.168.1.100:2379
- --initial-advertise-peer-urls=https://192.168.from PG视频:www.itpux.com1.100:2380
- --initial-cluster=k8s-master=https://192.168.1.100:2380
- --data-dir=/var/lib/etcd
- --snapshot-count=10000
- --heartbeat-interval=100
- --election-timeout=1000
- --quota-backend-bytes=8589934592
- --max-request-bytes=15728640
- --auto-compaction-retention=1
- --auto-compaction-mode=periodic
env:
- name: ETCD_UNSUPPORTED_ARCH
value: ""
image: registry.k8s.io/etcd:3.5.9-0
resources:
requests:
cpu: 200m
memory: 512Mi
limits:
cpu: 1000m
memory: 2Gi
EOF
# 定期压缩etcd
[root@k8s-master ~]# ETCDCTL_API=3 etcdctl compact $(ETCDCTL_API=3 etcdctl endpoint status --write-out="json" | jq -r '.[] | .Status.header.revision')
compacted revision 1234567
# 碎片整理
[root@k8s-master ~]# ETCDCTL_API=3 etcdctl defrag
Finished defragmenting etcd member[abc123def456]
Part03-kubelet调优
3.1 kubelet配置优化
[root@k8s-master ~]# systemctl status kubelet
● kubelet.service – Kubernetes Kubelet Server
Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; preset: disabled)
Drop-In: /etc/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: active (running) since Sat 2026-04-04 00:00:00 CST; 1 day ago
# 优化kubelet配置
[root@k8s-master ~]# cat > /etc/kubernetes/kubelet-config.yaml << 'EOF'
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
maxPods: 250
podPidsLimit: 4096
imageGCHighThresholdPercent: 85
imageGCLowThresholdPercent: 80
evictionHard:
memory.available: "500Mi"
nodefs.available: "10%"
nodefs.inodesFree: "5%"
imagefs.available: "15%"
evictionSoft:
memory.available: "1Gi"
nodefs.available: "15%"
evictionSoftGracePeriod:
memory.更多视频教程www.fgedu.net.cnavailable: "1m30s"
nodefs.available: "2m"
evictionMaxPodGracePeriod: 60
evictionMinimumReclaim:
memory.available: "0Mi"
nodefs.available: "500Mi"
imagefs.available: "2Gi"
kubeAPIQPS: 50
kubeAPIBurst: 100
serializeImagePulls: false
registryPullQPS: 10
registryBurst: 20
EOF
# 重启kubelet
[root@k8s-master ~]# systemctl daemon-reload
[root@k8s-master ~]# systemctl restart kubelet
# 查看kubelet指标
[root@k8s-master ~]# curl -s http://localhost:10255/metrics | grep kubelet_
kubelet_running_container_count 100
kubelet_running_pod_count 50
kubelet_runtime_operations_total{operation_type="container_status"} 12345
kubelet_runtime_operations_total{operation_type="create_container"} 100
kubelet_runtime_operations_total{operation_type="list_containers"} 5678
Part04-应用性能调优
4.1 资源配置优化
[root@k8s-master ~]# cat > fgedu-optimized-deployment.yaml << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: fgedu-app-optimized namespace: fgedu-prod spec: replicas: 3 selector: matchLabels: app: fgedu-app-optimized template: metadata: labels: app: fgedu-app-optimized spec: containers: - name: app image: nginx:1.25 ports: - containerPort: 80 resources: requests: cpu: 200m memory: 256Mi limits: cpu: 1000m memory: 1Gi env: - name: GOMAXPROCS valueFrom: resourceFieldRef: resource: limits.cpu - name: GOMEMLIMIT valueFrom: resourceFieldRef: resource: limits.memory livenessProbe: httpGet: path: /health port: 80 initialDelaySeconds: 10 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 readinessProbe: httpGet: path: /ready port: 80 initialDelaySeconds: 5 periodSeconds: 5 timeoutSeconds: 3 failureThreshold: 3 lifecycle: preStop: exec: command: ["/bin/sh", "-c", "sleep 10"] terminationGracePeriodSeconds: 30 affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: app operator: In values: - fgedu-app-optimized topologyKey: kubernetes.io/hostname EOF [root@k8s-master ~]# kubectl apply -f fgedu-optimized-deployment.yaml deployment.apps/fgedu-app-optimized created # 查看Pod性能 [root@k8s-master ~]# kubectl top pods -n fgedu-prod NAME CPU(cores) MEMORY(bytes) fgedu-app-optimized-abc12-xyz789 50m 128Mi fgedu-app-optimized-abc12-abc12 45m 125Mi fgedu-app-optimized-abc12-def34 48m 130Mi # 查看节点性能 [root@k8s-master ~]# kubectl top nodes NAME CPU(cores) CPU% MEMORY(bytes) MEMORY% k8s-master 200m 5% 1024Mi 12% k8s-node1 150m 3% 512Mi 6% k8s-node2 150m 3% 512Mi 6% # 性能基准测试 [root@k8s-master ~]# cat > fgedu-benchmark.yaml << 'EOF' apiVersion: batch/v1 kind: Job metadata: name: fgedu-benchmark namespace: fgedu-prod spec: template: spec: containers: - name: benchmark image: busybox command: - /bin/sh - -c - | echo "Starting benchmark..." time wget -q -O /dev/null http://fgedu-app-optimized:80/ echo "Benchmark completed." restartPolicy: Never backoffLimit: 0 EOF [root@k8s-master ~]# kubectl apply -f fgedu-benchmark.yaml job.batch/fgedu-benchmark created [root@k8s-master ~]# kubectl logs job/fgedu-benchmark -n fgedu-prod Starting benchmark... Benchmark completed. real 0m 0.05s user 0m 0.00s sys 0m 0.00s
- 定期维护etcd数据库
- 优化kubelet配置参数
- 合理配置资源请求和限制
- 使用健康检查保证可用性
- 监控性能指标持续优化
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
