Kubernetes弹性伸缩全场景解读(八) - 定时伸缩组件支持运维模式

简介: ## 前言 定时伸缩(cronhpa)是很多开发者在解决负载周期性时最常用的方法,通过类似crontab的语法可以在一个时间点定时触发伸缩活动。crontab的语义表达是很强大的,但是也存在语法复杂,执行计划容易被打断等问题。为了解决上述的问题,定时伸缩(cronhpa)提供了运维模式,支持通过运维页面来查看底层排队的定时任务,同时也提供了API接口用于开发者自研的平台接入与集成。 #

前言

定时伸缩(cronhpa)是很多开发者在解决负载周期性时最常用的方法,通过类似crontab的语法可以在一个时间点定时触发伸缩活动。crontab的语义表达是很强大的,但是也存在语法复杂,执行计划容易被打断等问题。为了解决上述的问题,定时伸缩(cronhpa)提供了运维模式,支持通过运维页面来查看底层排队的定时任务,同时也提供了API接口用于开发者自研的平台接入与集成。

定时伸缩组件运维模式介绍

当通过ACK的应用目录或者开源社区的模板下发最新版本定时伸缩组件(cronhpa)后,默认在8000端口就已经开启了运维模式。我们先给定时伸缩组件(cronhpa)创建一个svc用来访问运维页面。

apiVersion: v1
kind: Service
metadata:
  name: kubernetes-cronhpa-controller
  namespace: kube-system
spec:
    ports:
    - port: 80
      protocol: TCP
      targetPort: 8000
  selector:
    app: ack-kubernetes-cronhpa-controller
  sessionAffinity: None
  type: ClusterIP

此时,在本地我们可以通过执行kubectl proxy --port=8080启动proxy模式,再在本地浏览器中输入http://localhost:8080/api/v1/namespaces/kube-system/services/kubernetes-cronhpa-controller/proxy/ 即可访问运维管理页面。

image.png

让我们来解析下这个页面中展现的字段和使用的方式。

  • CronHPA:定时伸缩CRD的名字。
  • Namespace:定时伸缩CRD的命名空间。
  • Id:伸缩任务的唯一Id,这个Id的作用是唯一决定一个任务的信息。

image.png

当CRD中出现了JobId与底层CronEngine中的Id不匹配的情况,说明CRD中的任务没有及时被下发到底层的定时执行引擎中,此时就需要特别关注下定时伸缩(cronhpa)组件稳定性的问题了。

  • Pre:上一次任务执行的时间,如果这个数值是初始时间(0001-01-01 00:00:00 +0000 UTC)说明任务还没有被执行过。
  • Next:下一次任务执行的时间,用来确认定时引擎中是否已经有正确排队的任务。

通常情况下,我们只需要通过页面大盘确认下发的作业已经存在,并且Pre/Next这两个字段是正常的状态,基本就可以确认定时任务可以正常执行了。如果开发者有自己的运维管理系统,可以使用API的方式进行接入。接口地址:http://localhost:8080/api/v1/namespaces/kube-system/services/kubernetes-cronhpa-controller/proxy/api.json

