使用自定义指标进行Pod弹性伸缩
Horizontal Pod Autoscaling,简称HPA,是Kubernetes中实现Pod水平自动伸缩功能的资源对象。Kubernetes 1.9 或更高版本支持HPA V2版本,允许我们是用自定义监控指标来控制Pod数目。
本文用阿里云容器服务来介绍HPA使用自定义指标进行弹性伸缩的功能。
安装配置Prometheus和Prometheus adaptor
我们使用Prometheus收集指标,通过Prometheus adaptor来扩展Kubernetes 自定义监控指标。
使用阿里云容器服务控制台创建好集群,并创建monitoring命名空间。然后进行如下步骤:
安装Prometheus
在应用目录-App Hub中搜索prometheus可以看到如下组件
点击prometheus进入安装页面,点击参数进行查看并配置(本文persistentVolume enabled设置为false,即使用emptyDir),选择集群命名空间后点击安装。
安装Prometheus adaptor
安装过程同上,注意配置参数中prometheus url要使用之前部署好的prometheus地址
验证安装是否成功
使用控制台的cloudshell或kubectl连接集群,执行如下命令:
kubectl api-versions
结果中可以看到如下内容,表明集群支持hpa v2并可以使用自定义监控指标
autoscaling/v2beta1 custom.metrics.k8s.io/v1beta1
我们可以进一步查看监控项,如pod支持的监控指标
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" |jq . | grep "pods/"
"name": "pods/start_time_seconds", "name": "pods/cpu_user", "name": "pods/fs_limit_bytes", "name": "pods/cpu_cfs_throttled", "name": "pods/memory_failcnt", "name": "pods/fs_writes_bytes", "name": "pods/kube_pod_created", "name": "pods/kube_pod_status_phase", "name": "pods/tasks_state", "name": "pods/last_seen", "name": "pods/kube_pod_container_status_running", "name": "pods/fs_reads_merged", "name": "pods/memory_swap", "name": "pods/spec_cpu_quota", "name": "pods/fs_io_current", "name": "pods/kube_pod_container_resource_requests_memory_bytes", "name": "pods/kube_pod_container_status_waiting", "name": "pods/fs_sector_reads", "name": "pods/kube_pod_status_scheduled", "name": "pods/kube_pod_container_status_waiting_reason", "name": "pods/fs_reads_bytes", "name": "pods/kube_pod_container_resource_requests_cpu_cores", "name": "pods/kube_pod_container_status_terminated_reason", "name": "pods/cpu_system", "name": "pods/fs_read", "name": "pods/fs_writes", "name": "pods/kube_pod_owner", "name": "pods/memory_mapped_file", "name": "pods/spec_cpu_shares", "name": "pods/kube_pod_container_resource_limits_cpu_cores", "name": "pods/cpu_usage", "name": "pods/kube_pod_container_resource_limits", "name": "pods/kube_pod_info", "name": "pods/memory_working_set_bytes", "name": "pods/fs_writes_merged", "name": "pods/memory_usage_bytes", "name": "pods/kube_pod_container_resource_requests", "name": "pods/fs_io_time_weighted", "name": "pods/spec_cpu_period", "name": "pods/spec_memory_reservation_limit_bytes", "name": "pods/cpu_cfs_throttled_periods", "name": "pods/kube_pod_container_resource_limits_memory_bytes", "name": "pods/cpu_cfs_periods", "name": "pods/kube_pod_status_ready", "name": "pods/kube_pod_container_status_terminated", "name": "pods/memory_failures", "name": "pods/memory_rss", "name": "pods/spec_memory_swap_limit_bytes", "name": "pods/memory_cache", "name": "pods/kube_pod_start_time", "name": "pods/fs_io_time", "name": "pods/fs_reads", "name": "pods/fs_inodes_free", "name": "pods/kube_pod_container_status_ready", "name": "pods/fs_sector_writes", "name": "pods/cpu_load_average_10s", "name": "pods/spec_memory_limit_bytes", "name": "pods/kube_pod_labels", "name": "pods/kube_pod_container_status_restarts", "name": "pods/kube_pod_container_info", "name": "pods/fs_usage_bytes", "name": "pods/kube_pod_completion_time", "name": "pods/kube_pod_container_status_last_terminated_reason", "name": "pods/kube_pod_status_scheduled_time", "name": "pods/memory_max_usage_bytes", "name": "pods/fs_inodes", "name": "pods/fs_write",
部署Deployment
在容器服务控制台中点击无状态->使用镜像创建,创建并部署一个nginx deployment,配置如下
在访问设置中配置服务
创建成功后可以在无状态列表中找到名为nginx的deployment,点击详情可以查看到相关信息
创建HPA
在上述详情页中点击容器组水平伸缩器,点击创建,配置相关内容(指标使用pods,参考上述自定义监控指标内容填写一项,这里使用memory_usage_bytes,阈值10485760=10M)
创建成功后可以在列表中查看到nginx-hpa
测试并触发自动伸缩
使用压测工具ab进行压测
for a in `seq 1 50`; do ab -rSqd -c 100 -n 2000 http://ng.cfc7d1315bdd14d529a7f102c2163736d.cn-beijing.alicontainer.com/;done
等待一段时间,可以看到pod数量的变化
总结
通过 Prometheus 来监控应用程序并暴露出用于弹性伸缩的指标,使用HPA利用这些监控指标对应用进行弹性伸缩,可以应对一些突发状况,提高应用的可用性。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
运维编排场景系列-----自动从负载均衡移除停止的ECS实例
场景简介 挂载在负载均衡上的ECS实例,存在被意外停止的可能性,若实例意外停止后没有得到及时处理,负载均衡上一直挂载着异常状态的实例,或被动地等待负载均衡的处理异常,这种情况肯定不是我们想要的。通过运维编排服务中事件触发器动作可对您运行中实例进行监控,一旦实例进入停止状态,则立刻进行一些逻辑处理,确保异常实例及时移除。 解决方案 步骤拆分 对ECS实例通过OOS的事件触发器进行有效监控,保证实例中断事件发生后及时得到处理。 检查中断的实例是否为当前负载均衡上的,保证后续任务只针对该负载均衡上的中断实例执行。 将中断实例从负载均衡后端服务器列表移除,主动剔除问题实例。 模版内容(YAML格式) --- FormatVersion: OOS-2019-06-01 Description: Remove ECS Instance from SLB when Instance Status is Stopped. Parameters: regionId: Description: The Region Id of SLB and Instance. Type: String MinLengt...
- 下一篇
运维编排服务系列-----自动启动意外停止的ECS实例
有时ECS实例可能因为某些意外原因被停止,可通过OOS的事件触发器对ECS实例进行监控,一旦实例停止,则对实例自动地执行恢复逻辑,比如自动启动,进而实现ECS实例的快恢复。 步骤拆分 对账号下的ECS实例进行监控。 一旦有ECS实例停止,则检查其是否为要自动启动的Tag下的ECS实例。 若不是该Tag下的实例,则忽略此ECS实例的停止,若是该Tag下的ECS实例,则执行后面逻辑。 对实例做一些恢复逻辑,此处对实例进行启动。 等待恢复逻辑执行成功,此处等待停止的实例启动成功。 OOS模版任务 通过OOS事件触发器监控所有的ECS实例是否停止。 若有实例停止,检查该实例是否为要被自启动Tag下的ECS实例。 若不是则忽略,实例的停止,若是则对该实例进行启动。 等待实例状态变为运行中。 模版内容 FormatVersion: OOS-2019-06-01 Description: Start ECS instance when instance is stopped. Parameters: tagKey: Description: The tag key for query ECS ins...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Red5直播服务器,属于Java语言的直播服务器
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19