云服务器内容精选

  • 分钟依赖分钟 规则:分钟是最小调度粒度,没有自然分钟周期的概念,依赖策略是往前推一个调度周期找依赖实例。 举例1:A依赖B,为同周期分钟作业,在同一时间点,B执行完后开始执行A。 图2 分钟依赖分钟举例一 举例2:A依赖B,A为15分钟周期,B为10分钟周期,A往前推15分钟(包括当前启动整点),依赖范围内的B实例,在2:15分执行A任务依赖1个B实例(2:10分),2:30执行的A任务依赖两个B实例(2:20和2:30)。它的边界范围为(0分:15分],前开后闭区间。 图3 分钟依赖分钟举例二
  • 小时依赖小时 规则:每个自然小时周期内的实例产生依赖,区间边界是自然小时[00:00, 00:59]。 举例1:A依赖B,在同自然小时内,无论A、B设置在什么时间点执行,A永远在B之后执行。 图8 小时依赖小时举例一 举例2:A依赖B,A在每小时5分0秒执行,B在12分执行,A会等B执行完成后执行。 图9 小时依赖小时举例二 离散小时依赖离散小时 : 自然天内,依赖关系中的上游、下游任务数量一致,上下游周期数一致。 自然天内,上下游任务数量不一致,下游任务运行当天生成的周期实例,将根据就近原则挂载依赖,依赖距离自己定时运行时间最近的上游实例。从index向前找上游依赖实例,依赖上游一整个区间内的实例;向前未找到依赖的实例时,需要向后找,向后查找时,只依赖最近的一个实例。
  • 小时依赖分钟 规则:小时作业依赖分钟作业,往前推到上一个自然小时范围内的所有分钟级实例。区间是前开后闭。 举例1:A依赖B,A为小时作业,每个小时0分执行,B为15m分钟作业;B执行完后执行A。 图6 小时依赖分钟举例一 举例2:A依赖B,A为小时作业,启动时间3:20,B为15m作业,会依赖往前推一个小时内的所有B实例。 图7 小时依赖分钟举例二 如果勾选“最近”的按钮,小时作业只依赖所选作业最近的一个运行实例,比如A在3:20开始调度,A依赖B最近的3:00调度的一个运行实例。 如果作业A在零点进行调度,所依赖作业B可以是昨天的分钟任务。
  • 天依赖小时 规则:按自然天,天周期作业实例依赖一天内所有小时作业的实例。A为天作业,依赖B小时作业,A依赖所有B在自然天内的实例,A会在最后一个B小时作业实例执行完成后执行。 举例:A依赖B,A配置的调度时间为每天17点执行一次,B从0点开始,每5个小时执行一次,那么A实际执行时间为JobB在20点的实例运行完之后开始运行。 图12 天依赖小时 如果勾选“最近”的按钮,天作业只依赖所选作业最近的一个运行实例,比如A在每天17点开始调度,A依赖B最近的15:00调度的一个运行实例。
  • 天依赖天 规则:按自然天内的实例进行依赖,不会跨天向前推找依赖实例。在同自然天内A依赖B ,无论A、B设置在什么时间点执行,A永远在B之后执行。 天区间为[00:00:00, 23:59:59] 举例1:A依赖B,A在2:00执行,B在3:00执行,A会等B在3:00执行完成后执行。 图13 天依赖天举例一 举例2:A依赖B,A在5:00执行,B在3:00执行,A在B执行完成后,在5:00执行。 图14 天依赖天举例二
  • 调度优先级介绍 节点池软亲和调度,是通过节点池上的标签(Label)进行软亲和,具体是通过给每一个节点进行打分的机制来排序筛选最优节点。 原则:尽可能把Pod调度到带有相关标签的节点上。 打分公式如下: score = weight * MaxNodeScore * haveLabel 参数说明: weight:节点池软亲和plugin的权重。 MaxNodeScore:节点最大得分,值为100。 haveLabel:节点上是否存在插件中配置的label,如果有,值为1,如果节点上没有,值为0。
  • 配置Volcano节点池软亲和调度策略 在节点池上配置用于亲和调度的标签。 登录CCE控制台。 单击集群名称进入集群,在左侧选择“节点管理”,在右侧选择“节点池”页签。 单击节点池名称后的“更新”,在弹出的“更新节点池”页面中配置参数,在“K8s标签”中配置对应的标签。 示例如下: 单击左侧导航栏的“插件中心”,在右侧找到Volcano调度器,单击“安装”或“编辑”,并在“参数配置”中设置Volcano调度器配置参数。 { "ca_cert": "", "default_scheduler_conf": { "actions": "allocate, backfill, preempt", "tiers": [ { "plugins": [ { "name": "priority" }, { "name": "gang" }, { "name": "conformance" } ] }, { "plugins": [ { "name": "drf" }, { "name": "predicates" }, { "name": "nodeorder" } ] }, { "plugins": [ { "name": "cce-gpu-topology-predicate" }, { "name": "cce-gpu-topology-priority" }, { "name": "cce-gpu" }, { // 开启节点池亲和性调度 "name": "nodepoolaffinity", // 节点池亲和性调度权重及标签设置 "arguments": { "nodepoolaffinity.weight": 10000, "nodepoolaffinity.label": "nodepool1=nodepool1" } } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "server_cert": "", "server_key": "" } 完成以上配置后,单击“确定”。
  • 小时依赖小时 规则:每个自然小时周期内的实例产生依赖,区间边界是自然小时[00:00, 00:59],依赖策略是调度周期长的作业,往前推一个调度周期找依赖实例。 A依赖B,在同自然小时内,无论A、B设置在什么时间点执行,A永远在B的前一周期完成后执行。 举例:A在每小时5分0秒执行,B在12分执行,A会在每小时5分时依赖B上一小时生成的实例。 离散小时依赖离散小时 : 自然天内,依赖关系中的上游、下游任务数量一致,上下游周期数一致。 自然天内,上下游任务数量不一致,下游任务运行当天生成的周期实例,将根据就近原则挂载依赖,依赖距离自己定时运行时间最近的上游实例。从index向前找上游依赖实例,依赖上游一整个区间内的实例;向前未找到依赖的实例时,需要向后找,向后查找时,只依赖最近的一个实例。
  • 任务场景地图模式操作说明 选中某个任务场景时,右侧会显示出对应场景筛选时间下所有待执行、执行中、已完成的任务/子任务 如果某个人的执法仪有上报位置,地图上有头像,点击头像后显示此人作为执行人的所有当天要执行的任务 鼠标悬停在任务上会显示:任务名称、计划开始时间-计划完成时间,任务场景名称、优先级、状态行信息 图1 任务场景地图模式 图2 任务悬停信息展示 父主题: 如何查看智能调度看板-地图模式?
  • 默认应用扩缩容优先级策略 使用默认应用扩缩容优先级策略的情况下,集群中存在两个默认CR资源: Balancer CRD对应的CR资源 apiVersion: autoscaling.volcano.sh/v1alpha1 kind: Balancer metadata: name: default-balancer spec: balancerPolicyTemplateName: default-balancerpolicytemplate targets: - namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: Exists weight: 10 表1 Balancer对象关键参数说明 字段 含义 类型 备注 metadata.name 名称 String 必填字段。 spec. balancerPolicyTemplateName 优先级策略名称 String 必填字段。值为集群中相应BalancerPolicyTemplate CR资源名。 spec.targets 优先级策略作用范围 Slice 必填字段。举例: 针对default命名空间下的应用生效 spec: targets: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: default 针对default、other、another多个命名空间下的应用生效 spec: targets: - namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: In values: - default - other - another 针对所有命名空间下的应用生效 spec: targets: - namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: Exists 只针对名为xxx-xxx-xxx,类型为Deployment的应用生效 spec: targets: - objectSelectors: - name: xxx-xxx-xxx kind: Deployment 只针对命名空间为default,名为xxx-xxx-xxx类型为Deployment的应用生效 spec: targets: - namespaceSelector: matchLabels: kubernetes.io/metadata.name: default objectSelectors: - name: xxx-xxx-xxx kind: Deployment spec.weight 优先级策略权重 int32 必填字段。在集群存在多个Balancer 对象资源情况下,某个应用可能存在于多个Balancer对象作用范围的交集中,此时选择weight值大的Balancer对象生效。 BalancerPolicyTemplate CRD对应的CR资源 apiVersion: autoscaling.volcano.sh/v1alpha1 kind: BalancerPolicyTemplate metadata: name: default-balancerpolicytemplate spec: policy: policyName: Priority priorities: priorityGroups: - priority: 10 requirements: - key: node.cce.io/billing-mode operator: In values: - post-paid - priority: 100 requirements: - key: node.cce.io/billing-mode operator: In values: - pre-paid - priority: 1 requirements: - key: kubernetes.io/role operator: In values: - virtual-kubelet - bursting 表2 BalancerPolicyTemplate对象关键参数说明 字段 含义 类型 备注 metadata.name 名称 String 必填字段。 spec.policy 优先级策略内容 Struct 必填字段。 spec.policy.policyname 优先级策略名 String 必填字段。当前只支持名为“Priority”的优先级策略。 spec.policy.priorities. priorityGroups 优先级策略中定义的具体优先级 Slice 必填字段。举例: 将包周期节点的优先级设置为100 priorityGroups: - priority: 100 requirements: - key: node.cce.io/billing-mode operator: In values: - pre-paid 将按需计费节点的优先级设置为10 priorityGroups: - priority: 10 requirements: - key: node.cce.io/billing-mode operator: In values: - post-paid 将virtual-kubelet/bursting节点的优先级设置为1 priorityGroups: - priority: 1 requirements: - key: kubernetes.io/role operator: In values: - virtual-kubelet - bursting
  • 配置应用扩缩容优先级策略 开启应用扩缩容优先级策略开关并成功安装Volcano插件后,会在集群中创建默认扩缩容优先级策略。 获取默认Balancer CR资源。 # kubectl get balancer default-balancer -oyaml apiVersion: autoscaling.volcano.sh/v1alpha1 kind: Balancer metadata: name: default-balancer spec: balancerPolicyTemplateName: default-balancerpolicytemplate targets: - namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: Exists weight: 10 获取默认BalancerPolicyTemplate CR资源。 # kubectl get balancerpolicytemplate default-balancerpolicytemplate -oyaml apiVersion: autoscaling.volcano.sh/v1alpha1 kind: BalancerPolicyTemplate metadata: name: default-balancerpolicytemplate spec: policy: policyName: Priority priorities: priorityGroups: - priority: 10 requirements: - key: node.cce.io/billing-mode operator: In values: - post-paid - priority: 100 requirements: - key: node.cce.io/billing-mode operator: In values: - pre-paid - priority: 1 requirements: - key: kubernetes.io/role operator: In values: - virtual-kubelet - bursting 具体参数含义请参见默认应用扩缩容优先级策略。 部署工作负载,设定实例数为1。 当前应用的Pod将会优先调度到包周期节点上。 apiVersion: apps/v1 kind: Deployment metadata: name: balancer-test namespace: default labels: virtual-kubelet.io/burst-to-cci: 'auto' #如果集群资源不足时,支持将Pod部署到CCI集群 spec: replicas: 1 selector: matchLabels: app: balancer-test template: labels: app: balancer-test spec: containers: image: nginx:latest imagePullPolicy: IfNotPresent name: container-1 resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi schedulerName: volcano 调整工作负载实例数为5。 当前应用的Pod将会优先调度到包周期节点上。在包周期节点资源不足情况下,优先调度到按需计费节点上。在按需计费节点资源不足情况下,优先调度到virtual-kubelet节点(弹性至CCI)。 apiVersion: apps/v1 kind: Deployment metadata: name: balancer-test namespace: default labels: virtual-kubelet.io/burst-to-cci: 'auto' #如果集群资源不足时,支持将Pod部署到CCI集群 spec: replicas: 5 selector: matchLabels: app: balancer-test template: labels: app: balancer-test spec: containers: image: nginx:latest imagePullPolicy: IfNotPresent name: container-1 resources: limits: cpu: 250m memory: 512Mi requests: cpu: 250m memory: 512Mi schedulerName: volcano 查看各种类型节点上Pod的分值。 包周期节点上的Pod。 apiVersion: v1 kind: Pod metadata: annotations: autoscaling.volcano.sh/dominated-by-balancer: default-balancer #当前Pod通过名为default-balancer的Balancer CR资源控制扩缩优先级 openvessel.io/workload-balancer-score: "100" #当前包周期节点对应的优先级,也代表着Pod的分值 ... nodeName: 192.168.20.100 #包周期节点 按需计费节点上的Pod。 apiVersion: v1 kind: Pod metadata: annotations: autoscaling.volcano.sh/dominated-by-balancer: default-balancer #当前Pod通过名为default-balancer的Balancer CR资源控制扩缩优先级 openvessel.io/workload-balancer-score "10" #当前按需计费节点对应的优先级,也代表着Pod的分值 ... nodeName: 192.168.20.196 #按需计费节点 virtual-kubelet节点(弹性至CCI)的Pod。 apiVersion: v1 kind: Pod metadata: annotations: autoscaling.volcano.sh/dominated-by-balancer: default-balancer #当前Pod通过名为default-balancer的Balancer CR资源控制扩缩优先级 openvessel.io/workload-balancer-score: "1" #当前virtual-kubelet节点对应的优先级,也代表着pod的分值 ... nodeName: virtual-kubelet #virtual-kubelet节点 逐步进行工作负载的缩容操作,调小实例数。 virtual-kubelet节点(弹性至CCI)的Pod将优先被删除,其次为按需计费节点上的Pod,最后为包周期节点上的Pod。
  • 自定义应用扩缩容优先级策略 BalancerPolicyTemplate 资源用来进行优先级策略定义,如果用户需要自定义应用扩缩容优先级策略,则需要针对其内容进行修改。 如果存在多个BalancerPolicyTemplate资源,扩缩策略执行结果将受到这些资源对象的共同作用。因此,如果用户不存在默认扩缩容优先级策略的应用场景,可以执行如下命令对默认优先级策略进行删除。 kubectl delete balancerpolicytemplate default-balancerpolicytemplate 以“扩容时优先将工作负载调度到HCE2.0操作系统的节点,其次调度到欧拉操作系统的节点;缩容时优先删除欧拉操作系统节点上的工作负载,其次删除HCE2.0操作系统上的工作负载”为例: 编写新BalancerPolicyTemplate 资源对象。 vim new-balancerpolicytemplate.yaml 内容如下: apiVersion: autoscaling.volcano.sh/v1alpha1 kind: BalancerPolicyTemplate metadata: name: new-balancerpolicytemplate spec: policy: policyName: Priority priorities: priorityGroups: - priority: 10 # 设置欧拉操作系统节点优先级为10 requirements: - key: os.name # 节点操作系统标签 operator: In values: - EulerOS_2.0_SP9x86_64 # 可能涉及操作系统的小版本号,用户可以根据自身场景,任意添加 - priority: 100 # 设置HCE2.0操作系统节点优先级为100 requirements: - key: os.name # 节点操作系统标签 operator: In values: - Huawei_Cloud_EulerOS_2.0_x86_64 创建新BalancerPolicyTemplate资源对象。 kubectl create -f new-balancerpolicytemplate.yaml 修改default-balancer对象内容,也可以按需进行新建balancer对象 kubectl edit balancer default-balancer 修改内容如下: apiVersion: autoscaling.volcano.sh/v1alpha1 kind: Balancer metadata: name: default-balancer spec: balancerPolicyTemplateName: new-balancerpolicytemplate targets: - namespaceSelector: matchExpressions: - key: kubernetes.io/metadata.name operator: Exists weight: 10 查看各个Pod的注解中openvessel.io/workload-balancer-score对应的值是否满足预期。 EulerOS节点上Pod的openvessel.io/workload-balancer-score注解对应值是10;HCE2.0节点上的pod 的openvessel.io/workload-balancer-score注解对应值是100。
  • 应用扩缩容优先级策略介绍 开启应用扩缩容优先级策略,将会在集群中新增两类CRD资源,分别为Balancer与BalancerPolicyTemplate,并创建默认的扩缩容优先级策略,详情请参见默认应用扩缩容优先级策略。Volcano插件根据BalancerPolicyTemplate来获取各个节点的优先级,以控制应用扩容时Pod调度的优先级,同时volcano插件基于Balancer和BalancerPolicyTemplate来设置应用缩容时的优先级。 BalancerPolicyTemplate CRD资源用来进行优先级策略定义。以默认扩缩容优先级策略为例,默认BalancerPolicyTemplate CR资源将会把包周期节点的优先级设置为最高,按需计费节点次之,virtual-kubelet节点(弹性至CCI)设置为最低。 BalancerPolicyTemplate CR资源不支持更新操作。 Balancer CRD资源用来申明扩缩容优先级的作用范围。创建Balancer CR资源时,可以指定某个命名空间下的工作负载作为生效范围,也可以具体指定某个Deployment或者某个ReplicaSet工作负载作为生效范围。 一个Balancer CR资源对应一个BalancerPolicyTemplate CR资源,两者结合共同申明哪些工作负载使用了哪些优先级策略。 插件默认的扩缩容优先级策略通过BalancerPolicyTemplate对象将包周期节点、按需计费节点、virtual-kubelet节点(弹性至CCI)三种类型分成不同的优先级,扩容时,volcano在调度新增Pod时将会考虑这些优先级,优先将Pod调度到优先级高的包周期节点上。 通过Balancer和BalancerPolicyTemplate对象,Volcano插件对Balancer作用范围内的Pod,根据BalancerPolicyTemplate对象定义的优先级分别打上以下注解: openvessel.io/workload-balancer-score:表示Pod的分值,对于高优先级节点上的Pod,其对应的分值也相对较大。 autoscaling.volcano.sh/dominated-by-balancer:表示当前Pod受哪个Balancer对象控制,缩容时会优先缩容分值低的Pod。 如果用户原先的Pod已经存在社区支持的controller.kubernetes.io/pod-deletion-cost注解,那么缩容时将会按照该值定义的优先级来进行缩容。当两个Pod对应controller.kubernetes.io/pod-deletion-cost值相同时,才会按照openvessel.io/workload-balancer-score注解定义的优先级进行缩容。
  • 作业实例运行状态 表4 作业实例运行状态说明 运行状态 场景描述 等待运行 如果作业实例依赖的前置作业实例未最终完成(未最终完成的状态包括:未生成实例、等待运行、运行失败),该实例处于等待运行。 运行中 作业正常运行中。说明前置的依赖作业都已完成,该作业调度时间已到。 运行成功 作业真正成功执行了业务逻辑,并且最终成功(包含失败重试的成功)。 强制成功 作业实例处于失败或取消状态时,进行手动执行强制成功。 忽略失败成功 如下图所示,节点B设置了失败处理策略,当B执行失败了,会跳过B继续执行C,当存在这种节点运行失败,整个作业执行完成了就是忽略失败成功。 图5 失败处理策略-继续执行下一节点 运行异常 这种运行状态场景较少。如下图所示,节点B设置了失败处理策略,当B执行失败了,作业实例立即挂起,不会继续执行C,作业实例进入异常运行状态。 图6 失败处理策略-挂起当前作业执行计划 已暂停 这种运行状态场景较少。当某个作业的实例正在运行,测试人员在作业监控界面,手工暂停作业调度。此时,该作业正在运行的实例会进入已暂停状态。 已取消 等待运行状态的作业实例,进行手工停止,则实例处于已取消状态。 如果作业实例依赖的直接上游作业被停止调度了,该作业实例会自动进入已取消状态。作业A依赖作业B,作业B被停止调度,作业A实例生成后会自动取消。 冻结 对于未来时间内尚未生成的作业实例,进行冻结后,该作业实例会进入冻结状态。 失败 作业执行失败。
  • Volcano开启NUMA亲和性调度 开启静态(static)CPU管理策略,具体请参考 开启CPU管理策略。 配置CPU拓扑策略。 登录CCE控制台,单击集群名称进入集群,在左侧选择“节点管理”,在右侧选择“节点池”页签,单击节点池名称后的“ 配置管理”。 将kubelet的拓扑管理策略(topology-manager-policy)的值修改为需要的CPU拓扑策略即可。 有效拓扑策略为“none”、“best-effort”、“restricted”、“single-numa-node”,具体策略对应的调度行为请参见Pod调度预测。 开启numa-aware插件功能和resource_exporter功能。 Volcano 1.7.1及以上版本 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到Volcano,单击“编辑”,并在“参数配置”中设置Volcano调度器配置参数。 { "ca_cert": "", "default_scheduler_conf": { "actions": "allocate, backfill, preempt", "tiers": [ { "plugins": [ { "name": "priority" }, { "name": "gang" }, { "name": "conformance" } ] }, { "plugins": [ { "name": "drf" }, { "name": "predicates" }, { "name": "nodeorder" } ] }, { "plugins": [ { "name": "cce-gpu-topology-predicate" }, { "name": "cce-gpu-topology-priority" }, { "name": "cce-gpu" }, { // add this also enable resource_exporter "name": "numa-aware", // the weight of the NUMA Aware Plugin "arguments": { "weight": "10" } } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "server_cert": "", "server_key": "" } Volcano 1.7.1以下版本 Volcano插件开启resource_exporter_enable参数,用于收集节点numa拓扑信息。 { "plugins": { "eas_service": { "availability_zone_id": "", "driver_id": "", "enable": "false", "endpoint": "", "flavor_id": "", "network_type": "", "network_virtual_subnet_id": "", "pool_id": "", "project_id": "", "secret_name": "eas-service-secret" } }, "resource_exporter_enable": "true" } 开启后可以查看当前节点的numa拓扑信息。 kubectl get numatopo NAME AGE node-1 4h8m node-2 4h8m node-3 4h8m 启用Volcano numa-aware算法插件。 kubectl edit cm -n kube-system volcano-scheduler-configmap kind: ConfigMap apiVersion: v1 metadata: name: volcano-scheduler-configmap namespace: kube-system data: default-scheduler.conf: |- actions: "allocate, backfill, preempt" tiers: - plugins: - name: priority - name: gang - name: conformance - plugins: - name: overcommit - name: drf - name: predicates - name: nodeorder - plugins: - name: cce-gpu-topology-predicate - name: cce-gpu-topology-priority - name: cce-gpu - plugins: - name: nodelocalvolume - name: nodeemptydirvolume - name: nodeCSIscheduling - name: networkresource arguments: NetworkType: vpc-router - name: numa-aware # add it to enable numa-aware plugin arguments: weight: 10 # the weight of the NUMA Aware Plugin