0x01 水平自动扩缩HPA
指statefulset和deployment这些负载,可以根据系统的负载压力,自动扩容应对业务高峰,并在低峰时自动缩容,降低资源消耗。
0x02 准备
要求已经有一个1.23以上的k8s集群,在其中部署metrics-server。示例用的1.25,运行时为containerd。
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
ctr -n k8s.io image pull registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.7.1
ctr -n k8s.io image tag registry.cn-hangzhou.aliyuncs.com/google_containers/metrics-server:v0.7.1 registry.k8s.io/metrics-server/metrics-server:v0.7.1
kubelet的证书是默认生成的,需要修改metrics-server deploy 添加命令参数--kubelet-insecure-tls
,跳过证书认证,否则metrics-server 无法采集 kubelet的metrics。
kubectl -n kube-system edit deploy metrics-server
确认已经正常。
kubectl -n kube-system get deploy
0x03 根据负载伸缩基本示例
要求:
- Pod配置了对应资源的requests值。否则会提示“the HPA was unable to compute the replica count: failed to get cpu utilization: missing request for cpu”
创建一个负载nginx deploy,副本为1,方便观察自动扩容。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: web
image: "docker.io/library/nginx:1.23-alpine"
ports:
- containerPort: 80
name: http
protocol: TCP
resources:
requests:
cpu: 10m
创建hpa对象。
kubectl autoscale --max=3 deploy nginx --cpu-percent=30
$ kubectl get hpa nginx
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
nginx Deployment/nginx 10%/30% 1 3 1 18m
默认指定的是平均使用值,即如果CPU的使用率超出了30%,就会自动扩容。默认配置中的比例是Pod中当前使用的值与requests值的比值。
cpu-percent = usage/requests * 100
解释:上述nginx启动后CPU占用很小,k8s中最小的值就是1m。可以通过kubectl top pod确认。requests值为10m,则现在的比例是10%,即没达到30%的比例。
$ kubectl top pod
NAME CPU(cores) MEMORY(bytes)
nginx-5db849c76f-hrpph 1m 5Mi
下面可以通过压力工具对nginx进行加压,触发扩容。压力大时,很快扩容出了2个Pod。
$ kubectl get pods -w
NAME READY STATUS RESTARTS AGE
nginx-54d69bd567-ddrt9 1/1 Running 0 5m48s
nginx-54d69bd567-qzs2r 1/1 Running 0 8s
nginx-54d69bd567-v25m8 1/1 Running 0 8s
示例给的是通过CPU使用率扩容,也可以根据平均使用量和使用量实现自动扩容。官方的API中还有如何控制Pod扩容和缩容的速率。见https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/horizontal-pod-autoscaler-v2/
标签:kubectl,实践,server,metrics,nginx,HPA,k8s,requests From: https://www.cnblogs.com/linlinsite/p/18367058