HPA自动扩缩容

Wed Jul 29, 2020

400 Words|Read in about 2 Min
Tags: Devops  

在生产环境下,在面临服务需要扩容的场景时,可以使用Deployment/RC的Scale机制来实现。 Kubernetes支持对Pod的手动扩容和自动扩容。在扩容的时候可以定义CPU、内存等指标来激活扩容动作。

HPA 指标服务器部署

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml

kubectl describe hpa … unable to get metrics for resource cpu: no metrics returned from resource metrics API

kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE php-apache Deployment/php-apache /20% 1 10 1 21m

#https://github.com/kubernetes-sigs/metrics-server#flags

修复 修改components.yaml

      containers:
        - name: metrics-server
          image: k8s.gcr.io/metrics-server/metrics-server:v0.3.7
          imagePullPolicy: IfNotPresent
          args:
            - --cert-dir=/tmp
            - --secure-port=4443
            - --kubelet-insecure-tls  #add
            - --kubelet-preferred-address-types=InternalIP #add

 然后kubectl apply -f components.yaml           

测试

 kubectl top node
NAME       CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
master16   238m         5%     2564Mi          32%
master17   167m         4%     2029Mi          25%
master18   213m         5%     2774Mi          35%
node19     201m         3%     4095Mi          31%
node20     222m         2%     3690Mi          23%
node21     172m         2%     5165Mi          32%
kubectl top po
NAME                          CPU(cores)   MEMORY(bytes)
php-apache-79544c9bd9-4vbhw   1m           9Mi
php-apache-79544c9bd9-5wwh9   1m           9Mi
php-apache-79544c9bd9-9jj2f   1m           12Mi
php-apache-79544c9bd9-kwrsm   1m           9Mi
php-apache-79544c9bd9-mkz5z   1m           9Mi
php-apache-79544c9bd9-n578h   1m           9Mi
php-apache-79544c9bd9-p77t5   1m           12Mi
php-apache-79544c9bd9-wxq8k   1m           9Mi
php-apache-79544c9bd9-zv69v   1m           12Mi

有数据指标出现,表示部署正确。

部署测试deploy

application/php-apache.yaml 

apiVersion: apps/v1
kind: Deployment
metadata:
  name: php-apache
spec:
  selector:
    matchLabels:
      run: php-apache
  replicas: 1
  template:
    metadata:
      labels:
        run: php-apache
    spec:
      containers:
      - name: php-apache
        image: k8s.gcr.io/hpa-example
        ports:
        - containerPort: 80
        resources:
          limits:
            cpu: 500m
          requests:
            cpu: 200m
---
apiVersion: v1
kind: Service
metadata:
  name: php-apache
  labels:
    run: php-apache
spec:
  ports:
  - port: 80
  selector:
    run: php-apache
 #kubectl apply -f https://k8s.io/examples/application/php-apache.yaml   

创建HPA伸缩策略

kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10

查看策略

kubectl get hpa
NAME         REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
php-apache   Deployment/php-apache   0%/50%    1         10        9          46m
#负载装载
kubectl run -it --rm load-generator --image=busybox /bin/sh
/ # while true; do wget -q -O- http://php-apache; done
#查看扩容效果
kubectl get pod,hpa
NAME                                  READY   STATUS    RESTARTS   AGE
pod/load-generator-5fb4fb465b-wrj79   1/1     Running   0          40m
pod/php-apache-79544c9bd9-9jj2f       1/1     Running   0          44s
pod/php-apache-79544c9bd9-p77t5       1/1     Running   0          15m
pod/php-apache-79544c9bd9-zv69v       1/1     Running   0          44s

NAME                                             REFERENCE               TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/php-apache   Deployment/php-apache   138%/50%   1         10        3          40m


#冷却后情况:
kubectl get hpa,pod

NAME                                             REFERENCE               TARGETS   MINPODS   MAXPODS   REPLICAS   AGE
horizontalpodautoscaler.autoscaling/php-apache   Deployment/php-apache   0%/50%    1         10        1          48m

NAME                              READY   STATUS    RESTARTS   AGE
pod/php-apache-79544c9bd9-p77t5   1/1     Running   0          23m

See Also

Wed Jul 29, 2020

400 Words|Read in about 2 Min
Tags: Devops