k8s学习笔记-HPA练习

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 根据负载伸缩基本示例

要求:

  1. 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/

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值