华为云用户手册

  • 操作步骤 登录CCE控制台,单击集群名称进入集群。 查看集群概览页,在右边“连接信息”下证书认证一栏,单击“下载”。 图1 获取证书 在弹出的“证书获取”窗口中,根据系统提示选择证书的过期时间并下载集群X509证书。 下载的证书包含client.key、client.crt、ca.crt三个文件,请妥善保管您的证书,不要泄露。 集群中容器之间互访不需要证书。 使用集群证书调用Kubernetes原生API。 例如使用curl命令调用接口查看Pod信息,如下所示,其中192.168.0.18:5443为集群API Server地址。 curl --cacert ./ca.crt --cert ./client.crt --key ./client.key https://192.168.0.18:5443/api/v1/namespaces/default/pods/ 更多集群接口请参见Kubernetes API。
  • 概览 单击工作负载名称,您可以方便地查看资源概况,包括负载状态、Pod数量(异常/总数)以及异常事件。此外,还可以浏览近一小时的监控概览,其中包括CPU使用率、内存使用率和网络流入/流出速率这些常见的监控指标。 图2 资源概况和监控概览 同时,概览页面还提供了Pod使用趋势功能,您可以从中了解工作负载中各Pod的CPU使用率、CPU使用量、内存使用率和内存使用量(在图表右上角切换对应指标),并且支持查看降序Top5和升序Top5数据(在图表左上角进行切换)。 图3 Pod使用趋势 如需了解更多指标,请前往监控页面查看。
  • 工作负载列表 工作负载列表中包含工作负载名称、状态、Pod个数(正常/全部)、命名空间、镜像名称、CPU使用率,以及内存使用率等信息。 图1 工作负载列表 您可以利用页面右上角的工作负载类型,以及列表上方的工作负载名称、状态和命名空间进行筛选,快速定位所需的工作负载。 您也可以单击“导出”按钮来导出全部工作负载数据,或者选择部分工作负载进行导出,此时仅导出所选中的数据。导出的文件为“.xlsx”格式,文件命名中包含时间戳。
  • Pod列表 Pod列表中包含了Pod名称、状态、命名空间、Pod IP、所在节点、重启次数、CPU申请/限制、内存申请/限制,以及CPU和内存使用率等详细信息。 图4 Pod列表 您可以通过在列表上方按照Pod名称、状态、命名空间、Pod IP和所在节点进行筛选,快速找到需要的Pod。您也可以单击“导出”按钮来导出全部Pod数据,或者选择部分Pod进行导出,此时仅导出所选中的数据。导出的文件为“.xlsx”格式,文件命名中包含时间戳。 单击Pod名称可以查看Pod的详细监控数据。更多相关内容,请参见Pod监控。
  • 监控 在此处,您可以方便地查看工作负载在近1小时、近8小时、近24小时以及自定义时间段内各维度资源的使用情况。如需查看更多监控信息,请单击“查看全部仪表盘”,跳转至“仪表盘”页面,相应指导请参见使用仪表盘。 图5 工作负载监控 CPU相关指标 CPU:负载的所有 Pod 的容器在不同的时间段使用的 CPU 总量占负载的所有 Pod 的容器的 CPU Limit 总量的比例。 CPU 受限(CPU Throttled):负载的所有 Pod 的容器在不同的时间段的 CPU 受限时间所占的平均比例。 内存相关指标 内存使用率:负载的所有 Pod 的容器在不同的时间段使用的内存总量占负载的所有 Pod 的容器的内存 Limit 总量比例。 网络相关指标 网络总流出速率:负载的所有 Pod 的容器在不同的时间段的每秒钟发送的总字节数。 网络总流入速率:负载的所有 Pod 的容器在不同的时间段的每秒钟接收的总字节数。 网络发送丢包率:负载的所有 Pod 的容器在不同的时间段的发送丢失的数据包总量占发送的数据包总量的比例。 网络接收丢包率:负载的所有 Pod 的容器在不同的时间段的接收丢失的数据包总量占接收的数据包总量的比例。 Pod相关指标 Pod CPU使用率:负载的每个 Pod 在不同的时间段的CPU使用量除以它们的 CPU Limit 量。 Pod内存使用率:负载的每个 Pod 在不同的时间段的内存使用量除以它们的内存 Limit 量。 Pod状态数量趋势:负载在不同的时间段分别处于不可用、未就绪、运行中、已完成或其他的状态 Pod 数量之和。 Pod数量变化趋势:负载的 Pod(副本)在不同的时间段的数量。
  • 指标清单 GPU视图使用的指标清单如下: 表2 GPU指标说明 指标名称 类型 说明 cce_gpu_gpu_utilization Gauge GPU卡算力使用率 cce_gpu_memory_utilization Gauge GPU卡显存使用率 cce_gpu_memory_used Gauge GPU显存使用量 cce_gpu_memory_total Gauge GPU显存总量 cce_gpu_memory_free Gauge GPU显存空闲量 cce_gpu_memory_clock Gauge GPU显存频率 cce_gpu_gpu_temperature Gauge GPU温度 cce_gpu_pcie_link_bandwidth Gauge GPU pcie带宽 cce_gpu_pcie_throughput_rx Gauge GPU pcie接收带宽
  • 指标说明 图1 GPU资源指标 表1 GPU图表说明 图表名称 单位 说明 集群-显存使用率 百分比 集群的显存使用率 计算公式:集群内容器显存使用总量/集群内显存总量 集群-算力使用率 百分比 集群的算力使用率 计算公式:集群内容器算力使用总量/集群内算力总量 节点-显存使用量 字节 每个节点的显存使用量 节点-算力使用率 百分比 每个节点的算力使用率 计算公式:节点上容器算力使用总量/节点上算力总量 节点-显存使用率 百分比 每个节点的显存使用率 计算公式:节点上容器显存使用总量/节点上显存总量 GPU卡-显存使用量 字节 每张GPU的显存使用量 计算公式:显卡上容器显存使用总量/显卡的显存总量 GPU卡-算力使用率 百分比 每张GPU卡的算力使用率 计算公式:显卡上容器算力使用总量/显卡的算力总量 GPU卡-温度 摄氏度 每张GPU卡的温度 GPU-显存频率 赫兹 每张GPU卡的显存频率 GPU卡-PCle带宽 字节/秒 每张GPU卡的PCle带宽
  • 版本记录 表2 云原生监控插件版本记录 插件版本 支持的集群版本 更新特性 社区版本 3.10.0 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 支持v1.29集群。 2.37.8 3.9.5 v1.21 v1.23 v1.25 v1.27 v1.28 新增采集自定义指标的开关,默认开启。 移除对1.17和1.19版本集群的支持。 Grafana从云原生监控插件中移除,拆分为独立的Grafana插件。 默认只采集免费指标和服务发现自定义指标。 升级开源组件版本 2.37.8 3.8.2 v1.17 v1.19 v1.21 v1.23 v1.25 v1.27 修复部分问题。 2.35.0 3.8.1 v1.17 v1.19 v1.21 v1.23 v1.25 v1.27 支持v1.27集群。 优化Agent模式的资源占用并支持分片。 2.35.0 3.7.3 v1.17 v1.19 v1.21 v1.23 v1.25 - 2.35.0 3.7.2 v1.17 v1.19 v1.21 v1.23 v1.25 支持采集Virtual-Kubelet Pod指标。 2.35.0 3.7.1 v1.17 v1.19 v1.21 v1.23 v1.25 支持PrometheusAgent模式 2.35.0 3.6.6 v1.17 v1.19 v1.21 v1.23 v1.25 Grafana版本升级至7.5.17 支持containerd节点 2.35.0 3.5.1 v1.17 v1.19 v1.21 v1.23 - 2.35.0 3.5.0 v1.17 v1.19 v1.21 v1.23 更新至社区2.35.0版本 2.35.0
  • 安装插件 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到云原生监控插件,单击“安装”。 在安装插件页面,进行规格配置。 部署模式:3.7.1及以上版本的插件支持选择部署模式。 Agent模式:本地不存储数据,占用资源较少,但是不支持HPA能力。 使用Agent模式时,由于本地不再存储监控数据,因此必须对接AOM或第三方监控系统。 Server模式:本地存储数据,占用资源较多,支持所有能力。 容器:插件创建的组件实例,详情请参见组件说明。您可以根据需求选择相应的规格或自定义规格。 配置相关参数。 对接AOM:将普罗数据上报至 AOM 服务。开启后,可选择对应的AOM实例。采集的基础指标免费,自定义指标将由AOM服务进行收费,详情请参见价格详情。对接AOM需要用户具备一定权限,目前仅华为云/华为账号,或者在admin用户组下的用户支持此操作。 对接三方:将普罗数据上报至第三方监控系统,需填写第三方监控系统的地址和Token,并选择是否跳过证书认证。 自定义指标采集:以服务发现的形式自动采集应用的指标。开启后需要在目标应用添加相关配置,详情请参见使用云原生监控插件监控自定义指标。 普罗高可用:高可用会在集群中将Prometheus-server、Prometheus-operator、thanos-query、custom-metrics-apiserver、alertmanager组件按多实例方式部署。 安装grafana:通过 grafana 可视化浏览普罗监控数据。grafana 会默认创建大小为 5 GiB 的存储卷,卸载插件时 grafana 的存储卷不随插件被删除。首次登录默认用户名与密码均为 admin,登录后会立即让您修改密码。 3.9.0版本后,Grafana组件从云原生监控插件中移除,拆分为独立的Grafana插件,不再显示此选项。 采集分片数:将采集Targets分配到不同的Prometheus分片实例上,可以增加指标的采集吞吐上限,但会消耗更多的资源,建议在集群规模较大时设置。 采集周期:设置采集时间间隔周期。 存储:选择用于存储监控数据的磁盘类型和大小。卸载插件时存储卷不随插件删除。 若monitoring命名空间下已存在可使用的PVC(名称为pvc-prometheus-server),将使用该存储作为存储源。 调度策略:可单独配置插件各个组件的节点亲和性和污点容忍能力。可以配置多个调度策略,不配置亲和节点键和容忍节点污点键则默认不开启对应的调度策略。 作用范围:可选择调度策略生效的插件实例,默认对全部实例生效。当指定组件实例名称时,将覆盖全部实例所配置的调度策略。 亲和节点标签键:填写节点标签键,为插件实例设置节点亲和性。 亲和节点标签值:填写节点标签值,为插件实例设置节点亲和性。 容忍节点污点键:目前仅支持污点键级别的污点容忍策略,组件可以调度到拥有该污点键的节点。 完成以上配置后,单击“安装”。 插件安装完成后,根据您的使用需求,可能还需进行以下操作: 如需使用自定义指标创建弹性伸缩策略,请确认云原生监控插件的部署模式为Server模式,然后参考以下步骤: 采集应用上报的自定义指标至Prometheus,详情请参见使用云原生监控插件监控自定义指标。 将Prometheus采集到的自定义指标聚合到API Server,可供HPA策略使用,详情请参见使用自定义指标创建HPA策略。 如果您需要使用该插件为工作负载弹性伸缩提供系统资源指标(如CPU、内存使用量),还需要开启Metric API,详情请参见通过Metrics API提供资源指标。配置完成后,可使用Prometheus采集系统资源指标。(不推荐)
  • 组件说明 安装kube-prometheus-stack插件创建的Kubernetes资源,全部都创建在monitoring命名空间下。 表1 kube-prometheus-stack组件 容器组件 说明 支持的部署模式 资源类型 prometheusOperator (负载名称:prometheus-operator) 根据自定义资源(Custom Resource Definition / CRDs)来部署和管理Prometheus Server,同时监控这些自定义资源事件的变化来做相应的处理,是整个系统的控制中心。 Agent模式/Server模式 Deployment prometheus (负载名称:prometheus-server) Operator根据自定义资源Prometheus类型中定义的内容而部署Prometheus Server集群,这些自定义资源可以看作是用来管理Prometheus Server集群的StatefulSets资源。 Agent模式/Server模式 StatefulSet alertmanager (负载名称:alertmanager-alertmanager) 插件的告警中心,主要用于接收Prometheus发送的告警并通过去重、分组、分发等能力管理告警信息。 Server模式 StatefulSet thanosSidecar 仅在高可用模式下部署。和prometheus-server运行在同一个Pod中,用于实现普罗指标数据的持久化存储。 Server模式 Container thanosQuery 仅在高可用模式下部署。PromQL查询的入口,能够对来自Store或Prometheus的相同指标进行重复数据删除。 Server模式 Deployment adapter (负载名称:custom-metrics-apiserver) 将自定义指标聚合到原生的Kubernetes API Server。 Server模式 Deployment kubeStateMetrics (负载名称:kube-state-metrics) 将Prometheus的metrics数据格式转换成K8s API接口能识别的格式。kube-state-metrics组件在默认配置下,不采集K8s资源的所有labels和annotation。如需采集,请参考采集Pod所有labels和annotations进行配置。 说明: 该组件如果存在多个Pod,只会有一个Pod暴露指标。 Agent模式/Server模式 Deployment nodeExporter (负载名称:node-exporter) 每个节点上均有部署,收集Node级别的监控数据。 Agent模式/Server模式 DaemonSet grafana (负载名称:grafana) 可视化浏览普罗监控数据。grafana会默认创建大小为5 GiB的存储卷,卸载插件时grafana的存储卷不随插件被删除。 Agent模式/Server模式 Deployment clusterProblemDetector (负载名称:cluster-problem-detector) 用于监控集群异常。 Server模式 Deployment
  • 采集Pod所有labels和annotations 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“工作负载”。 切换至“monitoring”命名空间,在“无状态负载”页签找到kube-state-metrics负载,并单击“升级”。 在容器配置的“生命周期”中,编辑启动命令。 图5 编辑启动命令 采集labels时,在原有的kube-state-metrics的启动参数最后添加: --metric-labels-allowlist=pods=[*],nodes=[node,failure-domain.beta.kubernetes.io/zone,topology.kubernetes.io/zone] 如需采集annotations时,则在启动参数中以相同方法添加参数: --metric-annotations-allowlist=pods=[*],nodes=[node,failure-domain.beta.kubernetes.io/zone,topology.kubernetes.io/zone] 编辑启动命令时,请勿修改其他原有的启动参数,否则可能导致组件异常。 kube-state-metrics将开始采集Pod和node的labels/annotations指标,查询kube_pod_labels/kube_pod_annotations是否在普罗的采集任务中。 kubectl get servicemonitor kube-state-metrics -nmonitoring -oyaml | grep kube_pod_labels 更多kube-state-metrics的启动参数请参见kube-state-metrics/cli-arguments。
  • 通过Metrics API提供资源指标 容器和节点的资源指标,如CPU、内存使用量,可通过Kubernetes的Metrics API获得。这些指标可以直接被用户访问,比如用kubectl top命令,也可以被HPA或者CustomedHPA使用,根据资源使用率使负载弹性伸缩。 插件可为Kubernetes提供Metrics API,但默认未开启,若要将其开启,需要创建以下APIService对象: apiVersion: apiregistration.k8s.io/v1 kind: APIService metadata: labels: app: custom-metrics-apiserver release: cceaddon-prometheus name: v1beta1.metrics.k8s.io spec: group: metrics.k8s.io groupPriorityMinimum: 100 insecureSkipTLSVerify: true service: name: custom-metrics-apiserver namespace: monitoring port: 443 version: v1beta1 versionPriority: 100 可以将该对象保存为文件,命名为metrics-apiservice.yaml,然后执行以下命令: kubectl create -f metrics-apiservice.yaml 执行kubectl top pod -n monitoring命令,若显示如下,则表示Metrics API能正常访问: # kubectl top pod -n monitoring NAME CPU(cores) MEMORY(bytes) ...... custom-metrics-apiserver-d4f556ff9-l2j2m 38m 44Mi ...... 卸载插件时,需要执行以下kubectl命令,同时删除APIService对象,否则残留的APIService资源将导致metrics-server插件安装失败。 kubectl delete APIService v1beta1.metrics.k8s.io
  • 插件简介 云原生监控插件(kube-prometheus-stack)通过使用Prometheus-operator和Prometheus,提供简单易用的端到端Kubernetes集群监控能力。 使用kube-prometheus-stack可将监控数据与监控中心对接,在监控中心控制台查看监控数据,配置告警等。 开源社区地址:https://github.com/prometheus/prometheus
  • 约束与限制 在默认配置下,插件中的kube-state-metrics组件不采集Kubernetes资源的所有的labels和annotation。如需采集,您需要手动在启动参数中开启采集开关,并同时检查名称为kube-state-metrics的ServiceMonitor中采集白名单是否添加相应指标,详情请参见采集Pod所有labels和annotations。 自3.8.0版本起,自定义指标采集将默认不再采集kube-system和monitoring命名空间下的组件指标,若您有相关负载在这两个命名空间下,建议使用Pod Monitor或Service Monitor的方式采集。 自3.8.0版本起,默认不再采集etcd-server、kube-controller、kube-scheduler、autoscaler、fluent-bit、volcano-agent、volcano-scheduler、otel-collector的指标,您可按需开启。 开启方式:前往“配置项与密钥”页面并切换至monitoring命名空间,单击名为persistent-user-config的配置项的“编辑YAML”按钮,按需移除customSettings字段下serviceMonitorDisable或podMonitorDisable中的配置或置为空数组。 ... customSettings: podMonitorDisable: [] serviceMonitorDisable: [] 在3.9.0版本后,Grafana组件从云原生监控插件中移除,拆分为独立的Grafana插件。因此,当插件版本从3.9.0后的版本回滚至3.9.0前的版本,请先卸载Grafana插件再进行回滚操作。
  • 指标说明 集群视图暴露的指标包括基础资源指标、网络指标和磁盘指标,具体说明如下: 图1 基础资源图表 表1 基础资源图表说明 指标名称 单位 说明 节点数 个 集群中的节点个数。 磁盘不可用节点数 个 集群中磁盘不可用的节点个数。 不可用节点数 个 集群中未就绪的节点个数。 CPU使用率 百分比 集群中所有容器的CPU使用量总和占所有容器设置的Limit总和的百分比。 CPU Requests水位 百分比 集群整体CPU Requests占集群CPU容量的百分比。 CPU Limits水位 百分比 集群整体CPU Limits占集群CPU容量的百分比。 内存使用率 百分比 集群中所有容器的内存使用量总和占所有容器设置的Limit总和的百分比。 内存Request水位 百分比 集群整体内存Requests占集群内存容量的百分比。 内存Limit水位 百分比 集群整体内存Limits占集群内存容量的百分比。 Pod数 个 集群中处在不同运行状态下的Pod个数(状态包含:Failed、Pending、Running、Succeeded、Unknown等)。 容器数 个 集群中处在不同运行状态下的容器个数(状态包含:Containers Running、Containers Waiting、Containers Terminated等)。 CPU使用量 Cores 以命名空间为粒度统计各个命名空间内的所有容器的CPU使用量之和。 内存使用量 字节 以命名空间为粒度统计各个命名空间内的所有容器的内存使用量之和。 图2 网络图表 表2 网络图表说明 指标名称 单位 说明 网络接收速率 字节/秒 以命名空间为粒度统计各个命名空间内的所有容器每秒接收的字节数之和。 网络发送速率 字节/秒 以命名空间为粒度统计各个命名空间内的所有容器每秒传输的字节数之和。 网络平均接收速率 字节/秒 以命名空间为粒度统计各个命名空间内的容器每秒平均接收的字节数。 网络平均发送速率 字节/秒 以命名空间为粒度统计各个命名空间内的容器每秒平均传输的字节数。 接收数据包速率 个/秒 以命名空间为粒度统计各个命名空间内的所有容器每秒接收的数据包数之和。 集群发送数据包速率 个/秒 以命名空间为粒度统计各个命名空间内所有容器每秒发送的数据包数之和。 丢包速率(接收) 个/秒 以命名空间为粒度统计各个命名空间内所有容器每秒接收的数据丢包数之和。 丢包速率(发送) 个/秒 以命名空间为粒度统计各个命名空间内所有容器每秒发送的数据丢包数之和。 图3 磁盘图表 表3 磁盘图表说明 指标说明 单位 说明 磁盘读写IO速率(读+写) 次数/秒 以命名空间为粒度统计各个命名空间内所有容器每秒的磁盘读写IO的次数之和。 磁盘读写吞吐量(读+写) 字节/秒 以命名空间为粒度统计各个命名空间内所有容器每秒的磁盘读写字节量之和。
  • 指标清单 集群视图使用的指标清单如下: 表4 集群视图指标清单 指标 指标类型 说明 kube_pod_container_resource_requests gauge 容器请求的请求资源数 kube_pod_container_resource_limits gauge 容器请求的限制资源数 kube_node_status_allocatable gauge 节点可分配的资源总数 kube_pod_status_phase gauge Pod当前阶段 node_memory_MemAvailable_bytes gauge 节点内存可用字节数 node_memory_MemTotal_bytes gauge 节点内存总字节数 node_cpu_seconds_total counter 在不同模式下节点累计CPU花费的时间 kube_node_info gauge 节点信息 kube_node_status_condition gauge 节点状态信息 kube_pod_container_status_waiting gauge 容器是否处在waiting状态 kube_pod_container_status_terminated gauge 容器是否处在终止状态 container_cpu_usage_seconds_total counter 容器CPU累计使用时间 container_memory_rss gauge RSS内存,即常驻内存集。是分配给进程使用的实际物理内存字节数,不是磁盘上缓存的虚机内存。 container_network_receive_bytes_total counter 容器网络累积接收字节数 container_network_transmit_bytes_total counter 容器网络累积传输字节数 container_network_receive_packets_total counter 容器网络收到的累计数据包数 container_network_transmit_packets_total counter 容器网络传输的累计数据包数 container_network_receive_packets_dropped_total counter 容器网络接收时丢失的数据包数 container_network_transmit_packets_dropped_total counter 容器网络传输时丢失的数据包数 container_fs_reads_total counter 容器磁盘读取次数 container_fs_reads_bytes_total counter 容器磁盘读取的总字节数
  • 步骤一:安装插件 集群中需要同时安装CCE AI套件(NVIDIA GPU)插件和Volcano调度器插件。 登录CCE控制台,单击集群名称进入集群,在左侧选择“插件中心”。 在右侧找到CCE AI套件(NVIDIA GPU)插件,单击“安装”。 在安装插件页面,填写插件配置。 插件规格:可配置“默认”或“自定义”规格,请根据实际情况选择。 容器:选择“自定义”规格时支持设置。 Nvidia驱动:您需要填写Nvidia驱动的下载链接,集群下全部GPU节点将使用相同的驱动。 如果下载链接为公网地址,如nvidia官网地址(https://us.download.nvidia.com/tesla/470.57.02/NVIDIA-Linux-x86_64-470.57.02.run),各GPU节点均需要绑定EIP。获取驱动链接方法请参考获取驱动链接-公网地址。 若下载链接为OBS上的链接,无需绑定EIP 。获取驱动链接方法请参考获取驱动链接-OBS地址。 请确保Nvidia驱动版本与GPU节点适配。 更改驱动版本后,需要重启节点才能生效。 驱动选择:若您不希望集群中的所有GPU节点使用相同的驱动,CCE支持以节点池为单位安装不同的GPU驱动。 插件将根据节点池指定的驱动版本进行安装,仅对节点池新建节点生效。 更新驱动版本后,节点池中新建节点可直接生效,存量节点需重启节点生效。 GPU虚拟化(2.0.5及以上版本支持):选择开启GPU虚拟化,支持GPU单卡的算力、显存分割与隔离。 图1 开启GPU虚拟化 若集群中未安装Volcano插件,将不支持开启GPU虚拟化,您可单击“一键安装”进行安装。如需配置Volcano插件参数,请单击“自定义安装”,详情请参见Volcano调度器。 若集群中已安装Volcano插件,但插件版本不支持使用GPU虚拟化,您可单击“一键升级”进行升级。如需配置Volcano插件参数,请单击“自定义升级”,详情请参见Volcano调度器。 开启GPU虚拟化后,可选择“虚拟化节点兼容GPU共享模式”选项,即兼容Kubernetes默认GPU调度能力。该能力需要配套gpu-device-plugin插件版本为2.0.10及以上、Volcano插件版本为1.10.5及以上。 开启该兼容能力后,在工作负载中声明nvidia.com/gpu配额(即配置nvidia.com/gpu为小数,例如0.5)时将通过虚拟化GPU提供,实现GPU显存隔离,按照设定值的百分比为容器分配GPU显存(例如分配0.5×16GiB=8GiB的GPU显存,该数值需为128MiB的整数倍否则会自动向下取整)。如果在开启兼容能力前工作负载中已经使用nvidia.com/gpu资源,则不会转成虚拟化GPU,依然使用整卡资源。 开启该兼容能力后,使用nvidia.com/gpu配额时等价于开启虚拟化GPU显存隔离,可以和显存隔离模式的工作负载共用一张GPU卡,但不支持和算显隔离模式负载共用一张GPU卡。同时,还需遵循GPU虚拟化的其他约束与限制。 未开启该兼容能力时,在工作负载中声明nvidia.com/gpu配额仅影响调度结果,并不会有显存隔离的限制。即虽然配置nvidia.com/gpu为0.5,依然可以在容器中看到完整的GPU显存资源。且使用nvidia.com/gpu资源的工作负载无法和使用虚拟化显存的工作负载共同调度到同一节点。 编辑插件配置时,修改“虚拟化节点兼容GPU共享模式”选项,不会影响已运行的工作负载。修改该配置可能工作负载导致调度失败。例如,兼容能力从开启到关闭,已使用nvidia.com/gpu资源的工作负载仍存在虚拟化GPU显存隔离,会导致该GPU卡无法调度算显隔离模式的工作负载,您需要将使用nvidia.com/gpu资源的工作负载删除才可重新调度。 单击“安装”。
  • 步骤三(可选):修改Volcano调度策略 Volcano针对GPU节点的调度策略默认为Spread,即如果节点配置相同,会选择一个正在运行的容器数量最少的节点,可以尽量将容器平均分配到各个节点。而Binpack调度策略与之相反,它会尽可能的把所有的容器调度到一台节点上运行,尽量少用节点,避免资源碎片化。 如果在使用GPU虚拟化特性时需要使用Binpack调度策略,可以在Volcano插件的高级配置中进行修改,具体操作步骤如下。 登录CCE控制台,单击集群名称进入集群,在左侧选择“插件中心”。 在右侧找到Volcano调度器插件,单击“编辑”。 在编辑插件页面,修改插件的“高级配置”。 在nodeorder插件中,添加arguments参数,配置leastrequested.weight为0,即资源分配最少的节点优先级设置为0。 新增binpack插件,并指定xGPU自定义资源(volcano.sh/gpu-core.percentage和volcano.sh/gpu-mem.128Mi)的权重。 完整示例如下: { "colocation_enable": "", "default_scheduler_conf": { "actions": "allocate, backfill, preempt", "tiers": [ { "plugins": [ { "name": "priority" }, { "enablePreemptable": false, "name": "gang" }, { "name": "conformance" } ] }, { "plugins": [ { "enablePreemptable": false, "name": "drf" }, { "name": "predicates" }, { "name": "nodeorder", //将资源分配最少的节点优先级设置为0 "arguments": { "leastrequested.weight": 0 } } ] }, { "plugins": [ { "name": "cce-gpu-topology-predicate" }, { "name": "cce-gpu-topology-priority" }, { "name": "xgpu" }, //添加binpack插件,指定xGPU资源的权重。 { "name": "binpack", "arguments": { "binpack.resources": "volcano.sh/gpu-core.percentage,volcano.sh/gpu-mem.128Mi", "binpack.resources.volcano.sh/gpu-mem.128Mi": 10, "binpack.resources.volcano.sh/gpu-core.percentage": 10 } } ] }, { "plugins": [ { "name": "nodelocalvolume" }, { "name": "nodeemptydirvolume" }, { "name": "nodeCSIscheduling" }, { "name": "networkresource" } ] } ] }, "tolerations": [ { "effect": "NoExecute", "key": "node.kubernetes.io/not-ready", "operator": "Exists", "tolerationSeconds": 60 }, { "effect": "NoExecute", "key": "node.kubernetes.io/unreachable", "operator": "Exists", "tolerationSeconds": 60 } ] }
  • 前提条件 配置 支持版本 集群版本 v1.23.8-r0、v1.25.3-r0及以上 操作系统 Huawei Cloud EulerOS 2.0操作系统 GPU类型 支持T4、V100类型的GPU 驱动版本 GPU虚拟化功能仅支持470.57.02、510.47.03、535.54.03版本的GPU驱动。 运行时 仅支持containerd 插件 集群中需要同时安装以下插件: Volcano调度器插件:1.10.5及以上版本 CCE AI套件(NVIDIA GPU)插件:2.0.5及以上版本
  • 版本记录 建议升级到跟集群配套的最新Volcano版本。 表9 Volcano调度器版本记录 插件版本 支持的集群版本 更新特性 1.13.1 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 调度器内存使用优化 1.12.18 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 适配CCE v1.29集群 默认开启抢占功能 1.12.1 v1.19.16 v1.21 v1.23 v1.25 v1.27 v1.28 应用弹性扩缩容性能优化 1.11.21 v1.19.16 v1.21 v1.23 v1.25 v1.27 v1.28 支持Kubernetes v1.28 支持负载感知调度 镜像OS更新为HCE 2.0 优化CSI资源抢占能力 优化负载感知重调度能力 优化混部场景抢占能力 1.11.9 v1.19.16 v1.21 v1.23 v1.25 v1.27 优化昇腾芯片rank table排序能力 支持应用弹性伸缩场景下的优先级调度 1.11.6 v1.19.16 v1.21 v1.23 v1.25 v1.27 支持Kubernetes v1.27 支持重调度功能 支持节点池亲和调度能力 优化调度性能 1.10.14 v1.19.16 v1.21 v1.23 v1.25 支持GPU资源抢占 优化混部弹性限流功能 增强可用区拓扑分布能力 优化昇腾芯片rank table排序能力 优化GPU虚拟化功能 提升与CA联动扩容效率 提升调度稳定性 优化持久卷调度逻辑 优化日志信息 1.10.7 v1.19.16 v1.21 v1.23 v1.25 修复本地持久卷插件未计算预绑定到节点的pod的问题 1.10.5 v1.19.16 v1.21 v1.23 v1.25 volcano agent支持资源超卖。 添加针对GPU资源字段的校验admission:nvidia.com/gpu应小于1或者为正整数,volcano.sh/gpu-core.percentage应小于100并为5的倍数。 修复存在PVC绑定失败的场景下,后续提交Pod调度慢的问题。 修复节点上存在长时间Teminating Pod场景下,新提交Pod无法运行的问题。 修复并发创建挂载PVC的Pod的场景下,volcano重启的问题。 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支持v1.25集群 提升Volcano调度性能 1.7.1 v1.19.16 v1.21 v1.23 v1.25 Volcano支持v1.25集群 1.4.7 v1.15 v1.17 v1.19 v1.21 删除Pod状态Undetermined,以适配集群Autoscaler的弹性能力。 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.7 v1.15 v1.17 v1.19 v1.21 支持在/离线作业混合部署及资源超卖功能 优化集群调度吞吐性能 修复特定场景下调度器panic的问题 修复CCE v1.15集群中volcano作业volumes.secret校验失败的问题 修复挂载volume,作业调度不成功的问题 1.3.3 v1.15 v1.17 v1.19 v1.21 修复GPU异常导致的调度器崩溃问题;修复特权Init容器准入失败问题 1.3.1 v1.15 v1.17 v1.19 升级Volcano框架到最新版本 支持Kubernetes v1.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的问题 修复CCE v1.15以上版本GPU调度的问题,暂不支持任务分发时的CCE版本滚动升级 修复特定场景下队列状态不明的问题 修复特定场景下作业挂载PVC panic的问题 修复GPU作业无法配置小数的问题 添加ioaware插件 添加ring controller
  • Prometheus指标采集 volcano-scheduler通过端口8080暴露Prometheus metrics指标。您可以自建Prometheus采集器识别并通过http://{{volcano-schedulerPodIP}}:{{volcano-schedulerPodPort}}/metrics路径获取volcano-scheduler调度相关指标。 Prometheus指标暴露仅支持Volcano插件1.8.5及以上版本。 表7 关键指标说明 指标名称 指标类型 描述 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插件卸载说明 卸载插件时,会将Volcano的自定义资源(表8)全部清理,已创建的相关资源也将同步删除,重新安装插件不会继承和恢复卸载之前的任务信息。如集群中还存在正在使用的Volcano自定义资源,请谨慎卸载插件。 表8 Volcano自定义资源 名称 API组 API版本 资源级别 Command bus.volcano.sh v1alpha1 Namespaced Job batch.volcano.sh v1alpha1 Namespaced Numatopology nodeinfo.volcano.sh v1alpha1 Cluster PodGroup scheduling.volcano.sh v1beta1 Namespaced Queue scheduling.volcano.sh v1beta1 Cluster
  • 在控制台中修改volcano-scheduler配置 volcano-scheduler是负责Pod调度的组件,它由一系列action和plugin组成。action定义了调度各环节中需要执行的动作;plugin根据不同场景提供了action 中算法的具体实现细节。volcano-scheduler具有高度的可扩展性,您可以根据需要实现自己的action和plugin。 Volcano允许用户在安装,升级,编辑时,编写Volcano调度器配置信息,并将配置内容同步到volcano-scheduler-configmap里。 当前小节介绍如何使用自定义配置,以便用户让volcano-scheduler能更适合自己的场景。 仅Volcano 1.7.1及以上版本支持该功能。在新版插件界面上合并了原resource_exporter_enable等选项,以新选项default_scheduler_conf代替。 您可登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到Volcano调度器,单击“安装”或“升级”,并在“参数配置”中设置Volcano调度器配置参数。 使用resource_exporter配置,示例如下: { "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": "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功能。
  • 保留原volcano-scheduler-configmap配置 假如在某场景下希望插件升级后时沿用原配置,可参考以下步骤: 查看原volcano-scheduler-configmap配置,并备份。 示例如下: # kubectl edit cm volcano-scheduler-configmap -n kube-system apiVersion: v1 data: 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 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
  • 组件说明 表6 Volcano组件 容器组件 说明 资源类型 volcano-scheduler 负责Pod调度。 Deployment volcano-controller 负责CRD资源的同步。 Deployment volcano-admission Webhook server端,负责Pod、Job等资源的校验和更改。 Deployment volcano-agent 云原生混部agent,负责节点QoS保障、CPU Burst和动态资源超卖等。 DaemonSet resource-exporter 负责上报节点的NUMA拓扑信息。 DaemonSet
  • 插件简介 Volcano是一个基于Kubernetes的批处理平台,提供了机器学习、深度学习、生物信息学、基因组学及其他大数据应用所需要而Kubernetes当前缺失的一系列特性。 Volcano提供了高性能任务调度引擎、高性能异构芯片管理、高性能任务运行管理等通用计算能力,通过接入AI、大数据、基因、渲染等诸多行业计算框架服务终端用户,最大支持1000Pod/s的调度并发数,轻松应对各种规模的工作负载,大大提高调度效率和资源利用率。 Volcano针对计算型应用提供了作业调度、作业管理、队列管理等多项功能,主要特性包括: 丰富的计算框架支持:通过CRD提供了批量计算任务的通用API,通过提供丰富的插件及作业生命周期高级管理,支持TensorFlow,MPI,Spark等计算框架容器化运行在Kubernetes上。 高级调度:面向批量计算、高性能计算场景提供丰富的高级调度能力,包括成组调度,优先级抢占、装箱、资源预留、任务拓扑关系等。 队列管理:支持分队列调度,提供队列优先级、多级队列等复杂任务调度能力。 目前Volcano项目已经在Github开源,项目开源地址:https://github.com/volcano-sh/volcano 本文介绍如何在CCE集群中安装及配置Volcano插件,具体使用方法请参见Volcano调度。 在使用Volcano作为调度器时,建议将集群中所有工作负载都使用Volcano进行调度,以避免多调度器同时工作导致的一些调度资源冲突问题。
  • Kubernetes中的域名解析逻辑 DNS策略可以在每个pod基础上进行设置,目前,Kubernetes支持Default、ClusterFirst、ClusterFirstWithHostNet和None四种DNS策略,具体请参见Service与Pod的DNS。这些策略在pod-specific的dnsPolicy字段中指定。 “Default”:如果dnsPolicy被设置为“Default”,则名称解析配置将从pod运行的节点继承。 自定义上游域名服务器和存根域不能够与这个策略一起使用。 “ClusterFirst”:如果dnsPolicy被设置为“ClusterFirst”,任何与配置的集群域后缀不匹配的DNS查询(例如,www.kubernetes.io)将转发到从该节点继承的上游名称服务器。集群管理员可能配置了额外的存根域和上游DNS服务器。 “ClusterFirstWithHostNet”:对于使用hostNetwork运行的Pod,您应该明确设置其DNS策略“ClusterFirstWithHostNet”。 “None”:它允许Pod忽略Kubernetes环境中的DNS设置。应使用dnsConfigPod规范中的字段提供所有DNS设置 。 Kubernetes 1.10及以上版本,支持Default、ClusterFirst、ClusterFirstWithHostNet和None四种策略;低于Kubernetes 1.10版本,仅支持default、ClusterFirst和ClusterFirstWithHostNet三种。 “Default”不是默认的DNS策略。如果dnsPolicy的Flag没有特别指明,则默认使用“ClusterFirst”。 路由请求流程: 未配置存根域:没有匹配上配置的集群域名后缀的任何请求,例如 “www.kubernetes.io”,将会被转发到继承自节点的上游域名服务器。 已配置存根域:如果配置了存根域和上游DNS服务器,DNS查询将基于下面的流程对请求进行路由: 查询首先被发送到coredns中的DNS缓存层。 从缓存层,检查请求的后缀,并根据下面的情况转发到对应的DNS上: 具有集群后缀的名字(例如“.cluster.local”):请求被发送到coredns。 具有存根域后缀的名字(例如“.acme.local”):请求被发送到配置的自定义DNS解析器(例如:监听在 1.2.3.4)。 未能匹配上后缀的名字(例如“widget.com”):请求被转发到上游DNS。 图2 路由请求流程
  • 解决方案 CCE服务支持pass-through能力,通过Loadbalance类型Service配置kubernetes.io/elb.pass-through的annotation实现集群内部访问Service的ELB地址时绕出集群,并通过ELB的转发最终转发到后端的Pod。 图1 pass-through访问示例 对于CCE集群: 集群内部客户端访问LB类型Service时,访问请求默认是通过集群服务转发规则(iptables或IPVS)转发到后端的容器实例。 当LB类型Service配置elb.pass-through后,集群内部客户端访问Service地址时会先访问到ELB,再通过ELB的负载均衡能力先访问到节点,然后通过集群服务转发规则(iptables或IPVS)转发到后端的容器实例。 对于CCE Turbo集群: 集群内部客户端访问LB类型Service时,默认使用pass-through方式,此时客户端会直接访问ELB私网地址,然后通过ELB直接连接容器实例。
  • 应用现状 Kubernetes集群可以将运行在一组Pod上的应用程序发布为服务,提供统一的四层访问入口。对于Loadbalancer类型的service,kube-proxy默认会将Service的status中LoadbalanceIP地址配置到节点本地的转发规则中,集群内部访问ELB的地址,流量就会在集群内部转发,而不会经过ELB转发。 集群内部转发功能是kube-proxy组件负责,kube-proxy有iptables和IPVS两种转发模式,iptables是一种简单的轮询转发,IPVS虽有多种转发模式,但也需要修改kube-proxy的启动参数,不能像ELB那样灵活配置转发策略,且无法利用ELB的健康检查能力。
共100000条