上云无忧 > 文档中心 > 百度智能云容器引擎服务 CCE 支持定时伸缩部署
容器引擎服务CCE
百度智能云容器引擎服务 CCE 支持定时伸缩部署

文档简介:
对于某些可预知的业务情形,可提前设置好定时伸缩任务,在业务波峰来临之前扩容工作容器,可以减少运维人员的工作量。目前CCE支持对Deployment、StatefulSet设置定时伸缩任务,同时支持定时伸缩与HPA结合使用,极大扩展了弹性伸缩的应用场景。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

一、定时、周期伸缩介绍

对于某些可预知的业务情形,可提前设置好定时伸缩任务,在业务波峰来临之前扩容工作容器,可以减少运维人员的工作量。目前CCE支持对Deployment、StatefulSet设置定时伸缩任务,同时支持定时伸缩与HPA结合使用,极大扩展了弹性伸缩的应用场景。

二、使用手册

前提:创建CCE集群,集群版本>1.13.x

在已经创建的CCE集群中,按照如下步骤:

1、创建CRD yaml

apiVersion: apiextensions.k8s.io/v1beta1
kind: CustomResourceDefinition
metadata:
  name: cronhpas.cce.io
spec:
  group: cce.io
  version: v1
  names:
    kind: CronHPA
    listKind: CronHPAList
    plural: cronhpas
    singular: cronhpa
  scope: Namespaced

2、创建cronHPA_controller的相关资源

apiVersion: v1
kind: ServiceAccount
metadata:
  name: cce-cronhpa-controller
  namespace: kube-system
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: cce-cronhpa-controller
  namespace: kube-system
subjects:
- kind: ServiceAccount
  name: cce-cronhpa-controller
  namespace: kube-system
roleRef:
  kind: ClusterRole
  name: cce-cronhpa-controller
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: cce-cronhpa-controller
  namespace: kube-system
rules:
- apiGroups:
  - ""
  resources:
  - deployments
  - statefulsets
  - events
  verbs:
  - '*'
- apiGroups: ["extensions", "apps"]
  resources:
  - deployments
  - deployments/scale
  - statefulsets
  - replicasets
  verbs:
  - '*'
- apiGroups:
  - autoscaling
  resources:
  - horizontalpodautoscalers
  verbs:
  - '*'
- apiGroups:
  - apiextensions.k8s.io
  resources:
  - customresourcedefinitions
  verbs:
  - '*'
- apiGroups:
  - cce.io
  resources:
  - '*'
  verbs:
  - '*'
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: cron-hpa-controller
  namespace: kube-system
  labels:
    app: cron-hpa-controller
spec:
  replicas: 1
  selector:
    matchLabels:
      app: cron-hpa-controller
  template:
    metadata:
      labels:
        app: cron-hpa-controller
    spec:
      serviceAccountName: cce-cronhpa-controller
      containers:
        - name: cron-hpa-controller
          image: hub.baidubce.com/jpaas-public/cce-cronhpa-controller:latest
          imagePullPolicy: Always
          command:
            - ./usr/local/bin/cce-cronhpa-controller
          resources:
            limits:
              memory: 512Mi
              cpu: 200m
            requests:
              memory: 200Mi
              cpu: 100m
          volumeMounts:
            - name: host-time
              mountPath: /etc/localtime
              readOnly: true
      volumes:
        - name: host-time
          hostPath:
            path: /etc/localtime

此时cronHPA部署环境搭建完毕,接下来可以创建相应的实例资源

3、创建cronHPA资源与其引用的子资源

引用的子对象为deployment

这里会创建CronHPA、Deployment两个资源

apiVersion: apps/v1
kind: Deployment
metadata:
  name: cronhpa-test
spec:
  replicas: 1
  selector:
    matchLabels:
      name: cronhpa-test
  template:
    metadata:
      name: cronhpa-test
      labels:
        name: cronhpa-test
    spec:
      containers:
      - name: nginx
        image: hub.baidubce.com/jpaas-public/nginx-alpine-go
        ports:
          - containerPort: 80
---
apiVersion: cce.io/v1
kind: CronHPA
metadata:
  name: cronhpa-sample
  namespace: default
spec:
   scaleTargetRef:
      apiVersion: apps/v1
      kind: Deployment
      name: cronhpa-test
   excludeDates:
     - "*/2 * * * *"
   crons:
   - name: "scale-down"
     schedule: "*/1 * * * *"
     targetSize: 2
     runOnce: true
   - name: "scale-up"
     schedule: "*/2 * * * *"
     targetSize: 3
     runOnce: false

scaleTargetRef: 非空,字段标识该CronHPA指定的资源对象,即伸缩对象,可以是deployment、statefulset。

excludeDates:一个cron字符串数组,该cron表达式组根据当前时间、LastScheduleTime进行计算下次不执行伸缩的时间集,从而实现日期过滤功能(注:这里多个cron的关系是或,即每一个cron代表一个过滤时间)

crons:字段下是cron任务的集合

cron: name:字符串,非空。作为该cron的唯一标识(设置cron name必须保证在同一个crons数组中的所有cron的name均不同)。

targetSize:int32,非空。设置为用户期望的引用子资源的副本数。

schedule:字符串,非空。该cron表达式组根据当前时间、LastScheduleTime进行下次执行伸缩的时间

