云服务器内容精选

  • 约束与限制 单个GPU卡最多虚拟化成20个GPU虚拟设备。 使用GPU虚拟化后,不支持init容器。 GPU虚拟化支持显存隔离、显存与算力隔离两种隔离模式。单个GPU卡仅支持调度同一种隔离模式的工作负载。 使用GPU虚拟化后,不支持使用Autoscaler插件自动扩缩容GPU虚拟化节点。 XGPU服务的隔离功能不支持以UVM的方式申请显存,即调用CUDA API cudaMallocManaged(),更多信息,请参见NVIDIA官方文档。请使用其他方式申请显存,例如调用cudaMalloc()等。 受GPU虚拟化技术的限制,容器内应用程序初始化时,通过nvidia-smi监测工具监测到的实时算力可能超过容器可用的算力上限。
  • 前提条件 配置 支持版本 集群版本 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及以上版本
  • 获取驱动链接-公网地址 登录CCE控制台。 创建节点,在节点规格处选择要创建的GPU节点,选中后下方显示的信息中可以看到节点的GPU显卡型号。 图3 查看显卡型号 登录到https://www.nvidia.com/Download/Find.aspx?lang=cn网站。 如图4所示,在“NVIDIA驱动程序下载”框内选择对应的驱动信息。其中“操作系统”必须选Linux 64-bit。 图4 参数选择 驱动信息确认完毕,单击“搜索”按钮,会跳转到驱动信息展示页面,该页面会显示驱动的版本信息如图5,单击“下载”到下载页面。 图5 驱动信息 获取驱动软件链接方式分两种: 方式一:如图6,在浏览器的链接中找到路径为url=/tesla/470.103.01/NVIDIA-Linux-x86_64-470.103.01.run的路径,补齐全路径https://us.download.nvidia.com/tesla/470.103.01/NVIDIA-Linux-x86_64-470.103.01.run该方式节点需要绑定EIP 。 方式二:如图6,单击“下载”按钮下载驱动,然后上传到OBS,获取软件的链接,该方式节点不需要绑定EIP。 图6 获取链接
  • 版本记录 表3 CCE AI套件(NVIDIA GPU)版本记录 插件版本 支持的集群版本 更新特性 2.6.4 v1.28 v1.29 更新GPU卡逻辑隔离逻辑 2.6.1 v1.28 v1.29 升级GPU插件基础镜像 2.5.6 v1.28 修复安装驱动的问题 2.5.4 v1.28 支持v1.28集群 2.0.72 v1.21 v1.23 v1.25 v1.27 更新GPU卡逻辑隔离逻辑 2.0.69 v1.21 v1.23 v1.25 v1.27 升级GPU插件基础镜像 2.0.48 v1.21 v1.23 v1.25 v1.27 修复安装驱动的问题 2.0.46 v1.21 v1.23 v1.25 v1.27 支持535版本Nvidia驱动 支持非root用户使用XGPU 优化启动逻辑 2.0.44 v1.21 v1.23 v1.25 v1.27 支持535版本Nvidia驱动 支持非root用户使用XGPU 优化启动逻辑 2.0.18 v1.21 v1.23 v1.25 v1.27 支持HCE 2.0 2.0.17 v1.21 v1.23 v1.25 v1.27 RollingUpdate参数配置优化 2.0.14 v1.19 v1.21 v1.23 v1.25 v1.27 支持xGPU设备监控 支持nvidia.com/gpu与volcano.sh/gpu-* api兼容 2.0.5 v1.19 v1.21 v1.23 v1.25 - 2.0.0 v1.19 v1.21 v1.23 v1.25 支持GPU虚拟化 驱动安装目录更新至节点/usr/local/nvidia 1.2.28 v1.19 v1.21 v1.23 v1.25 适配OS Ubuntu22.04 GPU驱动目录自动挂载优化 1.2.24 v1.19 v1.21 v1.23 v1.25 节点池支持配置GPU驱动版本 支持GPU指标采集 1.2.20 v1.19 v1.21 v1.23 v1.25 设置插件别名为gpu 1.2.17 v1.15 v1.17 v1.19 v1.21 v1.23 增加nvidia-driver-install pod limits 配置 1.2.15 v1.15 v1.17 v1.19 v1.21 v1.23 适配CCE v1.23集群 1.2.11 v1.15 v1.17 v1.19 v1.21 支持EulerOS 2.10系统 1.2.10 v1.15 v1.17 v1.19 v1.21 CentOS系统支持新版本GPU驱动 1.2.9 v1.15 v1.17 v1.19 v1.21 适配CCE v1.21集群 1.2.2 v1.15 v1.17 v1.19 适配EulerOS新内核 1.2.1 v1.15 v1.17 v1.19 适配CCE v1.19集群 插件增加污点容忍 1.1.13 v1.13 v1.15 v1.17 支持Centos7.6 3.10.0-1127.19.1.el7.x86_64内核系统 1.1.11 v1.15 v1.17 支持用户自定义驱动地址下载驱动 支持v1.15、v1.17集群
  • 验证插件 插件安装完成后,在GPU节点及调度了GPU资源的容器中执行nvidia-smi命令,验证GPU设备及驱动的可用性。 GPU节点: # 插件版本为2.0.0以下时,执行以下命令: cd /opt/cloud/cce/nvidia/bin && ./nvidia-smi # 插件版本为2.0.0及以上时,驱动安装路径更改,需执行以下命令: cd /usr/local/nvidia/bin && ./nvidia-smi 容器: cd /usr/local/nvidia/bin && ./nvidia-smi 若能正常返回GPU信息,说明设备可用,插件安装成功。
  • 安装插件 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到CCE AI套件(NVIDIA GPU)插件,单击“安装”。 设置插件支持的“参数配置”。 Nvidia驱动:填写Nvidia驱动的下载链接,集群下全部GPU节点将使用相同的驱动。 如果下载链接为公网地址,如nvidia官网地址(https://us.download.nvidia.com/tesla/470.103.01/NVIDIA-Linux-x86_64-470.103.01.run),各GPU节点均需要绑定EIP。获取驱动链接方法请参考获取驱动链接-公网地址。 若下载链接为OBS上的链接,无需绑定EIP 。获取驱动链接方法请参考获取驱动链接-OBS地址。 请确保Nvidia驱动版本与GPU节点适配。配套关系请参见GPU驱动支持列表。 更改驱动版本后,需要重启节点才能生效。 对于Linux 5.x内核系统:Huawei Cloud EulerOS 2.0建议使用470及以上版本驱动;Ubuntu 22.04建议使用515及以上版本驱动。 图1 填写Nvidia驱动 驱动选择:若您不希望集群中的所有GPU节点使用相同的驱动,CCE支持以节点池为单位安装不同的GPU驱动。 插件将根据节点池指定的驱动版本进行安装,仅对节点池新建节点生效。 更新驱动版本后,节点池中新建节点可直接生效,存量节点需重启节点生效。 GPU虚拟化(2.0.5及以上版本支持):选择开启GPU虚拟化,支持GPU单卡的算力、显存分割与隔离。 图2 开启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资源的工作负载删除才可重新调度。 单击“安装”,安装插件的任务即可提交成功。 卸载插件将会导致重新调度的GPU Pod无法正常运行,但已运行的GPU Pod不会受到影响。
  • 约束与限制 下载的驱动必须是后缀为“.run”的文件。 仅支持Nvidia Tesla驱动,不支持GRID驱动。 安装或重装插件时,需要保证驱动下载链接正确且可正常访问,插件对链接有效性不做额外校验。 插件仅提供驱动的下载及安装脚本执行功能,插件的状态仅代表插件本身功能正常,与驱动是否安装成功无关。 对于GPU驱动版本与您业务应用的兼容性(GPU驱动版本与CUDA库版本的兼容性),CCE不保证两者之间兼容性,请您自行验证。 对于已经安装GPU驱动的自定义操作系统镜像,CCE无法保证其提供的GPU驱动与CCE其他GPU组件兼容(例如监控组件等)。 如果您使用不在GPU驱动支持列表内的GPU驱动版本,可能引发GPU驱动与操作系统版本、 ECS实例类型 、Container Runtime等不兼容,继而导致驱动安装失败或者GPU插件异常。对于使用自定义GPU驱动的场景,请您自行验证。
  • GPU驱动支持列表 当前GPU驱动支持列表仅针对1.2.28及以上版本的GPU插件。 如果您需要安装最新版本的GPU驱动,请将您的GPU插件升级到最新版本。 表1 GPU驱动支持列表 GPU型号 支持集群类型 机型规格 操作系统 Huawei Cloud EulerOS 2.0(支持GPU虚拟化) Ubuntu 22.04 CentOS Linux release 7.6 EulerOS release 2.9 EulerOS release 2.5 Ubuntu 18.04(停止维护) EulerOS release 2.3(停止维护) Tesla T4 CCE Standard集群 g6 pi2 535.54.03 510.47.03 470.57.02 535.54.03 470.141.03 535.54.03 470.141.03 535.54.03 470.141.03 535.54.03 470.141.03 470.141.03 470.141.03 Volta V100 CCE Standard集群 p2s p2vs p2v 535.54.03 510.47.03 470.57.02 535.54.03 470.141.03 535.54.03 470.141.03 535.54.03 470.141.03 535.54.03 470.141.03 470.141.03 470.141.03
  • 安装插件 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到Grafana,单击“安装”。 在安装插件页面,设置“规格配置”。 表1 Grafana插件规格配置 参数 参数说明 插件规格 该插件可配置“自定义”规格。 容器 选择“自定义”规格时,您可根据需求调整插件实例的容器规格。 设置插件支持的“参数配置”。 表2 Grafana插件参数配置 参数 参数说明 云硬盘类型 安装Grafana需创建云硬盘用于存储本地数据,卸载插件时Grafana的云硬盘不会删除。创建云硬盘会收取存储费用,并占用云硬盘的配额。 您可以选择云硬盘的类型,不同局点支持的云硬盘类型可能不同,请以控制台选择项为准。 容量 (GiB) 云硬盘的大小默认为5GiB。您可以在创建完成后对存储卷进行扩容,详情请参见相关操作。 对接 AOM 将普罗数据上报至 AOM 服务。开启后,可选择对应的AOM实例。采集的基础指标免费,自定义指标将由AOM服务进行收费,详情请参见价格详情。对接AOM需要用户具备一定权限,目前仅华为云/华为账号,或者在admin用户组下的用户支持此操作。 设置插件实例的“调度策略”。 表3 插件调度配置 参数 参数说明 节点亲和 不配置:插件实例不指定节点亲和调度。 指定节点调度:指定插件实例部署的节点。若不指定,将根据集群默认调度策略进行随机调度。 指定节点池调度:指定插件实例部署的节点池。若不指定,将根据集群默认调度策略进行随机调度。 自定义亲和策略:填写期望插件部署的节点标签实现更灵活的调度策略,若不填写将根据集群默认调度策略进行随机调度。 同时设置多条自定义亲和策略时,需要保证集群中存在同时满足所有亲和策略的节点,否则插件实例将无法运行。 容忍策略 容忍策略与节点的污点能力配合使用,允许(不强制)插件的 Deployment 实例调度到带有与之匹配的污点的节点上,也可用于控制插件的 Deployment 实例所在的节点被标记污点后插件的 Deployment 实例的驱逐策略。 插件会对实例添加针对node.kubernetes.io/not-ready和node.kubernetes.io/unreachable污点的默认容忍策略,容忍时间窗为60s。 详情请参见容忍策略。 单击“安装”。 待插件安装完成后,选择对应的集群,然后单击左侧导航栏的“插件中心”,可筛选“已安装插件”查看相应的插件。
  • 使用说明 如需通过公网访问Grafana图表,您需要为Grafana容器实例绑定LoadBalancer类型的服务。 登录CCE控制台,选择一个已安装Grafana插件的集群,在左侧导航栏中选择“服务”。 单击右上角“YAML创建”,为Grafana创建一个公网LoadBalancer类型Service。 apiVersion: v1 kind: Service metadata: name: grafana-lb #服务名称,可自定义 namespace: monitoring labels: app: grafana annotations: kubernetes.io/elb.id: 038ff*** #请替换为集群所在VPC下的ELB实例ID,且ELB实例为公网访问类型 spec: ports: - name: cce-service-0 protocol: TCP port: 80 #服务端口号,可自定义 targetPort: 3000 #Grafana的默认端口号,无需更改 selector: app: grafana type: LoadBalancer 创建完成后在浏览器访问“负载均衡公网IP地址:服务端口”,访问Grafana并选择合适的DashBoard,即可以查到相应的聚合内容。 图1 Grafana面板
  • 操作场景 环境变量是指容器运行环境中设定的一个变量,环境变量可以在工作负载部署后修改,为工作负载提供极大的灵活性。 CCE中设置的环境变量与Dockerfile中的“ENV”效果相同。 容器启动后,容器中的内容不应修改。如果修改配置项(例如将容器应用的密码、证书、环境变量配置到容器中),当容器重启(例如节点异常重新调度Pod)后,会导致配置丢失,业务异常。 配置信息应通过入参等方式导入容器中,以免重启后配置丢失。 环境变量支持如下几种方式设置。 自定义:手动填写环境变量名称及对应的参数值。 配置项导入:将配置项中所有键值都导入为环境变量。 配置项键值导入:将配置项中某个键的值导入作为某个环境变量的值。例如图1中将configmap-example这个配置项中configmap_key的值configmap_value导入为环境变量key1的值,导入后容器中将会存在一个名为key1的环境变量,其值为configmap_value。 密钥导入:将密钥中所有键值都导入为环境变量。 密钥键值导入:将密钥中某个键的值导入作为某个环境变量的值。例如图1中将secret-example这个配置项中secret_key的值secret_value导入为环境变量key2的值,导入后容器中将会存在一个名为key2的环境变量,其值为secret_value。 变量/变量引用:用Pod定义的字段作为环境变量的值。例如图1中将此Pod的名称导入为环境变量key3的值,导入后容器中将会存在一个名为key3的环境变量,其值为该Pod的名称。 资源引用:用容器定义的资源申请值或限制值作为环境变量的值。例如图1中将容器container-1的CPU限制值导入为环境变量key4的值,导入后容器中将会存在一个名为key4的环境变量,其值为容器container-1的CPU限制值。
  • YAML样例 apiVersion: apps/v1 kind: Deployment metadata: name: env-example namespace: default spec: replicas: 1 selector: matchLabels: app: env-example template: metadata: labels: app: env-example spec: containers: - name: container-1 image: nginx:alpine imagePullPolicy: Always resources: requests: cpu: 250m memory: 512Mi limits: cpu: 250m memory: 512Mi env: - name: key # 自定义 value: value - name: key1 # 配置项键值导入 valueFrom: configMapKeyRef: name: configmap-example key: configmap_key - name: key2 # 密钥键值导入 valueFrom: secretKeyRef: name: secret-example key: secret_key - name: key3 # 变量引用,用Pod定义的字段作为环境变量的值 valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: key4 # 资源引用,用Container定义的字段作为环境变量的值 valueFrom: resourceFieldRef: containerName: container1 resource: limits.cpu divisor: 1 envFrom: - configMapRef: # 配置项导入 name: configmap-example - secretRef: # 密钥导入 name: secret-example imagePullSecrets: - name: default-secret
  • 环境变量查看 如果configmap-example和secret-example的内容如下。 $ kubectl get configmap configmap-example -oyaml apiVersion: v1 data: configmap_key: configmap_value kind: ConfigMap ... $ kubectl get secret secret-example -oyaml apiVersion: v1 data: secret_key: c2VjcmV0X3ZhbHVl # c2VjcmV0X3ZhbHVl为secret_value的base64编码 kind: Secret ... 则进入Pod中查看的环境变量结果如下。 $ kubectl get pod NAME READY STATUS RESTARTS AGE env-example-695b759569-lx9jp 1/1 Running 0 17m $ kubectl exec env-example-695b759569-lx9jp -- printenv / # env key=value # 自定义环境变量 key1=configmap_value # 配置项键值导入 key2=secret_value # 密钥键值导入 key3=env-example-695b759569-lx9jp # Pod的metadata.name key4=1 # container1这个容器的limits.cpu,单位为Core,向上取整 configmap_key=configmap_value # 配置项导入,原配置项中的键值直接会导入结果 secret_key=secret_value # 密钥导入,原密钥中的键值直接会导入结果
  • 资源变更与弃用 社区1.23 ReleaseNotes FlexVolume废弃,建议使用 CS I。 HorizontalPodAutoscaler v2版本GA,HorizontalPodAutoscaler API v2在1.23版本中逐渐稳定。不建议使用HorizontalPodAutoscaler v2beta2 API,建议使用新的v2版本API。 PodSecurity支持beta,PodSecurity替代废弃的PodSecurityPolicy,PodSecurity是一个准入控制器,它根据设置实施级别的特定命名空间标签在命名空间中的Pod上实施Pod安全标准。在1.23中PodSecurity默认启用。 社区1.22 ReleaseNotes Ingress资源不再支持networking.k8s.io/v1beta1和extensions/v1beta1 API。如果使用旧版本API管理Ingress,会影响应用对外暴露服务,请尽快使用networking.k8s.io/v1替代。 CustomResourceDefinition资源不再支持apiextensions.k8s.io/v1beta1 API。如果使用旧版本API创建自定义资源定义,会导致定义创建失败,进而影响调和(reconcile)该自定资源的控制器,请尽快使用apiextensions.k8s.io/v1替代。 ClusterRole、ClusterRoleBinding、Role和RoleBinding资源不再支持rbac.authorization.k8s.io/v1beta1 API。如果使用旧版本API管理RBAC资源,会影响应用的权限服务,甚至无法在集群内正常使用,请尽快使用rbac.authorization.k8s.io/v1替代。 Kubernetes版本发布周期由一年4个版本变为一年3个版本。 StatefulSets 支持minReadySeconds。 缩容时默认根据Pod uid排序随机选择删除Pod(LogarithmicScaleDown)。基于该特性,可以增强Pod被缩容的随机性,缓解由于Pod拓扑分布约束带来的问题。更多信息,请参见KEP-2185和issues 96748。 BoundServiceAccountTokenVolume特性已稳定,该特性能够提升服务账号(ServiceAccount)Token的安全性,改变了Pod挂载Token的方式,Kubernetes 1.21及以上版本的集群中会默认开启。
  • Ingress支持的Service类型 ELB Ingress支持的Service类型如表1所示。 表1 ELB Ingress支持的Service类型 集群类型 ELB类型 集群内访问(ClusterIP) 节点访问(NodePort) CCE Standard集群 共享型负载均衡 不支持 支持 独享型负载均衡 不支持(集群内访问服务关联实例未绑定eni网卡,独享型负载均衡无法对接) 支持 CCE Turbo 集群 共享型负载均衡 不支持 支持 独享型负载均衡 支持 不支持(节点访问服务关联实例已绑定eni网卡,独享型负载均衡无法对接) Nginx Ingress支持的Service类型如表2所示。 表2 Nginx Ingress支持的Service类型 集群类型 ELB类型 集群内访问(ClusterIP) 节点访问(NodePort) CCE Standard集群 共享型负载均衡 支持 支持 独享型负载均衡 支持 支持 CCE Turbo集群 共享型负载均衡 支持 支持 独享型负载均衡 支持 支持