作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们上一章介绍了Docker基本情况,目前在规模较大的容器集群基本都是Kubernetes,但是Kubernetes涉及的东西和概念确实是太多了,而且随着版本迭代功能在还增加,笔者有些功能也确实没用过,所以只能按照我自己的理解来讲解。
我们前面通过手工配置Pod副本的增加或者减少,但是在实际环境我们关键业务可能存在意想不到突发流量,如果我们手工配置把每个业务都配置更多的副本数量,对我们的资源控制和调度可能会产生影响,kubernetes给我们提供了要给HorizontalPodAutoscaler (HPA) 实现工作负载的自动水平扩缩。
1.安装组件
安装当前组件以后,我们就可以通过kubectl top 查看Node或者Pod的资源使用情况。
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
kubectl apply -f components.yaml
从这里可以看到,和我们前面部署大多数组件差不多,都会生成类似的资源(主要是serviceaccount,clusterrole,clusterrolebinding,deployment等资源)。
注:由于证书的问题,导致这个Pod无法通过健康检查,可以在这个Deployment添加一个参数
- args:
- --kubelet-insecure-tls #该行为增加的
- --cert-dir=/tmp
2.创建CPU的HPA
kubectl autoscale \
deployment nginx-deployment \
--cpu-percent=10 \
--min=1 \
--max=10
-
当 CPU 使用率 超过 10% 时,HPA 逐步增加 Pod 副本,直到使用率接近目标值或达到
--max=10
。 -
当 CPU 使用率 低于 10% 时,HPA 逐步减少 Pod 副本,直到使用率接近目标值或达到
--min=1
我们进入我们选择的Deployment的Pod跑一个死循环,hpa就会看到类似下面的扩容日志。
#扩容日志
Normal SuccessfulRescale 64s horizontal-pod-autoscaler New size: 4; reason: cpu resource utilization (percentage of request) above target
Normal SuccessfulRescale 49s horizontal-pod-autoscaler New size: 8; reason: cpu resource utilization (percentage of request) above target
Normal SuccessfulRescale 34s horizontal-pod-autoscaler New size: 10; reason: cpu resource utilization (percentage of request) above target
#缩容日志
horizontal-pod-autoscaler New size: 1; reason: All metrics below target
注意:如果没有limit配置,则不会进行扩容。
3.创建内存HPA
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: memory-autoscaler # HPA 名称
namespace: default # 选择您的命名空间
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment # 目标资源类型(也可是 StatefulSet 等)
name: your-deployment # 需要扩展的 Deployment 名称
minReplicas: 1 # 最小副本数(根据需求调整)
maxReplicas: 10 # 最大副本数(根据需求调整)
metrics:
- type: Resource
resource:
name: memory # 监控内存指标
target:
type: Utilization # 使用率模式
averageUtilization: 80 # 目标内存使用率(百分比)
如果未安装监控插件就是下面这样的
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。