From 01ff9b7ef136f8ab2c943c0ae10809517e57ae46 Mon Sep 17 00:00:00 2001 From: Lis Date: Tue, 28 Sep 2021 15:17:24 +0800 Subject: [PATCH] docs: update gpu doc (#1609) --- ...53\351\200\237\345\205\245\351\227\250.md" | 102 +++++++++--------- docs/guide/zh-CN/products/platform/cluster.md | 46 ++++---- hack/addon/readme/GPUManager.md | 39 ++++--- 3 files changed, 101 insertions(+), 86 deletions(-) diff --git "a/docs/guide/zh-CN/QuickStart/\345\277\253\351\200\237\345\205\245\351\227\250.md" "b/docs/guide/zh-CN/QuickStart/\345\277\253\351\200\237\345\205\245\351\227\250.md" index 8580b39c9..f8e1075e0 100644 --- "a/docs/guide/zh-CN/QuickStart/\345\277\253\351\200\237\345\205\245\351\227\250.md" +++ "b/docs/guide/zh-CN/QuickStart/\345\277\253\351\200\237\345\205\245\351\227\250.md" @@ -41,39 +41,39 @@ TKEStack 还可以通过此处的蓝色按钮:**【新建独立集群】**和* + **高可用类型** :高可用 VIP 地址(**按需使用**) > 注意:如果使用高可用,至少需要三个 master 节点才可组成高可用集群,否则会出现 ***脑裂*** 现象。 - + - **不设置**:第一台 master 节点的 IP 地址作为 APIServer 地址 - **TKE 提供**:用户只需提供高可用的 IP 地址。TKE 部署 Keepalive,配置该 IP 为 Global 集群所有 Master 节点的VIP,以实现 Global 集群和控制台的高可用,此时该 VIP 和所有 Master 节点 IP 地址都是 APIServer 地址 - **使用已有**:对接配置好的外部 LB 实例。VIP 绑定 Global 集群所有 Master 节点的 80(TKEStack 控制台)、443(TKEStack 控制台)、6443(kube-apiserver 端口)、31138(tke-auth-api 端口)端口,同时确保该 VIP 有至少两个 LB 后端(Master 节点),以避免 LB 单后端不可用风险 + **GPU**:选择是否安装 GPU 相关依赖。(**按需使用**) - + > 注意:使用 GPU 首先确保节点有物理 GPU 卡,选择 GPU 类型后,平台将自动为节点安装相应的 GPU 驱动和运行时工具 - - + **pGPU**:平台会自动为集群安装 [GPUManager](https://github.com/tkestack/docs/blob/master/features/gpumanager.md) 扩展组件,此时可以给负载分配任意整数张卡 - + **vGPU**:平台会自动为集群安装 [Nvidia-k8s-device-plugin](https://github.com/NVIDIA/k8s-device-plugin),此时GPU可以被虚拟化,可以给负载分配非整数张GPU卡,例如可以给一个负载分配0.3个GPU - + + + **vGPU**:平台会自动为集群安装 [GPUManager](https://github.com/tkestack/docs/blob/master/features/gpumanager.md) 扩展组件,此时GPU可以被虚拟化,可以给负载分配非整数张GPU卡,例如可以给一个负载分配0.3个GPU + + **pGPU**:平台会自动为集群安装 [Nvidia-k8s-device-plugin](https://github.com/NVIDIA/k8s-device-plugin),此时可以给负载分配任意整数张卡 + + **容器网络** :将为集群内容器分配在容器网络地址范围内的 IP 地址,您可以自定义三大私有网段作为容器网络, 根据您选择的集群内服务数量的上限,自动分配适当大小的 CIDR 段用于 kubernetes service;根据您选择 Pod 数量上限/节点,自动为集群内每台云服务器分配一个适当大小的网段用于该主机分配 Pod 的 IP 地址。(**建议使用默认值**) + **CIDR:** 集群内 Sevice、 Pod 等资源所在网段,注意:CIDR不能与目标机器IP段重叠, 否则会造成初始化失败 + **Pod数量上限/节点:** 决定分配给每个 Node 的 CIDR 的大小 + **Service数量上限/集群**:决定分配给 Sevice 的 CIDR 大小 - + + **Master** :输入目标机器信息后单击保存,**若保存按钮是灰色,单击网页空白处即可变蓝** - + > 注意:如果在之前选择了高可用,至少需要三个 master 节点才可组成高可用集群,否则会出现 ***脑裂*** 现象。 - + + **目标机器**:Master 节点**内网 IP**,请配置**至少 8 Cores & 16G内存** 及以上的机型,**否则会部署失败**。注意:如上图所示,如果节点密码一样,这里可以通过英文的分号“;”分隔多个IP地址实现快速添加多个节点 + **SSH端口**: 请确保目标机器安全组开放 22 端口和 ICMP 协议,否则无法远程登录和 PING 云服务器。(**建议使用默认值22**) + **主机label**:给主机设置Label,可用于指定容器调度。(**按需使用**) + **认证方式**:连接目标机器的方式 - + + **密码认证**: + **密码**:目标机器密码 + **密钥认证**: + **私钥**:目标机器秘钥 + **私钥密码**:目标机器私钥密码,可选填 + **GPU**: 使用GPU机器需提前安装驱动和runtime。(**按需使用**) - + > **添加机器**:可以通过节点下面的**【添加】**蓝色字体增加不同密码的master节点(**按需添加**) 5. **提交**: 集群信息填写完毕后,【提交】按钮变为可提交状态,单击即可提交 @@ -89,7 +89,7 @@ TKEStack 还可以通过此处的蓝色按钮:**【新建独立集群】**和* - **API Server**: 被导入集群的API server的域名或IP地址 - **CertFile**: 输入被导入集群的 CertFile 文件内容 - **Token**: 输入被导入集群创建时的 token 值 -5. 单击最下方 【提交】 按钮 +5. 单击最下方 【提交】 按钮 #### TKEStack 导入腾讯的 TKE 集群 @@ -136,11 +136,11 @@ TKEStack 还可以通过此处的蓝色按钮:**【新建独立集群】**和* ```shell kubectl create -f admin-role.yaml ``` - + 3. 创建完成后获取 Secret 中token的值 ```shell - + ``` # 获取admin-token的secret名字 $ kubectl -n kube-system get secret|grep admin-token @@ -150,9 +150,9 @@ TKEStack 还可以通过此处的蓝色按钮:**【新建独立集群】**和* Name: admin-token-w4wcd Type: kubernetes.io/service-account-token token: 非常长的字符串 - + ``` - + ``` #### TKEStack 中导入 Rancher 的 RKE 集群 @@ -202,12 +202,12 @@ TKEStack 独创的概念,业务可以实现跨集群资源的分配与使用 2. 在【平台管理】控制台的【业务管理】中,单击【业务ID】,如下图所示: ![业务id](../../../images/businessid.png) - + 3. 单击【Namespace列表】,如下图标签1所示: > 该页面可以更改业务名称、成员、以及业务下集群资源的限制。 - + ![命名空间列表](../../../images/businessns.png) - + 4. 单击【新建Namespace】,如下图所示: ![新建空间列表](../../../images/newns.png) @@ -231,18 +231,18 @@ TKEStack 独创的概念,业务可以实现跨集群资源的分配与使用 4. 单击上图标签6【新建】,进入“新建 Workload ”页面。根据实际需求,设置 Deployment 参数。这里参数很多,其中必填信息已用红框标识: ![](../../../images/createDeployment-1.png) - + - **工作负载名**:输入自定义名称,这里以`my-dep`为例 - + - **描述**:给工作负载添加描述,可不填 - + - **标签**:给工作负载添加标签,通过工作负载名默认生成 - + - **命名空间**:根据实际需求进行选择 - + - **类型**:选择【Deployment(可扩展的部署 Pod)】 ![](../../../images/createDeployment-2.png) - + - **数据卷(选填)**:即 [Volume](https://kubernetes.io/zh/docs/concepts/storage/volumes/) ,为容器提供存储。如需指定容器挂载至指定路径时,单击【添加数据卷】 > **数据卷的名称**:给数据卷一个名称,以方便容器使用数据卷 * **临时目录**:主机上的一个临时目录,生命周期和 Pod 一致 @@ -251,55 +251,55 @@ TKEStack 独创的概念,业务可以实现跨集群资源的分配与使用 * **ConfigMap**:用户选择在业务 Namespace 下的 [ConfigMap](../products/business-control-pannel/application/configurations/ConfigMap.md) * **Secret**:用户选择在业务 Namespace 下的 [Secret](../products/business-control-pannel/application/configurations/secret.md) * **PVC**:用户选择在业务 Namespace 下的 [PVC](../products/business-control-pannel/application/storage/persistent-volume-claim.md) - + - **实例内容器**:根据实际需求,为 Deployment 的 Pod 设置一个或多个不同的容器,如下图所示: - + ![](../../../images/createDeployment-3.png) - + * **名称**:自定义,这里以`my-container`为例 - + * **镜像**:根据实际需求进行选择,这里以`nginx`为例 - + * **镜像版本(Tag)**:根据实际需求进行填写,不填默认为`latest` - + * **CPU/内存限制**:可根据 [Kubernetes 资源限制](https://kubernetes.io/docs/concepts/configuration/manage-compute-resources-container/) 进行设置 CPU 和内存的限制范围,提高业务的健壮性(**建议使用默认值**) * **Request**:用于预分配资源,当集群中的节点没有request所要求的资源数量时,容器会创建失败 * **Limit**:用于设置容器使用资源的最大上限,避免异常情况下节点资源消耗过多 - + * **GPU限制**:如容器内需要使用GPU,此处填GPU需求 - + > 前提:节点有 GPU,并安装了 GPU 组件 - + * **环境变量**:用于设置容器内的变量,变量名只能包含大小写字母、数字及下划线,并且不能以数字开头 * **自定义**:自己设定变量键值对 * **引用ConfigMap/Secret**:引用已有键值对 * **Field**:自己设定变量名,变量值从负载的 YAML 文件中获取 metadata、spec、status数值 * **ResourceFiled**:自己设定变量名,变量值从负载的 YAML 文件中获取 limit 和 request 数值 - + * **高级设置**:可设置 “**工作目录**”、“**运行命令**”、“**运行参数**”、“**镜像更新策略**”、“**容器健康检查**”和“**特权级**”等参数。(按需使用) * **工作目录**:指定容器运行后的工作目录 * **日志目录**:指定容器运行后的[日志目录](../products/business-control-pannel/operation/logcollect.md/#指定容器运行后的日志目录) > 1. 需要首先启用集群的 日志采集 功能 > 2. 需要在创建爱你应用时挂载数据盘 * **运行命令**:控制容器运行的输入命令,这里可以输入多条命令,注意每个命令单独一行 - * **运行参数**:传递给容器运行命令的输入参数,这里可以输入多条参数,注意每个参数单独一行 - * **镜像更新策略**:提供以下3种策略,请按需选择,若不设置镜像拉取策略,当镜像版本为空或 `latest` 时,使用 Always 策略,否则使用 IfNotPresent 策略 + * **运行参数**:传递给容器运行命令的输入参数,这里可以输入多条参数,注意每个参数单独一行 + * **镜像更新策略**:提供以下3种策略,请按需选择,若不设置镜像拉取策略,当镜像版本为空或 `latest` 时,使用 Always 策略,否则使用 IfNotPresent 策略 * **Always**:总是从远程拉取该镜像 - * **IfNotPresent**:默认使用本地镜像,若本地无该镜像则远程拉取该镜像 + * **IfNotPresent**:默认使用本地镜像,若本地无该镜像则远程拉取该镜像 * **Never**:只使用本地镜像,若本地没有该镜像将报异常 - + * **容器健康检查** * **存活检查**:检查容器是否正常,不正常则重启实例。对于多活无状态的应用采用了存活探针 TCP 探测方式。存活探针组件包括 Gate、Keystone、Webshell、Nginx、Memcache 当连续探测容器端口不通,探针失败时,杀掉容器并重启 * **就绪检查**:检查容器是否就绪,不就绪则停止转发流量到当前实例。对于一主多备的服务采用就绪探针 TCP 探测方式,当探针失败时,将实例从 Service Endpoints 中移除。业务各个组件内部通过Kube-DNS访问CVM-Agent,就绪探针可以保证处于备机状态的 CVM 实例不存在于 Service Endpoints 中,并且将流量转发至主 CVM-Agent 上,从而保证服务的高可用 - - * **特权级容器**:容器开启特权级,将拥有宿主机的root权限 + + * **特权级容器**:容器开启特权级,将拥有宿主机的root权限 * **权限集-增加**:增加权限集 * **权限集-删除**:减少权限集 - + * **实例数量**:根据实际需求选择调节方式,设置实例数量。 ![](../../../images/createDeployment-4.png) - **手动调节**:直接设定实例个数 - - **自动调节**:将新建与负载同名的 HPA 资源对象,根据设定的触发条件自动调节实例个数,目前支持根据 CPU、内存利用率等调节实例个数,更多请参考 [HPA](../products/business-control-pannel/application/autoscale/HPA.md) + - **自动调节**:将新建与负载同名的 HPA 资源对象,根据设定的触发条件自动调节实例个数,目前支持根据 CPU、内存利用率等调节实例个数,更多请参考 [HPA](../products/business-control-pannel/application/autoscale/HPA.md) - **定时调节**:将新建与负载同名的 CronHPA 资源对象,根据 [Crontab](https://baike.baidu.com/item/crontab) 语法周期性设置实例个数。前提:在[【扩展组件】](../products/platform/extender.md)里安装 CronHPA,更多请参考 [CronHPA](../../../../hack/addon/readme/CronHPA.md) * **显示高级设置**:点击后出现以下选项 * **imagePullSecrets**:镜像拉取密钥,用于拉取用户的私有镜像,使用私有镜像首先需要新建Secret。如果是公有镜像,即支持匿名拉取,则可以忽略此步骤。 @@ -310,30 +310,30 @@ TKEStack 独创的概念,业务可以实现跨集群资源的分配与使用 - **强制满足条件**:调度期间如果满足亲和性条件则调度到对应node,如果没有节点满足条件则调度失败 - **尽量满足条件**:调度期间如果满足亲和性条件则调度到对应node,如果没有节点满足条件则随机调度到任意节点 * **注释(Annotations)**:给 deployment 添加相应 Annotation,如用户信息等 - + * **网络模式**:选择Pod网络模式 * **OverLay(虚拟网络)**:基于 IPIP 和 Host Gateway 的 Overlay 网络方案,每个实例拥有一个虚拟IP,集群外无法直接访问该IP * **FloatingIP(浮动 IP)**:为每个实例分配物理 IP,外部可直接访问。支持容器、物理机和虚拟机在同一个扁平面中直接通过IP进行通信的 Underlay 网络方案。提供了 IP 漂移能力,**支持 Pod 重启或迁移时 IP 不变**,跨机器迁移,实例ip也不会发生变化 * **NAT(端口映射)**:Kubernetes 原生 NAT 网络方案,实例的端口映射到物理机的某个端口,但 IP 还是虚拟 IP ,可通过宿主机 IP 和映射端口访问,即 Pod 的容器中指定了 [hostPorts](https://kubernetes.io/zh/docs/concepts/policy/pod-security-policy/#host-namespaces) * **Host(主机网络)**:Kubernetes 原生 Host 网络方案,可以直接采用宿主机 IP 和端口,即 Pod 的 [hostNetwork=true](https://kubernetes.io/zh/docs/concepts/policy/pod-security-policy/#host-namespaces) - + * **创建Service(可选)**: ![](../../../images/createDeployment-5.png) - + - **Service**:勾选【启用】按钮,配置负载端口访问,将会创建于负载同名的 Service,更多请参考 [Service](../products/business-control-pannel/application/services/service.md)(按需使用) - + > 注意:如果不勾选【启用】则不会创建 Service - + - **服务访问方式**:选择是【仅在集群内部访问】该负载还是集群外部通过【主机端口访问】该负载 - + - **仅在集群内访问**:使用 Service 的 ClusterIP 模式,自动分配 Service 网段中的 IP,用于集群内访问。数据库类等服务如 MySQL 可以选择集群内访问,以保证服务网络隔离 - **主机端口访问**:提供一个主机端口映射到容器的访问方式,支持 TCP、UDP、Ingress。可用于业务定制上层 LB 转发到 Node - **Headless Service**:不创建用于集群内访问的 ClusterIP,访问 Service 名称时返回后端 `Pods IP:port`,用于适配自有的服务发现机制 - + - **端口映射**:输入负载要暴露的端口并指定通信协议类型(**容器和服务端口建议都使用80**) - **Session Affinity:** 点击【显示高级设置】出现,表示会话保持。Service 有负载均衡的作用,有两种模式:RoundRobin 和 SessionAffinity(默认 None,按需使用) - + - ClientIP:基于客户端 IP 地址进行会话保持的模式, 即第1次将某个客户端发起的请求转发到后端的某个 Pod 上,之后从相同的客户端发起的请求都将被转发到后端相同的 Pod 上。即 Service 启用了 Session Affinity 负载分发策略。 - Node:此时 Service 使用默认的 RoundRobin(轮询模式)进行负载分发,即轮询将请求转发到后端的各个 Pod 上。 diff --git a/docs/guide/zh-CN/products/platform/cluster.md b/docs/guide/zh-CN/products/platform/cluster.md index 100e16e83..bfb794517 100644 --- a/docs/guide/zh-CN/products/platform/cluster.md +++ b/docs/guide/zh-CN/products/platform/cluster.md @@ -31,41 +31,41 @@ TKEStack还可以另外**新建独立集群**以及**导入已有集群**实现* ![企业微信截图_ac96f3e1-bec5-47bf-92dc-114dda837bc0](../../../../images/企业微信截图_ac96f3e1-bec5-47bf-92dc-114dda837bc0-4564372.png) + **高可用类型** :高可用 VIP 地址(**按需使用**) - + > 注意:如果使用高可用,至少需要三个 master 节点才可组成高可用集群,否则会出现 ***脑裂*** 现象。 - + - **不设置**:第一台 master 节点的 IP 地址作为 APIServer 地址 - **TKE 提供**:用户只需提供高可用的 IP 地址。TKE 部署 Keepalive,配置该 IP 为 Global 集群所有 Master 节点的VIP,以实现 Global 集群和控制台的高可用,此时该 VIP 和所有 Master 节点 IP 地址都是 APIServer 地址 - **使用已有**:对接配置好的外部 LB 实例。VIP 绑定 Global 集群所有 Master 节点的 80(TKEStack 控制台)、443(TKEStack 控制台)、6443(kube-apiserver 端口)、31138(tke-auth-api 端口)端口,同时确保该 VIP 有至少两个 LB 后端(Master 节点),以避免 LB 单后端不可用风险 - + + **GPU**:选择是否安装 GPU 相关依赖。(**按需使用**) - + > 注意:使用 GPU 首先确保节点有物理 GPU 卡,选择 GPU 类型后,平台将自动为节点安装相应的 GPU 驱动和运行时工具 - - + **pGPU**:平台会自动为集群安装 [GPUManager](https://github.com/tkestack/docs/blob/master/features/gpumanager.md) 扩展组件,此时可以给负载分配任意整数张卡 - + **vGPU**:平台会自动为集群安装 [Nvidia-k8s-device-plugin](https://github.com/NVIDIA/k8s-device-plugin),此时GPU可以被虚拟化,可以给负载分配非整数张GPU卡,例如可以给一个负载分配0.3个GPU - + + + **vGPU**:平台会自动为集群安装 [GPUManager](https://github.com/tkestack/docs/blob/master/features/gpumanager.md) 扩展组件,此时GPU可以被虚拟化,可以给负载分配非整数张GPU卡,例如可以给一个负载分配0.3个GPU + + **pGPU**:平台会自动为集群安装 [Nvidia-k8s-device-plugin](https://github.com/NVIDIA/k8s-device-plugin),此时可以给负载分配任意整数张卡 + + **容器网络** :将为集群内容器分配在容器网络地址范围内的 IP 地址,您可以自定义三大私有网段作为容器网络, 根据您选择的集群内服务数量的上限,自动分配适当大小的 CIDR 段用于 kubernetes service;根据您选择 Pod 数量上限/节点,自动为集群内每台云服务器分配一个适当大小的网段用于该主机分配 Pod 的 IP 地址。(**建议使用默认值**) + **CIDR:** 集群内 Sevice、 Pod 等资源所在网段,注意:CIDR不能与目标机器IP段重叠, 否则会造成初始化失败 + **Pod数量上限/节点:** 决定分配给每个 Node 的 CIDR 的大小 + **Service数量上限/集群**:决定分配给 Sevice 的 CIDR 大小 - + + **Master** :输入目标机器信息后单击保存,**若保存按钮是灰色,单击网页空白处即可变蓝** - + > 注意:如果在之前选择了高可用,至少需要三个 master 节点才可组成高可用集群,否则会出现 ***脑裂*** 现象。 - + + **目标机器**:Master 节点**内网 IP**,请配置**至少 8 Cores & 16G 内存** 及以上的机型,**否则会部署失败**。注意:如上图所示,如果节点密码一样,这里可以通过英文的分号“;”分隔多个 IP 地址实现快速添加多个节点 + **SSH 端口**: 请确保目标机器安全组开放 22 端口和 ICMP 协议,否则无法远程登录和 ping 通云服务器。(**建议使用默认值22**) + **主机label**:给主机设置 Label,可用于指定容器调度。(**按需使用**) + **认证方式**:连接目标机器的方式 - + + **密码认证**: + **密码**:目标机器密码 + **密钥认证**: + **密码**:目标机器密码 + **证书**:目标机器登陆证书 + **GPU**: 使用 GPU 机器需提前安装驱动和 runtime。(**按需使用**) - + > **添加机器**:可以通过节点下面的**【添加】**蓝色字体增加不同密码的master节点(**按需添加**) 5. **提交**: 集群信息填写完毕后,【提交】按钮变为可提交状态,单击即可提交。 @@ -77,21 +77,21 @@ TKEStack还可以另外**新建独立集群**以及**导入已有集群**实现* 3. 在“集群管理”页面,单击【导入集群】,如下图所示: ![导入集群](../../../../images/importCluster-1.png) - + 4. 在“导入集群”页面,填写被导入的集群信息,如下图所示: ![导入集群信息](../../../../images/importCluster-2.png) - + - **名称**: 被导入集群的名称,最长60字符 - + - **API Server**: 被导入集群的 API Server 的域名或 IP 地址 - + - **CertFile**: 输入被导入集群的 CertFile 文件内容 - + - **Token**: 输入被导入集群创建时的 token 值 - + > 注意:若不清楚集群的这些信息如何获取,可以参照下面导入 TKE/ACK/RKE 的方式导入自己的集群。 - -5. 单击最下方 【提交】 按钮 + +5. 单击最下方 【提交】 按钮 #### TKEStack 导入腾讯的 TKE 集群 @@ -147,7 +147,7 @@ TKEStack还可以另外**新建独立集群**以及**导入已有集群**实现* Type: kubernetes.io/service-account-token token: 非常长的字符串 ``` - + #### TKEStack 中导入 Rancher 的 RKE 集群 @@ -268,4 +268,4 @@ TKEStack还可以另外**新建独立集群**以及**导入已有集群**实现* ### 其他操作 -注意:由于【平台管理】控制台下对集群的大多数操作与【业务管理】控制台完全一致,因此除了集群的【基本信息】和【节点管理】之外,其他栏目(包括 命名空间、负载、服务、配置、存储、日志、事件)请参考【业务管理】控制台下[【应用管理】](../business-control-pannel/application)的相应部分。 \ No newline at end of file +注意:由于【平台管理】控制台下对集群的大多数操作与【业务管理】控制台完全一致,因此除了集群的【基本信息】和【节点管理】之外,其他栏目(包括 命名空间、负载、服务、配置、存储、日志、事件)请参考【业务管理】控制台下[【应用管理】](../business-control-pannel/application)的相应部分。 diff --git a/hack/addon/readme/GPUManager.md b/hack/addon/readme/GPUManager.md index 3ebac75eb..cd6231946 100644 --- a/hack/addon/readme/GPUManager.md +++ b/hack/addon/readme/GPUManager.md @@ -67,11 +67,11 @@ GPU-Manager 包含如下功能: ![image-20201001153047837](../../../docs/images/image-20201001153047837.png) -#### 通过 YAML 使用 +#### 创建使用GPU的Pod 如果使用 YAML 创建使用 GPU 的工作负载,提交的时候需要在 YAML 为容器设置 GPU 的使用资源。 -* CPU 资源需要在 resource 上填写`tencent.com/vcuda-core` +* CPU 资源需要在 resource 上填写`tencent.com/vcuda-core` * 显存资源需要在 resource 上填写`tencent.com/vcuda-memory` 例1:使用1张卡的 Pod @@ -90,7 +90,7 @@ spec: - name: gpu resources: - limits: + limits: tencent.com/vcuda-core: 100 requests: tencent.com/vcuda-core: 100 @@ -100,17 +100,14 @@ spec: ``` apiVersion: v1 - kind: Pod - -... - +metadata: + name: nginx spec: - containers: - - - name: gpu - + - name: nginx + image: nginx + imagePullPolicy: IfNotPresent resources: limits: tencent.com/vcuda-core: 30 @@ -120,6 +117,24 @@ spec: tencent.com/vcuda-memory: 20 ``` +如果pod在创建过程中出现`CrashLoopBackOff `的状态,且error log如下所示: +``` +failed to create containerd task: OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: Running hook #0:: error running hook: exit status 1, stdout: , stderr: nvidia-container-cli: mount error: open failed: /sys/fs/cgroup/devices/system.slice/containerd.service/kubepods-besteffort-podfd3b355a_665c_4c95_8e7f_61fd2111689f.slice/devices.allow: no such file or directory: unknown +``` +需要在GPU主机上手动安装`libnvidia-container-tools`这个组件,首先需要添加repo源:[添加repo源](https://nvidia.github.io/libnvidia-container/), +添加repo源后执行如下命令: +``` +yum install libnvidia-container-tools +``` +如果pod在创建过程中出现如下error log: +``` +failed to generate spec: lstat /dev/nvidia-uvm: no such file or directory +``` +需要在pod所在的主机上手动mount这个设备文件: +``` +nvidia-modprobe -u -c=0 +``` + ## GPU 监控数据查询 ### 通过控制台查询 @@ -143,4 +158,4 @@ curl http://127.0.0.1:5678/metric ![img](../../../docs/images/gpu-metric-result.png) -GPUManager 项目请参考:[GPUManager Repository ](https://github.com/tkestack/gpu-manager) \ No newline at end of file +GPUManager 项目请参考:[GPUManager Repository ](https://github.com/tkestack/gpu-manager)