K8S HPA自动扩缩容实战指南
文章目录前言1、简介2、工作原理3、HPA版本变革4、监控指标类型4、HPA配置资源清单4.1 基于CPU负载实现自动扩缩容NAME这是 HPA 对象的名称REFERENCEHPA 监控和自动扩展的目标对象。TARGETS当前和目标的资源使用情况MINPODSHPA 配置的最小 Pod 副本数量。MAXPODSHPA 配置的最大 Pod 副本数量REPLICAS当前运行的 Pod 副本数量。AGEHPA 对象的年龄前言VPA(Vertical Pod Autoscaler)垂直扩展Vertical Scaling根据负载调整单个 Pod 的资源请求和限制如 CPU 和内存。HPA (Horizontal Pod Autoscaler)水平扩展Horizontal Scaling根据负载增加或减少 Pod 的副本数量。1、简介 Horizontal Pod Autoscaler (HPA) 是 Kubernetes 中的一项功能它能够根据 CPU 使用率或其他应用程序指标自动扩展或缩减应用程序的副本数量。HPA 有助于确保应用程序在负载增加时能够自动扩展以处理更多请求在负载减少时则自动缩减以节省资源。2、工作原理Kubernetes中的某个Metrics Server持续采集所有Pod副本的指标数据。HPA控制器通过Metrics Server的API获取这些数据基于用户定义的扩缩容规则进行计算得到目标Pod的副本数量。当目标Pod副本数量与当前副本数量不同时HPA控制器就向Pod的副本控制器 Deployment、RC或ReplicaSet发起scale操作调整Pod的副本数量 完成扩缩容操作。3、HPA版本变革[rootk8s-master01 ~]# kubectl get apiservices | grep -i autoautoscaling/v1版本仅支持基于CPU使用率指标的自动扩缩容。autoscaling/v2版本支持基于内存使用率指标、自定义指标及外部指标的自动扩缩容并且进一步扩展以支持多指标缩放能力当定义了多个指标时HPA会跟据每个指标进行计算其中缩放幅度最大的指标会被采纳。4、监控指标类型 kube-Master节点的kube-controller-manager服务持续监测目标Pod的某种性能指标以计算是否需要调整副本数量。目前Kubernetes支持的指标类型如下Pod资源使用率Pod级别的性能指标通常是一个比率值例如CPU使用率。Pod自定义指标Pod级别的性能指标通常是一个数值例如接收的请求数量。Object自定义指标或外部自定义指标通常是一个数值需要容器应用以某种方式提供例如通过HTTP URL“/metrics”提供或者使用外部服务提供的指标采集URL。4、HPA配置资源清单4.1 基于CPU负载实现自动扩缩容deploy资源清单准备[rootk8s-master01 ~]# vim nginx-deploy.yaml---apiVersion:apps/v1kind:Deploymentmetadata:labels:app:nginxname:nginxspec:replicas:1selector:matchLabels:app:nginxtemplate:metadata:labels:app:nginxspec:containers:-image:nginximagePullPolicy:IfNotPresentname:nginxresources:# 资源请求配置requests:cpu:10m# cpu资源请求书1颗cpu1000m# 创建资源[rootk8s-master01 ~]# kubectl create -f nginx-deploy.yamldeployment.apps/nginx created# 查看资源[rootk8s-master01 ~]# kubectl get po -owideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES nginx-6dc8dbb669-nf5lm 1/1 Running 0 54s 172.16.195.23 k8s-master03 nonenoneservice资源清单编写# 查看生成的资源清单[rootk8s-master01 ~]# vim nginx-service.yaml---apiVersion:v1kind:Servicemetadata:labels:app:nginxname:nginxspec:ports:-port:80protocol:TCPtargetPort:80selector:app:nginx# 创建serice资源[rootk8s-master01 ~]# kubectl create -f nginx-service.yamlservice/nginx created# 查看资源[rootk8s-master01 ~]# kubectl get svc -owideNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR kubernetes ClusterIP 10.96.0.1 none443/TCP 4d10h nonenginx ClusterIP 10.96.11.64 none80/TCP 23s appnginx# 测试连通性[rootk8s-master01 ~]# curl 10.96.11.64!DOCTYPEhtmlhtmlheadtitleWelcome to nginx!/titlestylehtml{color-scheme:light dark;}body{width:35em; margin:0 auto;font-family:Tahoma,Verdana,Arial,sans-serif;}/style/headbodyh1Welcome to nginx!/h1pIf you see this page,the nginx web server is successfully installed and working. Further configuration is required./ppFor online documentation and support please refer to a hrefhttp://nginx.org/nginx.org/a.br/Commercial support is available at a hrefhttp://nginx.com/nginx.com/a./ppemThank you for using nginx./em/p/body/html# 查看Pod的指标(如果指标不能查看则需要安装metrics)[rootk8s-master01 ~]# kubectl top poNAME CPU(cores) MEMORY(bytes) nginx-6dc8dbb669-nf5lm 0m 5Mi 安装metrics 1、下载开启指标的yaml配置文件 wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml-O metrics-server-components.yaml 2、修改镜像地址为国内的地址 sed-i s/registry.k8s.io\/metrics-server/registry.cn-hangzhou.aliyuncs.com\/google_containers/g metrics-server-components.yaml 3、修改metrics-server-components.yaml配置 修改容器的ts配置不验证ts在containers的args参数中增加--kubelet-insecure-tls 参数如下图 4、加载资源清单 kubectl apply-f metrics-server-components.yamlHPA资源清单编写vimnginx-hpa.yaml --- apiVersion: autoscaling/v1#API版本kind: HorizontalPodAutoscaler# 对象的类型metadata:# 元数据name: nginx# HPA对象的名称spec:# 定义了HPA的规格maxReplicas:10# 定义了Pod副本数量的最大值即在负载增加时最多可以扩展到10 个Pod。minReplicas:1# 定义了Pod副本数量的最小值即在负载减少时最少保留1个Pod。scaleTargetRef:# 指定HPA作用的目标对象。apiVersion: apps/v1# 目标对象的API版本。kind: Deployment# 目标对象的类型name: nginx# 目标Deployment的名称targetCPUUtilizationPercentage:10# 目标CPU使用率当CPU使用率超过10% 时HPA会增加Pod副本数量当CPU使用率低于10%时HPA会减少Pod副本数量。# 创建资源[rootk8s-master01 ~]# kubectl create -f nginx-hpa.yamlhorizontalpodautoscaler.autoscaling/nginx created# 查看资源[rootk8s-master01 ~]# kubectl get hpa字段解释NAME这是 HPA 对象的名称REFERENCEHPA 监控和自动扩展的目标对象。TARGETS当前和目标的资源使用情况MINPODSHPA 配置的最小 Pod 副本数量。MAXPODSHPA 配置的最大 Pod 副本数量REPLICAS当前运行的 Pod 副本数量。AGEHPA 对象的年龄测试压测[rootk8s-master01 ~]# while true; do curl http://10.96.39.85 /dev/null; done[rootk8s-master01 ~]# kubectl get hpa[rootk8s-master01 ~]# kubectl top po[rootk8s-master01 ~]# kubectl get po注意事项[rootk8s-master01 ~]# while true; do curl http://10.96.39.85 /dev/null; done[rootk8s-master01 ~]# kubectl get hpa[rootk8s-master01 ~]# kubectl top po[rootk8s-master01 ~]# kubectl get po 注意事项 使用HPA CPU自动扩充是时尽量用于前端应用后端再扩容时尽量使用自定义指标。后端应用会有多方面原因引起负载过高。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2413159.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!