华为云用户手册

  • 集群/节点 表1 集群及节点高危操作 分类 高危操作 导致后果 误操作后解决方案 Master节点 修改集群内节点安全组 说明: 安全组命名规则:集群名称-cce-control-随机数 可能导致Master节点无法使用 参照新建集群的安全组进行修复,放通安全组。详情请参见集群安全组规则配置。 节点到期或被销毁 该Master节点不可用 不可恢复。 重装操作系统 Master组件被删除 不可恢复。 自行升级Master或者etcd组件版本 可能导致集群无法使用 回退到原始版本。 删除或格式化节点/etc/kubernetes等核心目录数据 该Master节点不可用 不可恢复。 更改节点IP 该Master节点不可用 改回原IP。 自行修改核心组件(etcd、kube-apiserver、docker等)参数 可能导致Master节点不可用 按照推荐配置参数恢复,详情请参见集群配置管理。 自行更换Master或etcd证书 可能导致集群不可用 不可恢复。 Node节点 修改集群内节点安全组 说明: 安全组命名规则:集群名称-cce-node-随机数 可能导致节点无法使用 参照新建集群的安全组进行修复,放通安全组。详情请参见集群安全组规则配置。 修改节点DNS配置(/etc/resolv.conf) 导致内部域名无法正常访问,可能出现插件异常、节点重置升级等基本功能异常 说明: 如果业务需要使用自建DNS,可以在工作负载中配置DNS,请勿修改节点本身的DNS地址,详情请参见工作负载DNS配置说明。 参考新建节点中的DNS配置还原。 节点被删除 该节点不可用 不可恢复。 重装操作系统 节点组件被删除,节点不可用 重置节点,具体请参见重置节点。 升级内核或容器平台依赖组件(如openvswitch/ipvlan/docker/containerd) 可能导致节点无法使用或网络异常 说明: 节点运行依赖系统内核版本,如非必要,请不要使用yum update命令更新或重装节点的操作系统内核(使用原镜像或其它镜像重装均属高危操作) EulerOS 2.2恢复方式请参见如何解决yum update升级操作系统导致容器网络不可用问题? 非EulerOS 2.2您可以重置节点,具体请参见重置节点。 更改节点IP 节点不可用 改回原IP。 自行修改核心组件(kubelet、kube-proxy等)参数 可能导致节点不可用、修改安全相关配置导致组件不安全等 按照推荐配置参数恢复,详情请参见节点池配置管理。 修改操作系统配置 可能导致节点不可用 尝试还原配置项或重置节点,具体请参见重置节点。 删除或修改/opt/cloud/cce、/var/paas目录,删除数据盘 节点不可用 重置节点,具体请参见重置节点。 修改节点内目录权限、容器目录权限等 权限异常 不建议修改,请自行恢复。 对节点进行磁盘格式化或分区,包括系统盘、Docker盘和kubelet盘 可能导致节点不可用 重置节点,具体请参见重置节点。 在节点上安装自己的其他软件 导致安装在节点上的Kubernetes组件异常,节点状态变成不可用,无法部署工作负载到此节点 卸载已安装软件,尝试恢复或重置节点,具体请参见重置节点。 修改NetworkManager的配置 节点不可用 重置节点,具体请参见重置节点。 删除节点上的cce-pause等系统镜像 导致无法正常创建容器,且无法拉取系统镜像 请从其他正常节点复制该镜像恢复 在ECS侧对节点池下的节点进行规格变更 节点的规格与节点池定义的规格不一致,导致在弹性扩缩容时出现非预期现象(多扩或者少扩) 重新将节点规格变更为节点池下定义的规格,或者删除该节点重新扩容。
  • 使用NodeLocal DNSCache 默认情况下,应用的请求会通过CoreDNS代理,如果需要使用node-local-dns进行DNS缓存代理,您有以下几种方式可以选择: 自动注入:创建Pod时自动配置Pod的dnsConfig字段。(kube-system等系统命名空间下的Pod不支持自动注入) 手动配置:手动配置Pod的dnsConfig字段,从而使用NodeLocal DNSCache。 自动注入 自动注入需要满足如下条件: 在安装插件时,开启DNSConfig自动注入。 命名空间添加node-local-dns-injection=enabled标签。例如,为default命名空间添加该标签的命令如下: kubectl label namespace default node-local-dns-injection=enabled 新建Pod不位于kube-system和kube-public等系统命名空间。 新建Pod没有被打上禁用DNS注入的标签node-local-dns-injection=disabled。 新建Pod的DNSPolicy为ClusterFirstWithHostNet,或Pod为非hostNetwork且DNSPolicy为ClusterFirst。 开启自动注入后,创建的Pod会自动添加如下dnsConfig字段,nameservers中除了NodeLocal DNSCache的地址(169.254.20.10)外,还添加了CoreDNS的地址(10.247.3.10),保障了业务DNS请求高可用。 ... dnsConfig: nameservers: - 169.254.20.10 - 10.247.3.10 searches: - default.svc.cluster.local - svc.cluster.local - cluster.local options: - name: timeout value: '' - name: ndots value: '5' - name: single-request-reopen ... 手动配置 手动配置即自行给Pod加上dnsConfig配置。 创建一个Pod,并在dnsConfig中的nameservers配置中添加NodeLocal DNSCache的地址(169.254.20.10)。 不同集群类型的NodeLocal DNSCache地址如下: CCE Standard集群:169.254.20.10 CCE Turbo集群:169.254.1.1 apiVersion: v1 kind: Pod metadata: name: nginx spec: containers: - image: nginx:alpine name: container-0 dnsConfig: nameservers: - 169.254.20.10 - 10.247.3.10 searches: - default.svc.cluster.local - svc.cluster.local - cluster.local options: - name: ndots value: '2' imagePullSecrets: - name: default-secret
  • 常见问题 如何避免DNSConfig自动注入? 解决方案: 如果某个工作负载需要避免DNSConfig自动注入,可在Pod模板的labels字段中添加node-local-dns-injection: disabled的标签。示例如下: apiVersion: apps/v1 kind: Deployment metadata: name: test namespace: default spec: replicas: 2 selector: matchLabels: app: test template: metadata: labels: app: test node-local-dns-injection: disabled # 避免DNSConfig自动注入 spec: containers: - name: container-1 image: nginx:latest imagePullPolicy: IfNotPresent imagePullSecrets: - name: default-secret
  • 解决方案 为了避免DNS延迟的影响,可以在集群中部署NodeLocal DNSCache来提升服务发现的稳定性和性能。NodeLocal DNSCache会在集群节点上运行DNS缓存代理,所有注入DNS配置的Pod都会使用节点上运行的DNS缓存代理进行域名解析,而不是使用CoreDNS服务,以此来减少CoreDNS服务的压力,提高集群DNS性能。 启用NodeLocal DNSCache之后,DNS查询所遵循的路径如下图所示。 图1 NodeLocal DNSCache查询路径 其中解析线路说明如下: ①:已注入DNS本地缓存的Pod,默认会通过NodeLocal DNSCache解析请求域名。 ②:NodeLocal DNSCache本地缓存如果无法解析请求,则会请求集群CoreDNS进行解析。 ③:对于非集群内的域名,CoreDNS会通过VPC的DNS服务器进行解析。 ④:已注入DNS本地缓存的Pod,如果无法连通NodeLocal DNSCache,则会直接通过CoreDNS解析域名。 ⑤:未注入DNS本地缓存的Pod,默认会通过CoreDNS解析域名。
  • 约束与限制 节点本地域名解析加速插件仅支持1.19及以上版本集群。 CCI上不支持NodeLocal DNSCache。当负载动态弹性伸缩到CCI时,CCI上Pod会因为无法联通NodeLocal DNSCache导致域名解析超时。因此创建弹性到CCI的负载时,需为Pod添加node-local-dns-injection: disabled的标签,避免DNSConfig自动注入,详情请参见常见问题。 node-local-dns-injection标签为NodeLocal DNSCache使用的系统标签,除避免DNSConfig自动注入的场景外,应避免使用该标签。
  • 插件安装 CCE提供了节点本地域名解析加速插件,可以方便的安装NodeLocal DNSCache。 NodeLocal DNSCache不提供Hosts、Rewrite等插件能力,仅作为CoreDNS的透明缓存代理。如有需要,可在CoreDNS配置中修改。 (可选)修改CoreDNS配置,让CoreDNS优先采用UDP协议与上游DNS服务器通信。 NodeLocal DNSCache采用TCP协议与CoreDNS进行通信,CoreDNS会根据请求来源使用的协议与上游DNS服务器进行通信。当使用了NodeLocal DNSCache时,访问上游DNS服务器时会使用TCP协议,而云上DNS服务器对TCP协议支持有限,如果您使用了NodeLocal DNSCache,您需要修改CoreDNS配置,让其总是优先采用UDP协议与上游DNS服务器进行通信,避免解析异常。 执行如下步骤,在forward插件中指定请求上游的协议为perfer_udp,修改之后CoreDNS会优先使用UDP协议与上游通信。 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏中选择“插件中心”,在CoreDNS下单击“编辑”,进入插件详情页。 在“参数配置”下编辑高级配置,在plugins字段修改以下内容。 { "configBlock": "prefer_udp", "name": "forward", "parameters": ". /etc/resolv.conf" } 登录CCE控制台,单击集群名称进入集群,在左侧导航栏中选择“插件中心”,在右侧找到节点本地域名解析加速插件,单击“安装”。 在安装插件页面,选择插件规格,并配置相关参数。 DNSConfig自动注入:启用后,会创建DNSConfig动态注入控制器,该控制器基于Admission Webhook机制拦截目标命名空间(即命名空间包含标签node-localdns-injection=enabled)下Pod的创建请求,自动为Pod配置DNSConfig。未开启DNSConfig自动注入或Pod属于非目标命名空间,则需要手动给Pod配置DNSConfig。 目标命名空间:启用DNSConfig自动注入时支持设置。仅1.3.0及以上版本的插件支持。 全部开启:CCE会为已创建的命名空间添加标签(node-local-dns-injection=enabled),同时会识别命名空间的创建请求并自动添加标签,这些操作的目标不包含系统内置的命名空间(如kube-system)。 手动配置:手动为需要注入DNSConfig的命名空间添加标签(node-local-dns-injection=enabled),操作步骤请参见管理命名空间标签。 完成以上配置后,单击“安装”。
  • 集群升级路径 Autopilot集群基于社区Kubernetes版本迭代演进,版本号由社区Kubernetes版本和补丁版本两部分构成,因此提供两类集群升级路径。 Kubernetes版本升级: Kubernetes版本号 支持升级到的Kubernetes版本号 v1.27 v1.28 v1.28 / 补丁版本需要升级至最新补丁后方可进行Kubernetes版本升级,控制台将根据当前集群版本自动为您生成最佳升级路径。 补丁版本升级 Autopilot集群采取了补丁版本管理策略,旨在不进行大版本升级的情况下,为在维集群提供新的特性、Bugfix和漏洞修复。 新的补丁版本发布以后您可在任意补丁版本一次直升到最新补丁版本。
  • 集群升级流程 集群升级流程包括升级前检查、备份、升级和升级后验证几个步骤,下面介绍集群升级过程中的相关流程。 图1 集群升级流程 在确定集群的目标版本后,请您仔细阅读升级注意事项,避免升级时出现功能不兼容的问题。 升级前检查 升级集群前,CCE会对您的集群进行必要的检查,包括集群状态、插件状态、节点状态、工作负载兼容性等多方面进行检查,确保集群满足升级的条件,检查项目请参考升级前检查异常问题排查。如过出现检查异常项,请参考控制台中的提示进行修复。 备份 通过硬盘快照的方式帮您备份集群控制节点,以保存CCE组件镜像、组件配置、Etcd数据等关键数据。建议您在升级前进行备份。如果在升级过程中出现不可预期的情况,可以基于备份为您快速恢复集群。 备份方式 备份对象 备份方式 备份时间 回滚时间 说明 etcd数据备份 etcd数据 升级流程中自动备份 1-5min 2h 必选备份,升级过程中自动进行,用户无需关注 CBR整机备份 Master节点磁盘,包括组件镜像、配置、日志以及etcd数据 通过页面一键备份(手动触发) 20min-2h(受当前区域云备份任务排队情况影响) 20min 该功能逐步由EVS快照备份替代 EVS快照备份 Master节点磁盘,包括组件镜像、配置、日志以及etcd数据 通过页面一键备份(手动触发) 1-5min 20min 该功能上线中 对于已上线的区域,EVS快照备份将替代CBR整机备份 配置与升级 执行升级前,需要对升级参数进行配置,我们已为您提供了默认配置,您也可以根据需要进行配置,升级参数配置完成后,将进入正式升级流程,对插件、控制节点、托管节点依次进行升级。 插件升级配置:此处列出了您的集群中已安装的插件。在集群升级过程中系统会自动升级已选择的插件,以兼容升级后的集群版本,您可以单击插件右侧的“配置”重新定义插件参数。 插件右侧如有标记,表示当前插件不能同时兼容集群升级起始和目标版本,在集群版本升级完成后将为您升级该插件 ,该插件在集群升级过程中可能无法正常使用。 升级后验证 升级完成后,会自动为集群执行集群状态检查、节点状态检查等,您需要手动进行业务验证、新建Pod验证等,确保升级后集群功能正常。
  • 通过控制台使用 登录CCE控制台,单击集群名称进入集群。 动态创建存储卷声明和存储卷。 在左侧导航栏选择“存储”,在右侧选择“存储卷声明”页签。单击右上角“创建存储卷声明 PVC”,在弹出的窗口中填写存储卷声明参数。 “存储卷声明类型”选择“云硬盘”,并开启加密,并选择密钥。其余参数可根据情况按需填写,详情请参见通过动态存储卷使用云硬盘。 图1 加密存储卷 单击“创建”。 前往“存储卷声明”页面,查看加密云硬盘存储卷声明是否创建成功,并查看存储配置项是否显示已加密。 图2 PVC加密 在应用中使用加密PVC时,和使用普通PVC的方法一致。
  • 版本记录 表7 CoreDNS域名解析插件版本记录 插件版本 支持的集群版本 更新特性 社区版本 1.29.4 v1.21 v1.23 v1.25 v1.27 v1.28 v1.29 适配CCE v1.29集群 1.10.1 1.28.7 v1.21 v1.23 v1.25 v1.27 v1.28 支持插件热更新配置,无需滚动升级 1.10.1 1.28.5 v1.21 v1.23 v1.25 v1.27 v1.28 修复部分问题 1.10.1 1.28.4 v1.21 v1.23 v1.25 v1.27 v1.28 适配CCE v1.28集群 1.10.1 1.27.4 v1.19 v1.21 v1.23 v1.25 v1.27 - 1.10.1 1.27.1 v1.19 v1.21 v1.23 v1.25 v1.27 适配CCE v1.27集群 1.10.1 1.25.1 v1.19 v1.21 v1.23 v1.25 适配CCE v1.25集群 1.8.4 1.23.3 v1.15 v1.17 v1.19 v1.21 v1.23 插件依赖例行升级 1.8.4 1.23.2 v1.15 v1.17 v1.19 v1.21 v1.23 插件依赖例行升级 1.8.4 1.23.1 v1.15 v1.17 v1.19 v1.21 v1.23 适配CCE v1.23集群 1.8.4 1.17.15 v1.15 v1.17 v1.19 v1.21 适配CCE v1.21集群 1.8.4 1.17.9 v1.15 v1.17 v1.19 插件依赖例行升级 1.8.4 1.17.7 v1.15 v1.17 v1.19 同步至社区v1.8.4版本 1.8.4 1.17.4 v1.17 v1.19 适配CCE v1.19集群 1.6.5 1.17.3 v1.17 支持v1.17集群,修复存根域配置问题 1.6.5 1.17.1 v1.17 支持v1.17集群 1.6.5
  • 插件简介 CoreDNS域名解析插件是一款通过链式插件的方式为Kubernetes提供域名解析服务的DNS服务器。 CoreDNS是由CNCF孵化的开源软件,用于Cloud-Native环境下的DNS服务器和服务发现解决方案。CoreDNS实现了插件链式架构,能够按需组合插件,运行效率高、配置灵活。在Kubernetes集群中使用CoreDNS能够自动发现集群内的服务,并为这些服务提供域名解析。同时,通过级联云上DNS服务器,还能够为集群内的工作负载提供外部域名的解析服务。 该插件为系统资源插件,在创建集群时默认安装。 目前CoreDNS已经成为社区Kubernetes集群推荐的DNS服务器解决方案。 CoreDNS官网:https://coredns.io/ 开源社区地址:https://github.com/coredns/coredns DNS详细使用方法请参见DNS。
  • 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。 图1 路由请求流程
  • 可观测性(监控中心、日志中心、告警中心)如何收费? 免费场景 监控中心自身免费使用,监控中心所使用的指标都上报并存储在AOM服务,其中在AOM范畴内的基础指标不收费,存储时长15天(暂不支持修改)。详情请参见基础指标。 日志中心自身免费使用,集群内产生的日志都上报并存储在LTS服务,云日志服务的计费项由日志读写流量、日志索引流量、日志存储量的费用组成(有500MB/月的免费额度)。 告警中心自身免费使用,集群内产生的告警由SMN消息通知服务进行推送,在短信数量小于100/条/月、邮件数量小于1000/封/月的,推送免费。其中短信条数计算规则请参见短信内容长度计算规则。 收费场景 监控中心:集群内配置的除基础指标以外的自定义指标(基础指标不收费)会根据AOM的收费规则进行收费。详情请参见计费项。 日志中心:对超出每月免费限额(500MB/月)的日志读写、日志索引流量、日志存储量进行收费。详情请参见LTS服务的收费标准。 告警中心:告警中心依赖SMN消息通知服务对告警进行推送,联系组当前只支持短信和邮件,超过SMN免费范围(短信数量小于100/条/月、邮件数量小于1000/封/月的,推送免费)的将会收费。详情请参见SMN计费说明。
  • 通过配置项设置工作负载环境变量 使用控制台方式 登录CCE控制台,单击集群名称进入集群。 在左侧导航栏选择“工作负载”,单击右上角“创建工作负载”。 在创建工作负载时,在“容器配置”中找到“环境变量”,单击“新增变量”。 配置项导入:选择一个配置项,将配置项中所有键值都导入为环境变量。 配置项键值导入:将配置项中某个键的值导入作为某个环境变量的值。 变量名称:工作负载中的环境变量名称,可自定义,默认为配置项中选择的键名。 变量/变量引用:选择一个配置项及需要导入的键名,将其对应的值导入为工作负载环境变量。 例如将cce-configmap这个配置项中“SPECIAL_LEVEL”的值“Hello”导入,作为工作负载环境变量“SPECIAL_LEVEL”的值,导入后容器中有一个名为“SPECIAL_LEVEL”的环境变量,其值为“Hello”。 配置其他工作负载参数后,单击“创建工作负载”。 等待工作负载正常运行后,您可登录容器执行以下语句,查看该配置项是否已被设置为工作负载的环境变量。 printenv SPECIAL_LEVEL 示例输出如下: Hello 使用kubectl方式 请参见通过kubectl连接集群配置kubectl命令。 创建并编辑nginx-configmap.yaml文件。 vi nginx-configmap.yaml YAML文件内容如下: 配置项导入:如果要将一个配置项中所有数据都添加到环境变量中,可以使用envFrom参数,配置项中的Key会成为工作负载中的环境变量名称。 apiVersion: apps/v1 kind: Deployment metadata: name: nginx-configmap spec: replicas: 1 selector: matchLabels: app: nginx-configmap template: metadata: labels: app: nginx-configmap spec: containers: - name: container-1 image: nginx:latest envFrom: # 使用envFrom来指定环境变量引用的配置项 - configMapRef: name: cce-configmap # 引用的配置项名称 imagePullSecrets: - name: default-secret 配置项键值导入:您可以在创建工作负载时将配置项设置为环境变量,使用valueFrom参数单独引用ConfigMap中的Key/Value。 apiVersion: apps/v1 kind: Deployment metadata: name: nginx-configmap spec: replicas: 1 selector: matchLabels: app: nginx-configmap template: metadata: labels: app: nginx-configmap spec: containers: - name: container-1 image: nginx:latest env: # 设置工作负载中的环境变量 - name: SPECIAL_LEVEL # 工作负载中的环境变量名称 valueFrom: # 使用valueFrom来指定环境变量引用配置项 configMapKeyRef: name: cce-configmap # 引用的配置项名称 key: SPECIAL_LEVEL # 引用的配置项中的key - name: SPECIAL_TYPE # 添加多个环境变量参数,可同时导入多个环境变量 valueFrom: configMapKeyRef: name: cce-configmap key: SPECIAL_TYPE imagePullSecrets: - name: default-secret 创建工作负载。 kubectl apply -f nginx-configmap.yaml 创建完成后,查看Pod中的环境变量。 执行以下命令,查看已创建的Pod。 kubectl get pod | grep nginx-configmap 预期输出如下: nginx-configmap-*** 1/1 Running 0 2m18s 执行以下命令,查看该Pod中的环境变量。 kubectl exec nginx-configmap-*** -- printenv SPECIAL_LEVEL SPECIAL_TYPE 预期输出如下: Hello CCE 说明该配置项已被设置为工作负载的环境变量。
  • 指标清单 XGPU视图使用的指标清单如下: 表2 XGPU指标说明 指标名称 类型 说明 xgpu_memory_total Gauge XGPU显存总量 xgpu_memory_used Gauge XGPU显存使用量 xgpu_core_percentage_total Gauge XGPU算力总量 xgpu_core_percentage_used Gauge XGPU算力使用率 gpu_schedule_policy Gauge GPU模式分成0、1、2三种,具体说明如下: 0为显存隔离算力共享模式 1为显存算力隔离模式 2为默认模式表示当前卡还没被用于XGPU设备分配 xgpu_device_health Gauge XGPU设备的健康情况。当前虚拟化域侧并没有提供特定的接口来检查XGPU的健康情况,所以根据XGPU设备所在物理GPU设备的健康情况反推。0表示XGPU设备为健康状态,1表示为非健康状态。
  • 指标说明 图1 XGPU资源指标 表1 XGPU视图图表说明 图表名称 单位 说明 集群-XGPU设备显存使用率 百分比 集群的GPU虚拟化设备显存使用率 计算公式:集群中所有XGPU设备的显存使用量之和 / 集群显存总量 集群-XGPU设备算力使用率 百分比 集群的GPU虚拟化设备算力使用率 计算公式:集群中所有XGPU设备的算力使用量之和 / 集群算力总量 节点-XGPU设备显存使用率 百分比 每个节点的GPU虚拟化设备显存使用率 计算公式:节点上所有XGPU设备的显存使用量之和 / 节点显存总量 节点-XGPU设备算力使用率 百分比 每个节点的GPU虚拟化设备算力使用率 计算公式:节点上所有XGPU设备的算力使用量之和 / 节点算力总量 节点-XGPU设备数量 个 每个节点的GPU虚拟化设备数量 节点-XGPU设备显存分配量 字节 每个节点上的GPU虚拟化设备显存总量 GPU卡-XGPU设备显存使用率 百分比 每张GPU卡上的GPU虚拟化设备显存使用率 计算公式:显卡上所有XGPU设备的显存使用量之和 / 显卡显存总量 GPU卡-XGPU设备显存分配量 字节 每张GPU卡上的GPU虚拟化设备的显存总量 GPU卡-XGPU设备显存分配率 百分比 每张GPU卡上的GPU虚拟化设备的显存总量占这张GPU卡显存总量的比例 计算公式:显卡上所有XGPU设备能使用的显存上限之和 / 显卡显存总量 GPU卡-XGPU设备算力使用率 百分比 每张GPU卡的GPU虚拟化设备的算力使用率 计算公式:显卡上所有XGPU设备当前所使用的算力之和 / 显卡算力总量 GPU卡-XGPU设备数量 个 每张GPU卡的GPU虚拟涉笔的数量 GPU卡-调度策略 数字 0为显存隔离算力共享模式 1为显存算力隔离模式 2为默认模式表示当前卡还没被用于XGPU设备分配 GPU卡-不健康的XGPU设备数量 个 每张GPU卡的不健康的GPU虚拟化设备的数量 容器显存分配量 字节 容器所能使用的显存上限 容器算力使用率 百分比 每个容器的算力使用率 计算公式:XGPU设备上容器算力使用量 / XGPU设备算力总量 容器显存使用量 字节 每个容器的显存使用量 容器显存使用率 百分比 每个容器的显存使用率 计算公式:XGPU设备上容器显存使用量 / XGPU设备显存总量
  • 获取驱动链接-公网地址 登录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驱动支持列表仅针对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
  • 验证插件 插件安装完成后,在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驱动的场景,请您自行验证。
  • 访问Grafana Prometheus插件同时安装了Grafana(一款开源可视化工具),并且与Prometheus进行了对接。您可以创建一个公网LoadBalancer类型Service,这样就可以从公网访问Grafana,从Grafana中看到Prometheus的监控数据。 单击访问地址,访问Grafana,选择合适的DashBoard,即可以查到相应的聚合内容。 登录CCE控制台,选择一个已安装Prometheus插件的集群,在左侧导航栏中选择“服务”。 单击右上角“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,即可查看GPU资源状态。 图4 查看GPU虚拟化资源
  • 监控GPU指标 创建一个使用GPU的工作负载,等工作负载正常运行后,访问Prometheus,在“Graph”页面中,查看GPU指标。 图3 查看GPU监控指标 表1 GPU基础监控指标 类型 指标 监控级别 说明 利用率指标 cce_gpu_utilization GPU卡 GPU卡算力使用率 cce_gpu_memory_utilization GPU卡 GPU卡显存使用率 cce_gpu_encoder_utilization GPU卡 GPU卡编码使用率 cce_gpu_decoder_utilization GPU卡 GPU卡解码使用率 cce_gpu_utilization_process GPU进程 GPU各进程算力使用率 cce_gpu_memory_utilization_process GPU进程 GPU各进程显存使用率 cce_gpu_encoder_utilization_process GPU进程 GPU各进程编码使用率 cce_gpu_decoder_utilization_process GPU进程 GPU各进程解码使用率 内存指标 cce_gpu_memory_used GPU卡 GPU显存使用量 cce_gpu_memory_total GPU卡 GPU显存总量 cce_gpu_memory_free GPU卡 GPU显存空闲量 cce_gpu_bar1_memory_used GPU卡 GPU bar1 内存使用量 cce_gpu_bar1_memory_total GPU卡 GPU bar1 内存总量 频率 cce_gpu_clock GPU卡 GPU时钟频率 cce_gpu_memory_clock GPU卡 GPU显存频率 cce_gpu_graphics_clock GPU卡 GPU图形处理器频率 cce_gpu_video_clock GPU卡 GPU视频处理器频率 物理状态数据 cce_gpu_temperature GPU卡 GPU温度 cce_gpu_power_usage GPU卡 GPU功率 cce_gpu_total_energy_consumption GPU卡 GPU总能耗 带宽数据 cce_gpu_pcie_link_bandwidth GPU卡 GPU PCIE 带宽 cce_gpu_nvlink_bandwidth GPU卡 GPU nvlink 带宽 cce_gpu_pcie_throughput_rx GPU卡 GPU PCIE 接收带宽 cce_gpu_pcie_throughput_tx GPU卡 GPU PCIE 发送带宽 cce_gpu_nvlink_utilization_counter_rx GPU卡 GPU nvlink 接收带宽 cce_gpu_nvlink_utilization_counter_tx GPU卡 GPU nvlink 发送带宽 隔离内存页面 cce_gpu_retired_pages_sbe GPU卡 GPU单比特错误隔离页数量 cce_gpu_retired_pages_dbe GPU卡 GPU双比特错误隔离页数量 表2 GPU虚拟化监控指标 指标 监控级别 说明 xgpu_memory_total GPU进程 GPU虚拟化显存总量。 xgpu_memory_used GPU进程 GPU虚拟化显存使用量。 xgpu_core_percentage_total GPU进程 GPU虚拟化算力总量。 xgpu_core_percentage_used GPU进程 GPU虚拟化算力使用量。 gpu_schedule_policy GPU卡 GPU虚拟化分三种模式: 0:显存隔离算力共享模式 1:显存算力隔离模式 2:默认模式,表示当前卡还没被用于GPU虚拟化设备分配。 xgpu_device_health GPU卡 GPU虚拟化设备的健康情况。 0:表示GPU虚拟化设备为健康状态。 1:表示GPU虚拟化设备为非健康状态。
  • 安装步骤 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,在右侧找到Kubernetes Dashboard插件,单击“安装”。 在参数配置页面,配置以下参数。 访问方式:支持“节点访问”,通过集群节点绑定的弹性公网IP进行访问,当集群节点未绑定弹性IP时无法正常使用。 证书配置:dashboard服务端使用的证书。 使用自定义证书 您需要参考样例填写pem格式的“证书文件”和“证书私钥”。 使用默认证书 dashboard默认生成的证书不合法,将影响浏览器正常访问,建议您选择手动上传合法证书,以便通过浏览器校验,保证连接的安全性。 单击“安装”。
  • 权限修改 安装Dashboard插件后初始角色仅拥有对大部分资源的只读权限,若想让Dashboard界面支持更多操作,需自行在后台对RBAC相关资源进行修改。 具体修改方式: 可对名为“kubernetes-dashboard-minimal”这个ClusterRole中的规则进行调整。 关于使用RBAC的具体细节可参看文档:https://kubernetes.io/docs/reference/access-authn-authz/rbac/。
  • 访问dashboard 登录CCE控制台,单击集群名称进入集群,单击左侧导航栏的“插件中心”,确认dashboard插件状态为“运行中”后,单击“访问”。 在CCE控制台弹出的窗口中复制token。 在登录页面中选择“令牌”的登录方式,粘贴输入复制的token,单击“登录”按钮。 本插件默认不支持使用证书认证的kubeconfig进行登录,推荐使用令牌方式登录。详细信息请参考:https://github.com/kubernetes/dashboard/issues/2474#issuecomment-348912376 图1 令牌方式登录 登录后效果,如图2。 图2 Dashboard概览页
  • 附:访问报错解决方法 使用Chrome浏览器访问时,会出现如下“ERR_CERT_INVALID”的报错导致无法正常进入登录界面,原因是dashboard默认生成的证书未通过Chrome校验,当前有以下两种解决方式: 图3 Chrome浏览器报错信息 方式一:使用火狐浏览器访问链接,为当前地址添加“例外”后即可进入登录页面。 方式二:通过启动Chrome时添加“--ignore-certificate-errors”开关忽略证书报错。 Windows:保存链接地址,关闭所有已经打开的Chrome浏览器窗口,Windows键 +“R”弹出“运行”对话框,输入“chrome --ignore-certificate-errors”启动新的chrome窗口,输入地址进入登录界面。
  • 插件简介 Kubernetes Dashboard是一个旨在为Kubernetes世界带来通用监控和操作Web界面的项目,集合了命令行可以操作的所有命令。 使用Kubernetes Dashboard,您可以: 向Kubernetes集群部署容器化应用 诊断容器化应用的问题 管理集群的资源 查看集群上所运行的应用程序 创建、修改Kubernetes上的资源(例如Deployment、Job、DaemonSet等) 展示集群上发生的错误 例如:您可以伸缩一个Deployment、执行滚动更新、重启一个Pod或部署一个新的应用程序。 开源社区地址:https://github.com/kubernetes/dashboard 由于Kubernetes Dashboard社区目前还未正式发布支持v1.27版本集群的插件,v1.27集群中暂不支持安装该插件。待社区发布稳定版本后,CCE将会尽快提供配套插件,并确保与最新版本的CCE兼容。
  • 版本记录 表2 Kubernetes Dashboard插件版本记录 插件版本 支持的集群版本 更新特性 社区版本 2.2.27 v1.21 v1.23 v1.25 修复部分问题 2.7.0 2.2.7 v1.21 v1.23 v1.25 - 2.7.0 2.2.5 v1.21 v1.23 v1.25 插件与节点时区一致 2.7.0 2.2.3 v1.21 v1.23 v1.25 - 2.7.0 2.1.1 v1.19 v1.21 v1.23 适配CCE v1.23集群 更新至社区v2.5.0版本 2.5.0 2.0.10 v1.15 v1.17 v1.19 v1.21 适配CCE v1.21集群 2.0.0 2.0.4 v1.15 v1.17 v1.19 配置seccomp默认规则 2.0.0 2.0.3 v1.15 v1.17 v1.19 兼容CCE v1.15集群 2.0.0 2.0.2 v1.17 v1.19 适配CCE v1.19集群 2.0.0 2.0.1 v1.15 v1.17 支持鲲鹏集群 2.0.0 2.0.0 v1.17 支持对接CCE v1.17 2.0.0
共100000条