[
    {
        "Schedule": {
            "Second": 1073741824,
            "Minute": 10376293541461622783,
            "Hour": 9223372036871553023,
            "Dom": 9223372041149743102,
            "Month": 9223372036854783998,
            "Dow": 9223372036854775935
        },
        "Next": "2021-03-15T18:53:30+08:00",
        "Prev": "2021-03-15T18:52:30+08:00",
        "Job": {
            "TargetRef": {
                "RefName": "nginx-deployment-basic",
                "RefNamespace": "default",
                "RefKind": "Deployment",
                "RefGroup": "apps",
                "RefVersion": "v1"
            },
            "HPARef": {
                "kind": "CronHorizontalPodAutoscaler",
                "apiVersion": "autoscaling.alibabacloud.com/v1beta1",
                "metadata": {
                    "name": "cronhpa-sample",
                    "namespace": "default",
                    "selfLink": "/apis/autoscaling.alibabacloud.com/v1beta1/namespaces/default/cronhorizontalpodautoscalers/cronhpa-sample",
                    "uid": "54dc98fe-b311-4763-8d99-25a93bdf5c74",
                    "resourceVersion": "770255389",
                    "generation": 2,
                    "creationTimestamp": "2021-03-15T10:49:46Z",
                    "labels": {
                        "controller-tools.k8s.io": "1.0"
                    },
                    "annotations": {
                        "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"autoscaling.alibabacloud.com/v1beta1\",\"kind\":\"CronHorizontalPodAutoscaler\",\"metadata\":{\"annotations\":{},\"labels\":{\"controller-tools.k8s.io\":\"1.0\"},\"name\":\"cronhpa-sample\",\"namespace\":\"default\"},\"spec\":{\"jobs\":[{\"name\":\"scale-down\",\"schedule\":\"30 */1 * * * *\",\"targetSize\":1},{\"name\":\"scale-up\",\"schedule\":\"01 */1 * * * *\",\"targetSize\":3}],\"scaleTargetRef\":{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"name\":\"nginx-deployment-basic\"}}}\n"
                    }
                },
                "spec": {
                    "scaleTargetRef": {
                        "apiVersion": "apps/v1",
                        "kind": "Deployment",
                        "name": "nginx-deployment-basic"
                    },
                    "jobs": [
                        {
                            "name": "scale-down",
                            "schedule": "30 */1 * * * *",
                            "targetSize": 1
                        },
                        {
                            "name": "scale-up",
                            "schedule": "01 */1 * * * *",
                            "targetSize": 3
                        }
                    ]
                },
                "status": {
                    "scaleTargetRef": {
                        "apiVersion": "apps/v1",
                        "kind": "Deployment",
                        "name": "nginx-deployment-basic"
                    },
                    "conditions": [
                        {
                            "name": "scale-down",
                            "jobId": "f68e5d16-f92b-4456-89d0-1da3ca36efa4",
                            "schedule": "30 */1 * * * *",
                            "targetSize": 1,
                            "runOnce": false,
                            "state": "Submitted",
                            "lastProbeTime": "2021-03-15T10:49:46Z",
                            "message": ""
                        },
                        {
                            "name": "scale-up",
                            "jobId": "8f611afa-ebde-4903-8c23-b323951b8757",
                            "schedule": "01 */1 * * * *",
                            "targetSize": 3,
                            "runOnce": false,
                            "state": "Submitted",
                            "lastProbeTime": "2021-03-15T10:49:46Z",
                            "message": ""
                        }
                    ]
                }
            },
            "DesiredSize": 1,
            "Plan": "30 */1 * * * *",
            "RunOnce": false
        }
    },
    {
        "Schedule": {
            "Second": 2,
            "Minute": 10376293541461622783,
            "Hour": 9223372036871553023,
            "Dom": 9223372041149743102,
            "Month": 9223372036854783998,
            "Dow": 9223372036854775935
        },
        "Next": "2021-03-15T18:54:01+08:00",
        "Prev": "2021-03-15T18:53:01+08:00",
        "Job": {
            "TargetRef": {
                "RefName": "nginx-deployment-basic",
                "RefNamespace": "default",
                "RefKind": "Deployment",
                "RefGroup": "apps",
                "RefVersion": "v1"
            },
            "HPARef": {
                "kind": "CronHorizontalPodAutoscaler",
                "apiVersion": "autoscaling.alibabacloud.com/v1beta1",
                "metadata": {
                    "name": "cronhpa-sample",
                    "namespace": "default",
                    "selfLink": "/apis/autoscaling.alibabacloud.com/v1beta1/namespaces/default/cronhorizontalpodautoscalers/cronhpa-sample",
                    "uid": "54dc98fe-b311-4763-8d99-25a93bdf5c74",
                    "resourceVersion": "770255389",
                    "generation": 2,
                    "creationTimestamp": "2021-03-15T10:49:46Z",
                    "labels": {
                        "controller-tools.k8s.io": "1.0"
                    },
                    "annotations": {
                        "kubectl.kubernetes.io/last-applied-configuration": "{\"apiVersion\":\"autoscaling.alibabacloud.com/v1beta1\",\"kind\":\"CronHorizontalPodAutoscaler\",\"metadata\":{\"annotations\":{},\"labels\":{\"controller-tools.k8s.io\":\"1.0\"},\"name\":\"cronhpa-sample\",\"namespace\":\"default\"},\"spec\":{\"jobs\":[{\"name\":\"scale-down\",\"schedule\":\"30 */1 * * * *\",\"targetSize\":1},{\"name\":\"scale-up\",\"schedule\":\"01 */1 * * * *\",\"targetSize\":3}],\"scaleTargetRef\":{\"apiVersion\":\"apps/v1\",\"kind\":\"Deployment\",\"name\":\"nginx-deployment-basic\"}}}\n"
                    }
                },
                "spec": {
                    "scaleTargetRef": {
                        "apiVersion": "apps/v1",
                        "kind": "Deployment",
                        "name": "nginx-deployment-basic"
                    },
                    "jobs": [
                        {
                            "name": "scale-down",
                            "schedule": "30 */1 * * * *",
                            "targetSize": 1
                        },
                        {
                            "name": "scale-up",
                            "schedule": "01 */1 * * * *",
                            "targetSize": 3
                        }
                    ]
                },
                "status": {
                    "scaleTargetRef": {
                        "apiVersion": "apps/v1",
                        "kind": "Deployment",
                        "name": "nginx-deployment-basic"
                    },
                    "conditions": [
                        {
                            "name": "scale-down",
                            "jobId": "f68e5d16-f92b-4456-89d0-1da3ca36efa4",
                            "schedule": "30 */1 * * * *",
                            "targetSize": 1,
                            "runOnce": false,
                            "state": "Submitted",
                            "lastProbeTime": "2021-03-15T10:49:46Z",
                            "message": ""
                        },
                        {
                            "name": "scale-up",
                            "jobId": "8f611afa-ebde-4903-8c23-b323951b8757",
                            "schedule": "01 */1 * * * *",
                            "targetSize": 3,
                            "runOnce": false,
                            "state": "Submitted",
                            "lastProbeTime": "2021-03-15T10:49:46Z",
                            "message": ""
                        }
                    ]
                }
            },
            "DesiredSize": 3,
            "Plan": "01 */1 * * * *",
            "RunOnce": false
        }
    }
]

