Kubernetes HPA水平伸缩实战案例

HPA水平伸缩的条件

1、部署 Metrics server (收集 cpu 与 内存)

2、配置 resources.requests (配置资源清单)


Metrics server 部署

metrics-server 是什么

Metrics Server 是 K8S 中用于资源监控和自动伸缩的基础组件,Metrics Server 负责从 Kubelet 中收集 CPU 和内存等资源使用指标,并将这些数据聚合起来,通过 Metrics API 暴露给 Kubernetes 。


metrics-server 安装

安装地址:

链接: https://pan.baidu.com/s/16MEaWbPj3SsyylmjZNmCJA?pwd=racd 提取码: racd

kubectl apply -f metrics-server.0.7.2.yaml


metrics-server 常用命令


检测 metrics-server 是否正常运行

kubectl get pods -n kube-system | grep metrics-server

#metrics-server-57c6f647bb-78ss9     1/1     Running   0               11m
#metrics-server-57c6f647bb-nr8lf     1/1     Running   0               11m

kubectl get apiservice v1beta1.metrics.k8s.io -o yaml

#status:
#  conditions:
#  - lastTransitionTime: "2026-02-02T00:42:43Z"
#    message: all checks passed
#    reason: Passed
#    status: "True"
#    type: Available


查看 pod 与 node 资源使用情况

kubectl  top  pod

#NAME                               CPU(cores)   MEMORY(bytes)   
#deploy-nginx-6f578f7477-cbrhm      0m           2Mi             
#deploy-tomcat01-86db7c9b5d-cm7gb   2m           94Mi            
#deploy-tomcat02-77d56cb8f7-6ttvr   2m           101Mi           
#deploy-xiuxian-7b574d64b-76qm8     0m           2Mi             
#deploy-xiuxian-7b574d64b-rwhzl     0m           5Mi             
#deploy-xiuxian-7b574d64b-s8std     0m           5Mi  

kubectl  top  node

#NAME        CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%   
#master231   96m          4%     1168Mi          30%       
#worker232   42m          2%     1104Mi          29%       
#worker233   50m          2%     1413Mi          37%


根据不同的名称空间查看 pod 资源

kubectl top pod -n default 

#NAME                               CPU(cores)   MEMORY(bytes)   
#deploy-nginx-6f578f7477-cbrhm      0m           2Mi             
#deploy-tomcat01-86db7c9b5d-cm7gb   2m           94Mi            
#deploy-tomcat02-77d56cb8f7-6ttvr   2m           101Mi           
#deploy-xiuxian-7b574d64b-76qm8     0m           2Mi             
#deploy-xiuxian-7b574d64b-rwhzl     0m           5Mi             
#deploy-xiuxian-7b574d64b-s8std     0m           5Mi

                                         

                                         

                                         


HPA 水平伸缩 案例1 配置 resources.requests (配置资源清单)

业务场景:

hpa是k8s集群内置的资源,全称为”HorizontalPodAutoscaler”。可以自动实现Pod水平伸缩,在业务高峰期可以自动扩容Pod副本数量,在集群的低谷期,可以自动缩容Pod副本数量。


HPA 实践案例 1


导入测试镜像

docker load -i linux-tools-v0.1-stress.tar.gz 
docker tag jasonyin2020/oldboyedu-linux-tools:v0.1  harbor250.oldboyedu.com/greytracks/stress:v0.1
docker login harbor250.oldboyedu.com
docker push harbor250.oldboyedu.com/greytracks/stress:v0.1


配置文件详解

cat hpa.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deploy-stress
spec:
  replicas: 1
  selector:
    matchLabels:
      app: stress
  template:
    metadata:
      labels:
        app: stress
    spec:
      containers:
      - image: harbor250.oldboyedu.com/greytracks/stress:v0.1
        name: oldboyedu-linux-tools
        args:
        - tail
        - -f
        - /etc/hosts
# 配置容器的资源限制
        resources: 
  # 容器的期望资源
          requests:
    # CPU限制,1 =1000m
            cpu: 0.2
# 内存限制
            memory: 300Mi
  # 容器的资源上限
          limits:
            cpu: 0.5
            memory: 500Mi

---

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: stress-hpa
spec:
  maxReplicas: 5
  minReplicas: 2
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: deploy-stress
  targetCPUUtilizationPercentage: 95


创建资源

kubectl apply -f 01-deploy-hpa.yaml 

#查看资源 (压测前为2个)
kubectl get pod

#deploy-stress-754cc6f56c-lw4f9     1/1     Running   0              3m13s
#deploy-stress-754cc6f56c-s9lgd     1/1     Running   0              2m58s

始压测 对 2 个节点分别进行压测

kubectl exec deploy-stress-754cc6f56c-pfbv4  -- stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10m
kubectl exec deploy-stress-754cc6f56c-s9lgd  -- stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10m


压测后查看资源

kubectl get pod
NAME                               READY   STATUS    RESTARTS       AGE
deploy-stress-754cc6f56c-lw4f9     1/1     Running   0              19m
deploy-stress-754cc6f56c-pfbv4     1/1     Running   0              14m
deploy-stress-754cc6f56c-s9lgd     1/1     Running   0              19m
deploy-stress-754cc6f56c-tvwpd     1/1     Running   0              13m
deploy-stress-754cc6f56c-w892k     1/1     Running   0              13m


成功实现水平伸缩至 5 个节点 , 取消压测后 等 10 分钟后 会自动缩容恢复至 2 节点!

水平伸缩的核心,我认为在于配置文件的理解,与伸缩后对业务的影响

上一篇
下一篇