从零搭建可分配节点GPU资源至容器的Kubernetes集群(Nvidia版本)

最近和AI团队一起做项目,需要将机器学习的项目部署进k8s。因为要使用节点的GPU资源,普通部署的k8s集群不能用了,因为docker只能对CPU和内存而不能对GPU资源进行共享和隔离。这一节我们就一起来看看怎么部署一个能分配GPU资源的k8s集群。

我是T型人小付,一位坚持终身学习的互联网从业者。喜欢我的博客欢迎在csdn上关注我,如果有问题欢迎在底下的评论区交流,谢谢。

操作环境

  • master(CPU) - ubuntu 18.04
  • gpu-node(GPU) - ubuntu 18.04

利用kubeadm安装

基本上跟着《【Kubernetes 003】Centos7通过Kubeadm安装Kubernetes1.15详解(附一键安装脚本)》进行安装即可成功创建集群。Centos和Ubuntu的命令稍微有些不同,但是大同小异,不影响整体步骤。

但是如果想在GPU节点的pod内使用GPU资源,还得对GPU节点做一些特殊的设定。所以请在将GPU节点加入master之前,对GPU节点完成下述操作

GPU节点安装准备

查看Linux的GPU信息

先更新本地数据库,然后获取GPU的详细信息

sudo update-pciids
sudo lspci | grep VGA -A 10

如果lspci命令没有找到,先通过下面命令安装

sudo yum install pciutils

我这边机器信息如下

root@gpu-node:~# lspci -v | grep VGA -A 10
01:00.0 VGA compatible controller: NVIDIA Corporation TU104 [GeForce RTX 2070 SUPER] (rev a1) (prog-if 00 [VGA controller])
	Subsystem: Micro-Star International Co., Ltd. [MSI] Device c729
	Flags: bus master, fast devsel, latency 0, IRQ 130
	Memory at a3000000 (32-bit, non-prefetchable) [size=16M]
	Memory at 90000000 (64-bit, prefetchable) [size=256M]
	Memory at a0000000 (64-bit, prefetchable) [size=32M]
	I/O ports at 3000 [size=128]
	[virtual] Expansion ROM at 000c0000 [disabled] [size=128K]
	Capabilities: [60] Power Management version 3
	Capabilities: [68] MSI: Enable+ Count=1/1 Maskable- 64bit+
	Capabilities: [78] Express Legacy Endpoint, MSI 00

如果跟我的机器一样是nvidia的显卡,根据显示的型号去查询支持的最新driver,安装完driver就会有管理工具nvidia-smi

nvidia显卡持续查看使用情况,每秒更新一次

watch -n 1 nvidia-smi

我这边的GPU和driver信息如下

root@gpu-node:~# nvidia-smi
Tue May 19 10:58:25 2020       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 435.21       Driver Version: 435.21       CUDA Version: 10.1     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  GeForce RTX 207...  Off  | 00000000:01:00.0 Off |                  N/A |
| 24%   28C    P8    11W / 215W |     19MiB /  7982MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:               
### 混合调度 Kubernetes 集群与动态 GPU 节点扩展 构建一个支持混合调度的 Kubernetes 集群,并配置 Cluster Autoscaler 实现基于 NVIDIA A100 GPU 节点池的动态扩展,是当前云原生 AI 工作负载管理的重要需求。以下为详细步骤和建议: #### 1. 集群架构设计与节点池划分 在搭建 Kubernetes 集群时,建议采用多节点池架构,将 CPU 节点GPU 节点分别管理。例如,可以使用云厂商提供的托管 Kubernetes 服务(如 AWS EKS、Azure AKS、GCP GKE)或自建集群(如使用 kops 或 kubeadm)[^3]。 - **CPU 节点池**:用于运行通用服务、控制平面组件和非 GPU 任务。 - **GPU 节点池**:专门用于运行需要 NVIDIA A100 GPU 的任务,确保资源隔离和调度效率。 #### 2. 安装 NVIDIA GPU 插件(K8s-NVIDIA-Plugin) 在 GPU 节点上安装 NVIDIA Device Plugin,使 Kubernetes 能够识别并调度 GPU 资源。 ```bash kubectl apply -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.14.0/nvidia-device-plugin.yml ``` 该插件通过统一的 API 接口,让 Kubernetes 集群能够高效识别、分配和监控 NVIDIA GPU 资源,推动 AI 训练、科学计算和图形渲染等 GPU 密集型工作负载在容器平台上的无缝部署 [^1]。 #### 3. 配置 Cluster Autoscaler Cluster Autoscaler 是 Kubernetes 的官方组件,能够根据负载自动扩展节点池。以下是配置步骤: - **部署 Cluster Autoscaler**: ```yaml apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: cluster-autoscaler spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: your-gpu-workload-deployment minReplicas: 1 maxReplicas: 10 targetCPUUtilizationPercentage: 70 ``` - **配置节点池扩展策略**: 在云厂商控制台或 Kubernetes 配置文件中定义 GPU 节点池的最小和最大节点数,并启用自动扩展功能。 - **标签与污点(Taint)配置**: 为 GPU 节点添加标签(如 `node-role.kubernetes.io/gpu=true`)和污点(如 `nvidia.com/gpu=present:NoSchedule`),确保只有需要 GPU 的 Pod 被调度到这些节点 [^3]。 #### 4. 部署 GPU 密集型应用 在部署需要 GPU 的应用时,需在 Pod 的资源请求中明确指定 GPU 资源: ```yaml spec: containers: - name: gpu-container image: your-gpu-image resources: limits: nvidia.com/gpu: 1 # 请求 1 块 GPU ``` #### 5. 监控与调优 - 使用 Prometheus + Grafana 或云厂商监控工具监控 GPU 使用率、节点负载等指标。 - 根据实际负载调整 Cluster Autoscaler 的阈值和节点池规模,确保资源利用率和成本之间的平衡。 NVIDIA A100 GPU 具备 6912 个 CUDA 核心、40GB/80GB HBM2 显存和高达 1555 GB/s 的带宽,适用于大规模 AI 训练和高性能计算任务 [^2]。合理配置 Cluster Autoscaler 可以有效提升 GPU 利用率,降低闲置成本。 ---
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值