最后

通过运维页面和API,开发者可以很好地洞悉定时伸缩(cronhpa)组件的底层状态,提供更确切的伸缩保障。如果对于运维模式有更多的建议,请提交到社区

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
29天前
|
运维 Kubernetes 监控
构建高效自动化运维体系:基于Docker和Kubernetes的实践指南
【2月更文挑战第30天】 在当今快速发展的云计算时代,传统的IT运维模式已难以满足业务的敏捷性和稳定性需求。本文深入探讨了如何通过Docker容器化技术和Kubernetes集群管理工具构建一个高效、可靠的自动化运维体系。文章首先概述了容器化技术和微服务架构的基本概念,随后详细阐述了基于Docker的应用打包、部署流程,以及Kubernetes在自动化部署、扩展和管理容器化应用中的关键作用。最后,文中通过案例分析,展示了如何在实际场景中利用这些技术优化运维流程,提高系统的整体效率和可靠性。
|
4月前
|
Kubernetes Java 流计算
Flink application on k8s 有没有和 session 模式通过-C 指定额外的 jar 的相同功能啊?
Flink application on k8s 有没有和 session 模式通过-C 指定额外的 jar 的相同功能啊?
30 0
|
6月前
|
存储 Kubernetes 监控
基于Kubernetes的电商平台部署:实现高可用、弹性伸缩与容器化管理
基于Kubernetes的电商平台部署:实现高可用、弹性伸缩与容器化管理
|
4月前
|
弹性计算 资源调度 Kubernetes
Flink三种集群模式,Standalone模式,Flink On YARN,Flink On K8S,这三种模式有啥优缺点,生产环境如何选择呢?
Flink三种集群模式,Standalone模式,Flink On YARN,Flink On K8S,这三种模式有啥优缺点,生产环境如何选择呢?
228 3
|
21天前
|
运维 Kubernetes 持续交付
构建高效自动化运维体系:基于Docker和Kubernetes的最佳实践
在现代云计算环境中,自动化运维成为保障系统稳定性与提升效率的关键。本文深入探讨了如何利用Docker容器化技术和Kubernetes容器编排工具构建一个高效、可靠的自动化运维体系。文中不仅介绍了相关的技术原理,还结合具体案例分析了实施过程中的常见问题及解决方案,为读者提供了一套行之有效的最佳实践指南。
|
4月前
|
Kubernetes Cloud Native 网络协议
云原生|kubernetes部署和运行维护中的错误汇总(不定时更新)
云原生|kubernetes部署和运行维护中的错误汇总(不定时更新)
195 0
|
4月前
|
数据安全/隐私保护
ACK Acknowledgement 确认 AES Advanced Encryption Standard 高级加密标准 ATM Asynchronous Transfer Mode异步传输模式
ACK Acknowledgement 确认 AES Advanced Encryption Standard 高级加密标准 ATM Asynchronous Transfer Mode异步传输模式
23 0
|
6月前
|
运维 Kubernetes jenkins
【Kubernetes测试生产环境整体部署及全链路测试、自动化运维平台Jenkins与Devops环境搭建】
【Kubernetes测试生产环境整体部署及全链路测试、自动化运维平台Jenkins与Devops环境搭建】
221 0
|
6月前
|
Kubernetes 应用服务中间件 测试技术
kubernetes calico的两种网络模式BGP和IP-IP性能分析
kubernetes calico的两种网络模式BGP和IP-IP性能分析
|
7月前
|
Kubernetes Cloud Native KVM
Kubernetes(k8s)部署模式发展
Kubernetes(k8s)部署模式发展
75 0