k8s-HPA自动扩缩容

前言

生产环境中我们经常会遇见服务器资源不够的情况,如果是以往的扩容方式步骤十分繁琐,如果是在k8s集群里面那,那就十分简单了,只要资源池中的资源足够,那么就可以在很短的时间里对pod进行扩容,解决资源不足的情况,在这里介绍k8s的hpa自动扩缩容。

一、配置HPA

1、部署 metrics-server

git clone https://github.com/kubernetes-incubator/metrics-server.git
修改默认的启动命令:
vim metrics-server-deployment.yaml
添加以下几行:
command:
        - /metrics-server
        - --kubelet-insecure-tls
        - --kubelet-preferred-address-types=InternalIP,Hostname,InternalDNS,ExternalDNS,ExternalIP

k8s-HPA自动扩缩容

cd metrics-server/deploy
kubectl create -f metrics-server-deployment.yaml

#查看容器是否创建成功
kubectl get pods -n kube-system

k8s-HPA自动扩缩容

2、创建测试实例

#以php-apache  rc为例,设置cpu request为200m,未设置limit的值:
vim php-apache-rc.yaml

apiVersion: v1
kind: ReplicationController
metadata:
  name: php-apache
spec:
  replicas: 1
  template:
    metadata:
      name: php-apache
      labels:
        app: php-apache
    spec:
      containers:
      - name: php-apache
        image: gcr.io/google_containers/hpa-example
        resources:
          requests:
            cpu: 200m
        ports:
        - containerPort: 80
#创建pod
kubectl create -f php-apache-rc.yaml


#创建php-apache的service
vim php-apache-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: php-apache
spec:
  ports:
  - port: 80
  selector:
app: php-apache

#创建service
kubectl create -f php-apache-svc.yaml

二、创建HPA

1、使用命令

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

2、使用yaml文件创建实例

vim hpa-php-apache.yaml

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: php-apache
spec:
  scaleTargetRef:
    apiVersion: v1
    kind: ReplicationController
    name: php-apache
  minReplicas: 1
  maxReplicas: 10
  targetCPUUtilizationPercentage: 50

#创建pod
kubectl create -f  hpa-php-apache.yaml

#查看创建的hpa
kubectl get hpa

k8s-HPA自动扩缩容

查看创建的hpa

kubectl get hpa

k8s-HPA自动扩缩容
查看状态

kubectl describe  hpa php-apache

k8s-HPA自动扩缩容
动态查看

kubectl get hpa -w

3、创建一个压力测试实例

vim busybox-pod.yaml

apiVersion: v1
kind: Pod
metadata:
  name: busybox
spec:
  containers:
  - name: busybox
    image: busybox
command: [ "sleep", "3600" ]

#创建pod
kubectl create -f  busybox-pod.yaml


#登录busybox实例,执行一个无限循环的wget命令访问php-apache
kubectl exec -it busybox – sh

#执行一下命令进行测试
while true; do wget -q -O- http://php-apache >/dev/null;done

#过一段时间后,观察hpa

k8s-HPA自动扩缩容
然后再查看pod 副本个数的变化
k8s-HPA自动扩缩容
最后我们停止压力测试,观察HPA的变化
k8s-HPA自动扩缩容
查看php-apache pod副本数量
k8s-HPA自动扩缩容
恢复到开始时的状态。

上一篇:26.使用HPA控制器动态扩展基础资源


下一篇:StatefulSet更新策略