吾八哥博客

您现在的位置是:首页 > 云原生 > Kubernetes > 正文

Kubernetes

吾八哥学k8s(六):kubernetes扩容、缩容

吾八哥2020-04-25Kubernetes3133

扩容是用在高峰期访问量过大的情况下,当前deployment的pod数量已经无法支撑业务的时候,需要扩展更多的pod数量。缩容是指在业务空闲期只需要少数的pod即可满足业务需求,太多的pod是资源浪费,所以这个时候就需要缩容。

手动扩缩容

手动调整pod数量

使用kubectl scale命令可以调整pod的副本数量,可以指定deployment的pod数量,使用方法如下:

5bug-MacBook:~$ kubectl scale deployment k8s-demo --replicas 4
deployment.apps/k8s-demo scaled

k8s-demo的pod数量变为4个了,此命令扩容、缩容都适用,但需要手动操作。

自动扩缩容

HPA(水平自动伸缩)

前提是集群支持horizontal pod autoscaling,官方文档:https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/

HPA原理是定时去获取CPU、内存等资源的metrics信息,通过这些metics信息来实现动态伸缩的。K8S从1.8版本开始,CPU、内存等资源的metrics信息可以通过 Metrics API来获取的,其他的版本需要使用Heapster,我这里的版本是v1.18.0。

05212716_9dRI.png

手动执行命令的方法是使用kubectl autoscaler,使用方法如下:

5bug-MacBook:~$ kubectl autoscale deployment k8s-demo --min=2 --max=10 --cpu-percent=80
horizontalpodautoscaler.autoscaling/k8s-demo autoscaled

参数说明:

kubectl autoscale 资源类型 资源名称 --max=最大pod数量 --min=最小pod数量 --cpu-percent=cpu百分比以内。

可以通过查询hpa来查刚才设置的配置:

5bug-MacBook:~$ kubectl get hpa k8s-demo -o wide
NAME       REFERENCE             TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
k8s-demo   Deployment/k8s-demo   <unknown>/80%   2         10        4          7m51s

配置HPA

在之前的k8s-demo.yaml文件里增加如下配置hpa的定义:

...(k8s-demo.yaml的内容)

---
  apiVersion: autoscaling/v1
  kind: HorizontalPodAutoscaler
  metadata:
    name: k8s-demo-hpa
    labels:
      app: k8s-demo-hpa
  spec:
    scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: k8s-demo
    minReplicas: 2
    maxReplicas: 10
    targetCPUUtilizationPercentage: 80

为了方便测试效果,可以删除k8s-demo相关的所有资源,重新创建,效果如下:

5bug-MacBook:~/codes/projects/k8s-demo$ kubectl apply -f k8s-demo.yaml
deployment.apps/k8s-demo created
service/k8s-demo-svc configured
ingress.extensions/k8s-demo-ingress configured
horizontalpodautoscaler.autoscaling/k8s-demo-hpa created

查看hpa:

5bug-MacBook:~/codes/projects/k8s-demo$ kubectl get hpa
NAME           REFERENCE             TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
k8s-demo-hpa   Deployment/k8s-demo   <unknown>/80%   2         10        0          6s

hpa的配置是符合预期的,如果要测试其效果,可以使用压测的方式来进行。