runOnce: 布尔类型,可以为空(默认值false),为true时表示该cron是否需要只执行一次
注意:多个cron可能会在同一时刻操作同一个资源对象,此时会选择targetSize最大的cron任务执行,以保证业务不受影响。

引用的子对象为HorizontalPodAutoscaler

这里会创建CronHPA、HorizontalPodAutoscaler、Deployment三个资源。

注意:此种情况主要是为了解决CronHPA与HPA引用同一个Deployment情况,用户不应该让CronHPA与HPA引用同一个Deployment,而是CronHPA引用HPA,HPA引用Deployment,这样可以对同一个Deployment同时使用CronHPA与HPA。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: hpa-deploy
  labels:
    app: hpa-deploy
spec:
  replicas: 5
  selector:
    matchLabels:
      app: hpa-deploy
  template:
    metadata:
      labels:
        app: hpa-deploy
    spec:
      containers:
      - name: hpa-deploy
        image: hub.baidubce.com/jpaas-public/hpa:hpa-example
        resources:
            limits:
              cpu: 100m
              memory: 300Mi
            requests:
              cpu: 10m
              memory: 30Mi
        ports:
        - containerPort: 80
---
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: cronhpa-hpa-test
  namespace: default
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hpa-deploy
  minReplicas: 1
  maxReplicas: 10
  metrics:
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 50
---
apiVersion: cce.io/v1
kind: CronHPA
metadata:
  name: cronhpa-hpa-sample
  namespace: default
spec:
   scaleTargetRef:
      apiVersion: autoscaling/v2beta2
      kind: HorizontalPodAutoscaler
      name: cronhpa-hpa-test
   crons:
   - name: "scale-up"
     schedule: "*/1 * * * *"
     targetSize: 11

scaleTargetRef:在这种情况下是 kind为HorizontalPodAutoscaler

其他字段的含义与deployment相同

此种情况主要是为了兼容HPA 与 定时伸缩组件,让二者能够引用用一个资源对象,目前百度云支持如下的冲突解决,兼容情况。

HPA(MIN/MAX) cronHPA(targetSize) deploy(currentSize) result solution
5/10 4 5 hpa(4/10) deployment 5 定时低于当前,保留当前副本定时低于HPA下限,修改HPA下限
5/10 11 5 hpa(11/11) deployment 11 定时高于当前,保留定时副本定时高于HPA上限,修改HPA上限
1/5 2 2 hpa(1/5) deployment 2 定时和当前一致,无需变更
1/5 2 3 hpa(1/5) deployment 3 当前高于定时,保留当前副本
1/5 3 2 hpa(3/5) deployment 3 定时高于当前,保留定时副本定时高于HPA下限,修改HPA下限

兼容思想只有一个,就是维持deploy最大副本的情况,并且可以让deploy持续处于最大副本的状态。

三、常用案例

cron设置格式

1、每月每天每小时的第 0 分钟执行一次: 0 * * * *

2、在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次: 0 6-12/3 12

3、周一到周五每天下午 5:00执行一次: 0 17 * * 1-5

4、每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行: 20 0-23/2 * * *

四、FAQ

1、controller同步的时间粒度

CronHPA controller每隔1分钟同步一次集群内所有的CronHPA的资源。(cron的粒度最小是分钟)

2、是否支持controller多副本

支持

3、为什么设置的cron任务未生效

在kube-system命令空间下查看cce-cronhpa-controller 组件是否正常工作 查看cce-cronhpa-controller 组件的日志,是否有报“too many missed start time (> 100)” ,错误,可能是controller积累太多历史任务未处理。 提工单解决

相似文档
  • CCE 的运行基于一组百度智能云服务器组成的集群,集群为用户的容器运行提供必要的基础资源,如CPU、内存和磁盘等。通常集群的规模在创建 CCE 服务的时候由用户定义,在使用 CCE 过程中也可以随时对集群进行扩容或者缩容。但是当用户的服务增长速度超过预期或者出现波动峰值时,集群提供的资源可能会不足以支撑服务所需,导致服务运行变慢。
  • 使用 CCE 节点组并开启自动扩缩容后,当出现 Pod 由于资源不足导致调度失败时,集群会自动的进行节点扩容,整个流程通常需要若干分钟才能完成,当出现流量突发时,分钟级的扩容速度显然力不从心。本文介绍通过 K8S 的 PriorityClass 实现 Pod 占位,从而能在 CCE 上实现秒级伸缩,用以应对流量突发的场景。
  • 云原生AI基于百度智能云容器引擎(CCE)支持 GPU 显存和算力的共享与隔离,同时集成PaddlePaddle、TensorFlow、Pytorch 等主流深度学习框架,通过对 AI 任务的编排、管理,提供低门槛、高效的深度学习训练服务,帮助企业客户提高 GPU 资源使用效率和提升 AI 训练速度,快速降本增效。
  • 您可以新建一个队列,为 AI 任务指定运行所需的资源和操作人员。 前提条件: 您已成功创建一个 Kubernetes 集群,详情请见创建集群。 您已成功安装 CCE AI Job Scheduler 和 CCE Deep Learning Frameworks Operator 组件,否则云原生 AI 功能将无法使用。
  • 您可以通过容器引擎管理控制台删除不再需要的队列。 前提条件: 您已成功安装 CCE AI Job Scheduler 和 CCE Deep Learning Frameworks Operator 组件,否则云原生 AI 功能将无法使用。 您已成功创建队列。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部