Kubernetes
吾八哥学k8s(六):kubernetes扩容、缩容
扩容是用在高峰期访问量过大的情况下,当前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。
手动执行命令的方法是使用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的配置是符合预期的,如果要测试其效果,可以使用压测的方式来进行。
相关文章
- 在Kubernetes里使用openkruise实现服务原地升级功能
- 吾八哥学k8s(十一):kubernetes里Pod的调度机制
- 吾八哥学k8s(十):kubernetes里Service和Ingress
- kubernetes中服务自定义Prometheus的metrics的方法
- k8s集群安装Prometheus监控以及Grafana面板的方法
- kubernetes集群证书过期的解决方法
- kubelet启动失败报failed to find cgroups of kubelet的解决方法
- 吾八哥学k8s(九):kubernetes里持久化存储
- macOs和Linux环境下kubectl命令自动补齐的方法
- 吾八哥学k8s(八):kubernetes里Secret的用法