华为云用户手册

  • node节点升级命令说明 对于常规业务节点的升级,命令如下: ./ucs-ctl upgrade node [flags] -c [cluster_name] 其中必须指定集群名称,即加上`-c [cluster_name]`这个flag。 可以配置的flag如下: -a:节点的全量升级。 -y:默认同意所有请求。 -c:指定集群名称。 -r:回滚选项。 -n:指定节点IP。 -f:指定节点配置文件。
  • 删除命名空间 在U CS 控制台删除命名空间将会级联删除各个集群中的同名命名空间,并删除该命名空间相关的所有数据资源,请谨慎操作。 为保证UCS的正常运行,来源为“系统”或“默认”的命名空间无法被删除。 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“命名空间”,在命名空间列表中,选择需要删除的命名空间,单击“删除”。 如需同时删除多个命名空间,可勾选多个命名空间并单击“批量删除”。 根据提示,单击“是”进行删除操作。
  • 创建命名空间 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“命名空间”,单击右上角“创建命名空间”。 参照表1设置命名空间参数。 表1 命名空间基本信息 参数 参数说明 命名空间名称 新建命名空间的名称,命名必须唯一。 标签 Key/value键值对格式,给命名空间添加自定义标签,定义不同属性,通过这些标签了解各个命名空间的特点。 注解 Key/value键值对格式,给命名空间添加自定义注解。 描述 输入对命名空间的描述信息。 配置完成后,单击“确定”。 创建完成后,可单击“查看YAML”查看YAML文件,并支持下载。
  • 使用命名空间 在创建工作负载、Service、Ingress、存储声明等场景时都会用到命名空间,以创建工作负载为例: 登录UCS控制台,在左侧导航栏中选择“容器舰队”。 在“容器舰队”页签下找到已开通集群联邦的舰队,单击名称进入详情页。 在左侧导航栏中选择“工作负载”,在“无状态负载”页签中单击右上角“镜像创建”。 设置工作负载基本信息,选择工作负载所在的命名空间。 继续完成工作负载其他配置的填写并创建。
  • 约束与限制 init容器不支持进行GPU虚拟化。 对于单张GPU卡: 最多虚拟化为20个GPU虚拟设备。 最多调度20个使用隔离能力的Pod。 仅支持调度相同隔离模式(GPU虚拟化支持显存隔离、显存与算力隔离两种隔离模式。)的工作负载。 对于同一工作负载中的不同容器: 仅支持配置单一显卡型号,不支持混合配置两种及以上GPU显卡型号。 仅支持配置一致GPU使用模式,不支持混合配置虚拟化和非虚拟化模式。 使用GPU虚拟化后,该GPU节点不再支持调度使用共享GPU资源的工作负载。
  • 验证GPU虚拟化隔离能力 工作负载创建成功后,您可以尝试验证GPU虚拟化的隔离能力。 登录容器查看容器被分配显存总量 kubectl exec -it gpu-app -- nvidia-smi 预期输出: Wed Apr 12 07:54:59 2023+-----------------------------------------------------------------------------+| NVIDIA-SMI 470.141.03 Driver Version: 470.141.03 CUDA Version: 11.4 ||-------------------------------+----------------------+----------------------+| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. || | | MIG M. ||===============================+======================+======================|| 0 Tesla V100-SXM2... Off | 00000000:21:01.0 Off | 0 || N/A 27C P0 37W / 300W | 4792MiB / 5000MiB | 0% Default || | | N/A |+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+| Processes: || GPU GI CI PID Type Process name GPU Memory || ID ID Usage ||=============================================================================|+-----------------------------------------------------------------------------+ 预期输出表明,该容器被分配显存总量为5000 MiB,实际使用了4792MiB。 查看所在节点的GPU显存隔离情况(在节点上执行)。 export PATH=$PATH:/usr/local/nvidia/bin;nvidia-smi 预期输出: Wed Apr 12 09:31:10 2023+-----------------------------------------------------------------------------+| NVIDIA-SMI 470.141.03 Driver Version: 470.141.03 CUDA Version: 11.4 ||-------------------------------+----------------------+----------------------+| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC || Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. || | | MIG M. ||===============================+======================+======================|| 0 Tesla V100-SXM2... Off | 00000000:21:01.0 Off | 0 || N/A 27C P0 37W / 300W | 4837MiB / 16160MiB | 0% Default || | | N/A |+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+| Processes: || GPU GI CI PID Type Process name GPU Memory || ID ID Usage ||=============================================================================|| 0 N/A N/A 760445 C python 4835MiB |+-----------------------------------------------------------------------------+ 预期输出表明,GPU节点上的显存总量为16160 MiB,其中示例Pod使用了4837MiB。
  • 基础软件规划 节点的操作系统、内核版本等基础软件需要符合表1中的版本要求。 表1 基础软件规划 系统架构 系统类型 网络模型支持 操作系统版本 内核版本限制 x86 Ubuntu 20.04 Cilium 检查命令:cat /etc/lsb-release DISTRIB_DESCRIPTION="Ubuntu 20.04.4 LTS" 检查命令:uname -r 5.15.0-1017-aws Cilium是一种网络插件,支持BGP、eBPF等网络协议,更多内容请参见Cilium官方文档。 多云集群采用containerd作为容器引擎,如果节点操作系统已经安装containerd、runC组件,UCS将直接使用上述组件。 父主题: 安装多云集群的业务规划
  • 外部依赖 表5 外部依赖项 依赖项 功能解释 DNS服务器 DNS服务器需要能够解析OBS、SWR、 IAM 、DNS等服务的 域名 ,这些服务的域名请参见地区及终端节点。 公网接入情况下,节点可自动识别默认DNS配置,需提前将DNS服务器上游设置为公网DNS,接下来无需再手动进行DNS服务器配置。 私网接入情况下,节点无法识别默认DNS配置,因此需提前配置VPCEP解析能力,详情请参考安装前准备。若您还未搭建DNS服务器,可参考DNS进行搭建。 apt源或yum源 确保有可用的apt源或yum源,因为在本地集群执行纳管节点时(纳管节点是指待添加到本地集群管理的服务器),部分安装组件如ntp等,需要从apt源或yum源中获取依赖包。 须知: apt源操作适用于操作系统为Ubuntu的节点,yum源操作适用于操作系统为HCE或Redhat。 NTP服务器 可选,用于保证集群各节点时间同步,如果使用,推荐用户提供外置NTP服务器。
  • 磁盘挂卷 表6 磁盘挂卷 节点类型 磁盘挂载点 可用大小(GB) 用途 集群管理节点 /var/lib/containerd 50 存放containerd镜像目录 /run/containerd 30 containerd运行时目录 /var/paas/run 50 etcd数据目录(推荐使用ssd盘) /var/paas/sys/log 20 存放日志目录 /mnt/paas 40 容器运行挂载目录 /tmp 20 临时文件目录 集群计算节点 /var/lib/containerd 100 存放containerd镜像目录 /run/containerd 50 containerd运行时目录 /mnt/paas 50 容器运行挂载目录 /tmp 20 临时文件目录
  • 用户规划 表9 用户规划 用户 用户组 用户ID 用户组ID 密码 用途 root root 0 0 - UCS本地集群安装时使用的默认用户,也可以指定其他用户来安装本地集群。安装用户要求满足如下条件: 规划的所有集群管理节点密码一致。 用户具有完全的root用户权限。 说明: 安装完成后用户可以自行修改该用户密码或限制该用户root权限。 paas paas 10000 10000 - UCS本地集群服务进程的运行用户、用户组,在安装过程中创建。该用户和用户组对应名称为paas:paas,用户ID和用户组ID对应为10000:10000,因此安装前需要保证用户名、用户组名、用户ID和用户组ID不被占用。若发生冲突,需提前删除对应的用户或者用户组。
  • 资源规格 UCS所安装的本地集群为HA版,适用于商用场景,以满足容灾高可用需求。商用版资源规格如下所述: 表2 容器平台基础能力资源规格 节点类型 数量 CPU (Cores) Mem (GiB) Disk (G)-系统盘 Disk (G)-高性能盘 Disk (G)-数据盘 备注 集群管理节点 3 8 16 100 50 300 需要提供一个VIP用于高可用。 集群计算节点 按需 2 4 40 - 100 数量按需可扩展。 表3 容器智能分析节点资源规格 节点类型 CPU (Cores) Mem (GiB) 监控prometheus Requests:1 Limits:4 Requests:2 Limits:12 事件log-agent Requests:0.5 Limits:3 Requests:1.5 Limits:2.5 表4 云原生服务中心计算节点资源规格 类型 数量 CPU (Cores) Mem (GiB) Disk (G)-系统盘 Disk (G)-高性能盘 Disk (G)-数据盘 operator-chef 1 Requests:0.5 Limits:2 Requests:0.5 Limits:2 不涉及 不涉及 10(日志) helm-operator 1 Requests:0.3 Limits:1.5 Requests:0.3 Limits:1.5 不涉及 不涉及 10(日志) ops-operator 1 Requests:0.3 Limits:1.5 Requests:0.3 Limits:1.5 不涉及 不涉及 10(日志)
  • 防火墙规划 防火墙的规划需符合表1中要求。 表1 防火墙规划 源设备 源IP 源端口 目的设备 目的IP 目的端口(侦听) 协议 端口说明 侦听端口是否可更改 认证方式 加密方式 ucsctl执行机 源设备所在节点IP ALL 所有节点 目的设备所在节点IP 22 TCP SSH 否 证书/用户名密码 TLS v1.2 所有节点 源设备所在节点IP ALL NTP server 目的设备所在节点IP 123 UDP ntp 否 无 无 所有节点 源设备所在节点IP ALL DNS server 目的设备所在节点IP 53 UDP dns 否 无 无 所有节点 源设备所在节点IP ALL 自建APT源 目的设备所在节点IP 80/443 TCP http 否 无 无 所有节点 源设备所在节点IP ALL 集群负载均衡/VIP 目的设备所在节点IP 5443 TCP kube-apiserver 否 https+证书 TLS v1.2 所有节点 源设备所在节点IP 1024-65535 所有节点 目的设备所在节点IP 1024-65535 ALL 无 否 无 无 所有节点 源设备所在节点IP ALL 所有节点 目的设备所在节点IP 8472 UDP vxlan端口 否 无 无 需要访问ingress的节点 源设备所在节点IP ALL 网络节点 目的设备所在节点IP 80/443/按需指定端口 TCP http 否 https+证书 TLS v1.2 所有节点 源设备所在节点IP ALL 3台master节点 目的设备所在节点IP 5444 TCP kube-apiserver 否 https+证书 TLS v1.2 ucsctl执行机 源设备所在节点IP ALL 华为云OBS服务 obs.cn-north-4.myhuaweicloud.com 443 TCP http 否 https+证书 TLS v1.2 3台master节点 源设备所在节点IP ALL 华为云UCS服务 124.70.21.61 proxyurl.ucs.myhuaweicloud.com 30123 TCP grpc 否 https+证书 TLS v1.2 3台master节点 源设备所在节点IP ALL 华为云IAM服务 iam.cn-north-4.myhuaweicloud.com 443 TCP http 否 https+证书 TLS v1.2 所有节点 源设备所在节点IP All 华为云SWR服务 swr.cn-north-4.myhuaweicloud.com 443 TCP http 否 https+证书 TLS v1.2 所有节点 源设备所在节点IP ALL Ubuntu官方源/国内代理源 按需配置 80/443 TCP http 否 无 无 监控节点 源设备所在节点IP ALL 华为云 AOM 域名对应IP地址 443 TCP http 否 https+证书 TLS v1.2 监控节点 源设备所在节点IP ALL 华为云LTS 域名对应IP地址 443 TCP http 否 https+证书 TLS v1.2
  • 查看集群内工作负载列表 工作负载列表中包含工作负载名称、状态、实例个数(正常/全部)、命名空间、镜像名称、CPU使用率,以及内存使用率等信息。 图1 工作负载列表页面 您可以利用页面右上角的命名空间和工作负载类型,以及列表上方的工作负载名称、状态和命名空间进行筛选,快速定位所需的工作负载。 在列表的右上角,您可以单击按钮来导出全部工作负载数据,或者选择部分工作负载进行导出,此时仅导出所选中的数据。导出的文件为“.xlsx”格式,文件命名中包含时间戳。
  • 查看集群内工作负载详情 在工作负载列表中,单击需要查看详情的工作负载名称,进入该工作负载的详情页面,通过切换“概览”、“Pod列表”和“监控”页签查看相应内容。 表1 工作负载详情页面 词条 词条描述 概览 单击工作负载名称,进入工作负载的“概览”页面。 资源概况:包括负载状态、Pod数量(异常/总数)以及异常事件。 监控概览:包括CPU使用率、内存使用率和网络流入/流出速率这些常见的监控指标。 图2 资源概况和监控概览 Pod使用趋势:包括工作负载中各Pod的CPU使用率、CPU使用量、内存使用率和内存使用量(在图表左上角切换对应指标),并且支持查看降序Top5和升序Top5数据(在图表右上角进行切换)。 图3 Pod使用趋势 Pod列表 Pod列表中包含了实例名称、状态、命名空间、实例IP、所在节点、重启次数、CPU申请/限制、内存申请/限制,以及CPU和内存使用率等详细信息。 您可以通过在列表上方按照实例名称、状态、命名空间、实例IP和所在节点进行筛选,快速找到需要的实例。 在列表的右上角,您可以单击按钮来导出全部实例数据,或者选择部分实例进行导出,此时仅导出所选中的数据。导出的文件为“.xlsx”格式,文件命名中包含时间戳。 单击实例名称可以查看实例的详细监控数据。更多相关内容,请参见查看集群内Pod情况。 监控 在此处,您可以方便地查看工作负载在近1小时、近8小时、近24小时以及自定义时间段内各维度资源的使用情况。 如需查看更多监控信息,请单击“查看全部仪表盘”,跳转至“仪表盘”页面,相应指导请参见仪表盘。
  • 背景 Podinfo是一个微模型的Web应用程序,它展示了在Kubernetes中运行微服务的最佳实践,其主要用作于测试和研讨。本章将用podinfo源代码来做创建配置集合的示例。 为了可以更快的、更稳定的持续地交付软件、减少后续维护工作,所以将podinfo的源代码放入GitHub仓库,并通过创建配置集合的方式部署到集群中,通过GitOps能力实现软件自动化部署,具体请参考操作步骤。 创建podinfo源代码仓时,请先注册一个属于自己的GitHub账号,然后将podinfo所有代码fork到自己的GitHub仓库中。 在git仓库中定义交付资源清单文件时,不应包含敏感信息(如数据库连接密钥等)。相关敏感信息应以环境变量、加密存储的Secret等方式进行存储。 图1 Podinfo界面
  • 操作步骤 登录华为云控制台。 在左侧导航栏中选择“分布式云原生”,选择“配置管理”。 在右上角“添加集群”,选择需要启用配置管理功能的目标集群,单击确定。 在集群概览页,选择目标集群,单击“Gitops能力”,查看Gitops插件(名称:集群名称-FluxPlugin)是否安装成功。当插件部署状态显示运行中,表示插件已部署成功。 图2 集群概览页 选择“配置集合”页签,单击创建配置集合。 选择仓库源,如果已有仓库源请参考使用已有仓库源配置,如果需要创建新仓库源,请参考创建新仓库源。
  • 创建新仓库源 单击“创建新仓库源”输入仓库源名称、仓库源URL地址。 输入需要与其同步的代码库分支。 选择数据源验证,以及输入密钥。 选择公有类型的仓库无需进行身份验证,即可提供只读权限。 选择私有类型的仓库,则数据源验证可选择“选择集群secret”和“提供认证信息(SSH)”,两种方式都需要配置的密钥进行身份验证。 仓库密钥创建请参考密钥。 如果离散集群开通配置管理后,在创建仓库源时报404错误,网络波动重试即可。 仓库源创建完成后,在“自动同步策略”内输入“配置集合路径”,单击“下一步:信息确认”。 确认配置信息无误后,单击“创建配置集合”;如有问题,单击上一步进行修改。
  • YAML示例 apiVersion: v1kind: Podmetadata: labels: test: liveness name: liveness-httpspec: containers: - name: liveness image: nginx:alpine args: - /server livenessProbe: httpGet: path: /healthz port: 80 httpHeaders: - name: Custom-Header value: Awesome initialDelaySeconds: 3 periodSeconds: 3 readinessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5 startupProbe: httpGet: path: /healthz port: 80 failureThreshold: 30 periodSeconds: 10
  • 通过控制台配置调度策略 在创建工作负载时,在“高级设置”中找到“调度策略”。 表1 节点亲和性设置 参数名 参数描述 必须满足 即硬约束,设置必须要满足的条件,对应于requiredDuringSchedulingIgnoredDuringExecution,多条规则间是一种“或”的关系,即只需要满足一条规则即会进行调度。 尽量满足 即软约束,设置尽量满足的条件,对应于preferredDuringSchedulingIgnoredDuringExecution,无论是满足其中一条或者是都不满足都会进行调度。 在“节点亲和性”、“工作负载亲和性”、“工作负载反亲和性”下单击添加调度策略。在弹出的窗口中可以直接添加策略、指定节点或指定可用区。 指定节点和指定可用区本质也是通过标签实现,只是通过控制台提供了更为便捷的操作。指定节点使用的是 kubernetes.io/hostname 标签,可用区使用的是 failure-domain.beta.kubernetes.io/zone 标签。 表2 调度策略设置 参数名 参数描述 标签名 对应节点的标签,可以使用默认的标签也可以用户自定义标签。 操作符 可以设置六种匹配关系(In, NotIn, Exists, DoesNotExist. Gt, and Lt)。 In:是否在标签值的列表中 NotIn:是否不在标签值的列表中 Exists:某个标签存在 DoesNotExist:某个标签不存在 Gt:标签的值大于某个值(字符串比较) Lt:标签的值小于某个值(字符串比较) 标签值 请填写标签值。 命名空间 仅支持在工作负载亲和/工作负载反亲和调度策略中使用。 指定调度策略生效的命名空间。 拓扑域 仅支持在工作负载亲和/工作负载反亲和调度策略中使用。 先圈定拓扑域(topologyKey)指定的范围,然后再选择策略定义的内容。 权重 仅支持在“尽量满足”策略中添加。
  • 操作场景 健康检查是指容器运行过程中,根据用户需要,定时检查容器健康状况。若不配置健康检查,如果容器内应用程序异常,Pod将无法感知,也不会自动重启去恢复。最终导致虽然Pod状态显示正常,但Pod中的应用程序异常的情况。 Kubernetes提供了三种健康检查的探针: 存活探针:livenessProbe,用于检测容器是否正常,类似于执行ps命令检查进程是否存在。如果容器的存活检查失败,集群会对该容器执行重启操作;若容器的存活检查成功则不执行任何操作。 就绪探针:readinessProbe,用于检查用户业务是否就绪,如果未就绪,则不转发流量到当前实例。一些程序的启动时间可能很长,比如要加载磁盘数据或者要依赖外部的某个模块启动完成才能提供服务。这时候程序进程在,但是并不能对外提供服务。这种场景下该检查方式就非常有用。如果容器的就绪检查失败,集群会屏蔽请求访问该容器;若检查成功,则会开放对该容器的访问。 启动探针:startupProbe,用于探测应用程序容器什么时候启动了。 如果配置了这类探测器,就可以控制容器在启动成功后再进行存活性和就绪检查, 确保这些存活、就绪探针不会影响应用程序的启动。 这可以用于对启动慢的容器进行存活性检测,避免它们在启动运行之前就被终止。
  • 公共参数说明 表1 公共参数说明 参数 参数说明 检测周期(periodSeconds) 探针检测周期,单位为秒。 例如,设置为30,表示每30秒检测一次。 延迟时间(initialDelaySeconds) 延迟检查时间,单位为秒,此设置与业务程序正常启动时间相关。 例如,设置为30,表明容器启动后30秒才开始健康检查,该时间是预留给业务程序启动的时间。 超时时间(timeoutSeconds) 超时时间,单位为秒。 例如,设置为10,表明执行健康检查的超时等待时间为10秒,如果超过这个时间,本次健康检查就被视为失败。若设置为0或不设置,默认超时等待时间为1秒。 成功阈值(successThreshold) 探测失败后,被视为成功的最小连续成功数。 默认值是 1,最小值是 1。 存活和启动探测的这个值必须是 1。 最大失败次数(failureThreshold) 当探测失败时重试的次数。 存活探测情况下的放弃就意味着重新启动容器。就绪探测情况下的放弃 Pod 会被打上未就绪的标签。 默认值是 3。最小值是 1。
  • 检查方式 HTTP 请求检查 HTTP 请求方式针对的是提供HTTP/HTTPS服务的容器,集群周期性地对该容器发起HTTP/HTTPS GET请求,如果HTTP/HTTPS response返回码属于200~399范围,则证明探测成功,否则探测失败。使用HTTP请求探测必须指定容器监听的端口和HTTP/HTTPS的请求路径。 例如:提供HTTP服务的容器,HTTP检查路径为:/health-check;端口为:80;主机地址可不填,默认为容器实例IP,此处以172.16.0.186为例。那么集群会周期性地对容器发起如下请求:GET http://172.16.0.186:80/health-check。 图1 HTTP请求检查 TCP 端口检查 对于提供TCP通信服务的容器,集群周期性地对该容器建立TCP连接,如果连接成功,则证明探测成功,否则探测失败。选择TCP端口探测方式,必须指定容器监听的端口。 例如:有一个nginx容器,它的服务端口是80,对该容器配置了TCP端口探测,指定探测端口为80,那么集群会周期性地对该容器的80端口发起TCP连接,如果连接成功则证明检查成功,否则检查失败。 图2 TCP端口检查 执行命令检查 命令检查是一种强大的检查方式,该方式要求用户指定一个容器内的可执行命令,集群会周期性地在容器内执行该命令,如果命令的返回结果是0则检查成功,否则检查失败。 对于上面提到的TCP端口检查和HTTP请求检查,都可以通过执行命令检查的方式来替代: 对于TCP端口探测,可以使用程序对容器的端口尝试connect,如果connect成功,脚本返回0,否则返回-1。 对于HTTP请求探测,可以使用脚本来对容器进行wget。 wget http://127.0.0.1:80/health-check 并检查response的返回码,如果返回码在200~399 的范围,脚本返回0,否则返回-1。如下图: 图3 执行命令检查 必须把要执行的程序放在容器的镜像里面,否则会因找不到程序而执行失败。 如果执行的命令是一个shell脚本,由于集群在执行容器里的程序时,不在终端环境下,因此不能直接指定脚本为执行命令,需要加上脚本解析器。比如脚本是/data/scripts/health_check.sh,那么使用执行命令检查时,指定的程序应该是: sh /data/scripts/health_check.sh
  • 版本记录 建议升级到跟集群配套的最新volcano版本。 表4 集群版本配套关系 集群版本 支持的插件版本 v1.25 1.7.1、1.7.2 v1.23 1.7.1、1.7.2 v1.21 1.7.1、1.7.2 v1.19.16 1.3.7、1.3.10、1.4.5、1.7.1、1.7.2 v1.19 1.3.7、1.3.10、1.4.5 v1.17(停止维护) 1.3.7、1.3.10、1.4.5 v1.15(停止维护) 1.3.7、1.3.10、1.4.5 表5 CCE插件版本记录 插件版本 支持的集群版本 更新特性 1.9.1 /v1.19.16.*|v1.21.*|v1.23.*|v1.25.*/ 修复networkresource插件计数pipeline pod占用subeni问题 修复binpack插件对资源不足节点打分问题 修复对结束状态未知的pod的资源的处理 优化事件输出 默认高可用部署 1.7.2 /v1.19.16.*|v1.21.*|v1.23.*|v1.25.*/ Volcano 支持 Kubernetes 1.25版本 提升Volcano调度性能。 1.7.1 /v1.19.16.*|v1.21.*|v1.23.*|v1.25.*/ Volcano 支持 Kubernetes 1.25版本 1.6.5 /v1.19.*|v1.21.*|v1.23.*/ 支持作为CCE的默认调度器 支持混部场景下统一调度 1.4.5 /v1.17.*|v1.19.*|v1.21.*/ volcano-scheduler的部署方式由statefulset调整为deployment,修复节点异常时Pod无法自动迁移的问题 1.4.2 /v1.15.*|v1.17.*|v1.19.*|v1.21.*/ 修复跨GPU分配失败问题 适配更新后的EAS API 1.3.3 /v1.15.*|v1.17.*|v1.19.*|v1.21.*/ 修复GPU异常导致的调度器崩溃问题;修复特权Init容器准入失败问题 1.3.1 /v1.15.*|v1.17.*|v1.19.*/ 升级Volcano框架到最新版本 支持Kubernetes 1.19版本 添加numa-aware插件 修复多队列场景下Deployment扩缩容的问题 调整默认开启的算法插件 1.2.5 /v1.15.*|v1.17.*|v1.19.*/ 修复某些场景下OutOfcpu的问题 修复queue设置部分capability情况下Pod无法调度问题 支持volcano组件日志时间与系统时间保持一致 修复队列间多抢占问题 修复ioaware插件在某些极端场景下结果不符合预期的问题 支持混合集群 1.2.3 /v1.15.*|v1.17.*|v1.19.*/ 修复因为精度不够引发的训练任务OOM的问题 修复CCE1.15以上版本GPU调度的问题,暂不支持任务分发时的CCE版本滚动升级 修复特定场景下队列状态不明的问题 修复特定场景下作业挂载PVC panic的问题 修复GPU作业无法配置小数的问题 添加ioaware插件 添加ring controller
  • 在控制台中修改volcano-scheduler配置 Volcano允许用户在安装,升级,编辑时,编写Volcano调度器配置信息,并将配置内容同步到volcano-scheduler-configmap里。 当前小节介绍如何使用自定义配置,以便用户让volcano-scheduler能更适合自己的场景。 仅Volcano 1.7.1及以上版本支持该功能。在新版插件界面上合并了原plugins.eas_service和resource_exporter_enable等选项,以新选项default_scheduler_conf代替。 您可登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件管理”,在右侧找到Volcano,单击“安装”或“升级”,并在“参数配置”中设置Volcano调度器配置参数。 使用resource_exporter配置,示例如下: { "ca_cert": "", "default_scheduler_conf": { "actions": "allocate, backfill", "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": "numa-aware" # add this also enable resource_exporter } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "server_cert": "", "server_key": ""} 开启后可以同时使用volcano-scheduler的numa-aware插件功能和resource_exporter功能。 使用eas_service配置,示例如下: { "ca_cert": "", "default_scheduler_conf": { "actions": "allocate, backfill", "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": "eas", "custom": { "availability_zone_id": "", "driver_id": "", "endpoint": "", "flavor_id": "", "network_type": "", "network_virtual_subnet_id": "", "pool_id": "", "project_id": "", "secret_name": "eas-service-secret" } } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "server_cert": "", "server_key": ""} 使用ief配置,示例如下: { "ca_cert": "", "default_scheduler_conf": { "actions": "allocate, backfill", "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": "ief", "enableBestNode": true } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "server_cert": "", "server_key": ""}
  • Prometheus指标采集 volcano-scheduler通过端口8080暴露Prometheus metrics指标。您可以自建Prometheus采集器识别并通过http://{{volcano-schedulerPodIP}}:{{volcano-schedulerPodPort}}/metrics路径获取volcano-scheduler调度相关指标。 Prometheus指标暴露仅支持volcano插件1.8.5及以上版本。 表3 关键指标说明 指标名称 指标类型 描述 Labels e2e_scheduling_latency_milliseconds Histogram 端到端调度时延毫秒(调度算法+绑定) - e2e_job_scheduling_latency_milliseconds Histogram 端到端作业调度时延(毫秒) - e2e_job_scheduling_duration Gauge 端到端作业调度时长 labels=["job_name", "queue", "job_namespace"] plugin_scheduling_latency_microseconds Histogram 插件调度延迟(微秒) labels=["plugin", "OnSession"] action_scheduling_latency_microseconds Histogram 动作调度时延(微秒) labels=["action"] task_scheduling_latency_milliseconds Histogram 任务调度时延(毫秒) - schedule_attempts_total Counter 尝试调度Pod的次数。“unschedulable”表示无法调度Pod,而“error”表示内部调度器问题 labels=["result"] pod_preemption_victims Gauge 选定的抢占受害者数量 - total_preemption_attempts Counter 集群中的抢占尝试总数 - unschedule_task_count Gauge 无法调度的任务数 labels=["job_id"] unschedule_job_count Gauge 无法调度的作业数 - job_retry_counts Counter 作业的重试次数 labels=["job_id"]
  • Volcano 1.0.0版本升级说明 Volcano 1.0.0版本与后续版本不兼容,不支持在控制台升级。如想使用新版本Volcano插件,需要先卸载1.0.0版本,然后再在控制台安装新版本。 执行如下命令可以卸载Volcano。 kubectl delete crd jobs.batch.volcano.sh kubectl delete crd commands.bus.volcano.sh
  • 保留原volcano-scheduler-configmap配置 假如在某场景下希望插件升级后时沿用原配置,可参考以下步骤: 查看原volcano-scheduler-configmap配置,并备份。 示例如下: # kubectl edit cm volcano-scheduler-configmap -n kube-systemapiVersion: v1data: default-scheduler.conf: |- actions: "enqueue, allocate, backfill" tiers: - plugins: - name: priority - name: gang - name: conformance - plugins: - name: drf - name: predicates - name: nodeorder - name: binpack arguments: binpack.cpu: 100 binpack.weight: 10 binpack.resources: nvidia.com/gpu binpack.resources.nvidia.com/gpu: 10000 - plugins: - name: cce-gpu-topology-predicate - name: cce-gpu-topology-priority - name: cce-gpu - plugins: - name: nodelocalvolume - name: nodeemptydirvolume - name: nodeCSIscheduling - name: networkresource 在控制台“参数配置”中填写自定义修改的内容: { "ca_cert": "", "default_scheduler_conf": { "actions": "enqueue, allocate, backfill", "tiers": [ { "plugins": [ { "name": "priority" }, { "name": "gang" }, { "name": "conformance" } ] }, { "plugins": [ { "name": "drf" }, { "name": "predicates" }, { "name": "nodeorder" }, { "name": "binpack", "arguments": { "binpack.cpu": 100, "binpack.weight": 10, "binpack.resources": "nvidia.com/gpu", "binpack.resources.nvidia.com/gpu": 10000 } } ] }, { "plugins": [ { "name": "cce-gpu-topology-predicate" }, { "name": "cce-gpu-topology-priority" }, { "name": "cce-gpu" } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "server_cert": "", "server_key": ""} 使用该功能时会覆盖原volcano-scheduler-configmap中内容,所以升级时务必检查是否在volcano-scheduler-configmap做过修改。如果是,需要把修改内容同步到升级界面里。
  • 安装插件 安装Volcano插件,本地集群暂不支持多可用区部署和配置插件实例节点亲和策略。 本地集群安装Volcano插件后,创建负载只能通过yaml设置为volcano调度。 登录UCS控制台,单击集群名称进入集群,单击左侧导航栏的“插件管理”,找到Volcano,单击“安装”。 该插件可配置“单实例”、“高可用”或自定义规格。 选择自定义时,volcano-controller和volcano-scheduler的建议值如下: 小于100个节点,可使用默认配置,即CPU的申请值为500m,限制值为2000m;内存的申请值为500Mi,限制值为2000Mi。 高于100个节点,每增加100个节点(10000个Pod),建议CPU的申请值增加500m,内存的申请值增加1000Mi;CPU的限制值建议比申请值多1500m,内存的限制值建议比申请值多1000Mi。 申请值推荐计算公式: CPU申请值:计算“目标节点数 * 目标Pod规模”的值,并在表1中根据“集群节点数 * Pod规模”的计算值进行插值查找,向上取最接近规格的申请值及限制值。 例如2000节点和2w个Pod的场景下,“目标节点数 * 目标Pod规模”等于4000w,向上取最接近的规格为700/7w(“集群节点数 * Pod规模”等于4900w),因此建议CPU申请值为4000m,限制值为5500m。 内存申请值:建议每1000个节点分配2.4G内存,每1w个Pod分配1G内存,二者叠加进行计算。(该计算方法相比表1中的建议值会存在一定的误差,通过查表或计算均可) 即:内存申请值 = 目标节点数/1000 * 2.4G + 目标Pod规模/1w * 1G。 例如2000节点和2w个Pod的场景下,内存申请值 = 2 * 2.4G + 2 * 1G = 6.8G 表1 volcano-controller和volcano-scheduler的建议值 集群节点数/Pod规模 CPU Request(m) CPU Limit(m) Memory Request(Mi) Memory Limit(Mi) 50/5k 500 2000 500 2000 100/1w 1000 2500 1500 2500 200/2w 1500 3000 2500 3500 300/3w 2000 3500 3500 4500 400/4w 2500 4000 4500 5500 500/5w 3000 4500 5500 6500 600/6w 3500 5000 6500 7500 700/7w 4000 5500 7500 8500 选择插件实例是否多可用区部署。 优先模式:优先将插件的Deployment实例调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将调度到单可用区。 强制模式:插件Deployment实例强制调度到不同可用区的节点上,如集群下节点不满足多可用区,插件实例将无法全部运行。 配置插件实例节点亲和策略。 指定节点调度:指定插件实例部署的节点 ,若不指定,将根据集群默认调度策略进行随机调度。 自定义亲和策略:填写期望插件部署的节点标签实现更灵活的调度策略,若不填写将根据集群默认调度策略进行随机调度。自定义亲和策略详情请参见调度策略(亲和与反亲和) 配置volcano默认调度器配置参数,详情请参见表2。 colocation_enable: ''default_scheduler_conf: actions: 'allocate, backfill' tiers: - plugins: - name: 'priority' - name: 'gang' - name: 'conformance' - name: 'lifecycle' arguments: lifecycle.MaxGrade: 10 lifecycle.MaxScore: 200.0 lifecycle.SaturatedTresh: 1.0 lifecycle.WindowSize: 10 - plugins: - 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' 表2 Volcano插件配置参数说明 插件 功能 参数说明 用法演示 resource_exporter_enable 收集节点numa拓扑信息 参数值: true:表示可以查看当前节点的numa拓扑信息。 false:表示关闭当前节点的numa拓扑信息。 - colocation_enable 是否开启混部能力。 参数值: true:表示开启混部。 false:表示不开启混部。 - binpack 将Pod调度到资源使用较高的节点以减少资源碎片 binpack.weight:binpack插件本身在所有插件打分中的权重 binpack.cpu:CPU资源在资源比重的比例,默认是1 binpack.memory:memory资源在所有资源中的比例,默认是1 binpack.resources:资源类型。 - plugins: - name: binpack arguments: binpack.weight: 10 binpack.cpu: 1 binpack.memory: 1 binpack.resources: nvidia.com/gpu, example.com/foo binpack.resources.nvidia.com/gpu: 2 binpack.resources.example.com/foo: 3 conformance 跳过关键Pod,比如在kube-system命名空间的Pod,防止这些Pod被驱逐 - - lifecycle 通过统计业务伸缩的规律,将有相近生命周期的Pod优先调度到同一节点,配合autoscaler的水平扩缩容能力,快速缩容释放资源,节约成本并提高资源利用率。 1. 统计业务负载中Pod的生命周期,将有相近生命周期的Pod调度到同一节点 2. 对配置了自动扩缩容策略的集群,通过调整节点的缩容注解,优先缩容使用率低的节点 arguments参数: lifecycle.WindowSize:为int型整数,不小于1,默认为10。 记录副本数变更的次数,负载变化规律、周期性明显时可适当调低;变化不规律,副本数频繁变化需要调大。若过大会导致学习周期变长,记录事件过多。 lifecycle.MaxGrade:为int型整数,不小于3,默认为3。 副本分档数,如设为3,代表分为高中低档。负载变化规律、周期性明显时可适当调低;变化不规律,需要调大。若过小会导致预测的生命周期不够准确。 lifecycle.MaxScore:为float64浮点数,不小于50.0,默认为200.0。 lifecycle插件的最大得分,等效于插件权重。 lifecycle.SaturatedTresh:为float64浮点数,小于0.5时取值为0.5;大于1时取值为1,默认为0.8。 用于判断节点利用率是否过高的阈值,当超过该阈值,调度器会优先调度作业至其他节点。 - plugins: - name: priority - name: gang enablePreemptable: false - name: conformance - name: lifecycle arguments: lifecycle.MaxGrade: 10 lifecycle.MaxScore: 200.0 lifecycle.SaturatedTresh: 1.0 lifecycle.WindowSize: 10 说明: 对不希望被缩容的节点,需要手动标记长周期节点,为节点添加volcano.sh/long-lifecycle-node: true的annotation。对未标记节点,lifecycle插件将根据节点上负载的生命周期自动标记。 MaxScore默认值200.0相当于其他插件权重的两倍,当lifecycle插件效果不明显或与其他插件冲突时,需要关闭其他插件,或将MaxScore调大。 调度器重启后,lifecycle插件需要重新记录负载的变化状况,需要统计数个周期后才能达到最优调度效果。 gang 将一组Pod看做一个整体去分配资源 - - priority 使用用户自定义负载的优先级进行调度 - - overcommit 将集群的资源放到一定倍数后调度,提高负载入队效率。负载都是deployment的时候,建议去掉此插件或者设置扩大因子为2.0。 overcommit-factor: 扩大因子,默认是1.2 - plugins: - name: overcommit arguments: overcommit-factor: 2.0 drf 根据作业使用的主导资源份额进行调度,用的越少的优先 - - predicates 预选节点的常用算法,包括节点亲和,Pod亲和,污点容忍,node ports重复,volume limits,volume zone匹配等一系列基础算法 - - nodeorder 优选节点的常用算法 nodeaffinity.weight:节点亲和性优先调度,默认值是1 podaffinity.weight:Pod亲和性优先调度,默认值是1 leastrequested.weight:资源分配最少的的节点优先,默认值是1 balancedresource.weight:node上面的不同资源分配平衡的优先,默认值是1 mostrequested.weight:资源分配最多的的节点优先,默认值是0 tainttoleration.weight:污点容忍高的优先调度,默认值是1 imagelocality.weight:node上面有Pod需要镜像的优先调度,默认值是1 selectorspread.weight: 把Pod均匀调度到不同的节点上,默认值是0 volumebinding.weight: local pv延迟绑定调度,默认值是1 podtopologyspread.weight: Pod拓扑调度,默认值是2 - plugins: - name: nodeorder arguments: leastrequested.weight: 1 mostrequested.weight: 0 nodeaffinity.weight: 1 podaffinity.weight: 1 balancedresource.weight: 1 tainttoleration.weight: 1 imagelocality.weight: 1 volumebinding.weight: 1 podtopologyspread.weight: 2 cce-gpu-topology-predicate GPU拓扑调度预选算法 - - cce-gpu-topology-priority GPU拓扑调度优选算法 - - cce-gpu 结合UCS的GPU插件支持GPU资源分配,支持小数GPU配置 说明: 小数GPU配置的前提条件为UCS集群GPU节点为共享模式,检查集群是否关闭GPU共享,请参见集群配置管理中的enable-gpu-share参数。 - - numaaware numa拓扑调度 weight: 插件的权重 - networkresource 支持预选过滤ENI需求节点,参数由CCE传递,不需要手动配置 NetworkType: 网络类型(eni或者vpc-router类型) - nodelocalvolume 支持预选过滤不符合local volume需求节点 - - nodeemptydirvolume 支持预选过滤不符合emptydir需求节点 - - nodeCSIscheduling 支持预选过滤everest组件异常节点 - - 单击“安装”。
  • 插件简介 Volcano是一个基于Kubernetes的批处理平台,提供了机器学习、深度学习、生物信息学、基因组学及其他大数据应用所需要而Kubernetes当前缺失的一系列特性。 Volcano提供了高性能任务调度引擎、高性能异构芯片管理、高性能任务运行管理等通用计算能力,通过接入AI、大数据、基因、渲染等诸多行业计算框架服务终端用户。(目前Volcano项目已经在Github开源) Volcano针对计算型应用提供了作业调度、作业管理、队列管理等多项功能,主要特性包括: 丰富的计算框架支持:通过CRD提供了批量计算任务的通用API,通过提供丰富的插件及作业生命周期高级管理,支持TensorFlow,MPI,Spark等计算框架容器化运行在Kubernetes上。 高级调度:面向批量计算、高性能计算场景提供丰富的高级调度能力,包括成组调度,优先级抢占、装箱、资源预留、任务拓扑关系等。 队列管理:支持分队列调度,提供队列优先级、多级队列等复杂任务调度能力。 项目开源地址:https://github.com/volcano-sh/volcano
  • YAML更新流量策略 以检查4分钟内forecast服务实例的访问异常情况为例,连续出现5次访问异常的实例将被隔离10分钟,被隔离的实例不超过30%,在第1次隔离期满后,异常实例将重新接收流量,如果仍然不能正常工作,则会被重新隔离,第2次将被隔离20分钟,以此类推。用户可根据实际需求对参数进行更新。 登录UCS控制台,在左侧导航栏中单击“服务网格”。 单击服务网格名称,进入详情页。 在左侧导航栏,单击“流量治理”下的“流量策略”,进入流量策略列表。 选择想要更新的流量策略,单击右侧操作列下的“编辑YAML”,进入“更新流量策略”页面。 YAML设置如下(根据实际需求调整配置参数): apiVersion: networking.istio.io/v1beta1kind: DestinationRulemetadata: name: forecast namespace: weatherspec: host: forecast trafficPolicy: connectionPool: tcp: maxConnections: 80 connectTimeout: 25ms http: http2MaxRequests: 800 maxRequestsPerConnection: 10 outlierDetection: consecutive5xxErrors: 5 interval: 4m baseEjectionTime: 10m maxEjectionPercent: 30
共100000条