[kubernetes] HPA实现自动水平伸缩POD

181 阅读2分钟

    众所周知,kubernetes一大特色是可以自动对POD进行扩缩容,因为应用的资源使用率通常都有高峰和低谷的时候,如何削峰填谷,提高集群的整体资源利用率,让service中的Pod个数自动调整呢?这就有赖于Horizontal Pod Autoscaling了,顾名思义,使Pod水平自动缩放。

    而kubernetes实际上是可以支持VPA(垂直)和HPA(水平)两种扩缩容的方式,通俗的来讲,VPA就是堆配置,调整现有的POD资源,而HPA就是增加POD,在实际的生产环境中一般使用HPA就可以了,VPA需要停止POD,因此使用的场景较少。

    使用HPA之前,需要安装metrics-server或者heapster,这样才可以获取节点和pod的资源使用情况。检查metrics-server和heapster是否可用最简单的办法是使用top命令,查看是否可以获取到pod的资源使用情况。

图片

**01 资源准备
**

    1)创建pod,一定要配置resources

[root@host21 hpa]# cat nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: nginx
  name: nginx
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: harbor.od.com/public/nginx:v1.7.9
        name: nginx
        resources:
          limits:   # 最多可以占用这么多资源
            cpu: "50m"
            memory: 20Mi
          requests: # 保证这个pod初始可以分配这么多资源
            cpu: "50m"
            memory: 20Mi

    2)准备Service

[root@host21 hpa]# cat nginx-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  ports:
  - port: 80
    targetPort: 80
    protocol: TCP
  selector:
    app: nginx

    3)应用

kubectl apply -f nginx.yaml
kubectl apply -f nginx-svc.yaml

    4)查看

图片

02 创建HPA

    1)创建HPA

[root@host21 hpa]# cat nginx-hpa.yaml 
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-hpa
spec:
  maxReplicas: 5   # 最大pod数量
  minReplicas: 1   # 最小pod数量
  scaleTargetRef:  # 需要扩缩容的资源
    apiVersion: apps/v1
    kind: Deployment
    name: nginx
  targetCPUUtilizationPercentage: 50  # 使用率超过50%就扩容

    2)应用

kubectl apply -f nginx-hpa.yaml

    3)查看

图片

    4)curl测试,可以看到pods数量已经变为2了

图片

    5)自动扩容了一个pod

图片

    6)停止curl后,使用率会降下来,pod数量会被缩容到1

图片


图片

本文使用 文章同步助手 同步