我的NVIDIA开发者之旅——基于Ubuntu 20.04系统使用 DeepOps 安装部署Kubernetes 集群

云矩阵
云计算领域优质创作者
博客专家认证
2022-06-11 19:23:20
加精

目录

  • 前言🎨
  • 一、创建虚拟机实例 🎁
  • 二、使用 DeepOps 安装 Kubernetes 集群 📚
  • 1️⃣ 使用SSH登录Ubuntu系统
  • 2️⃣ 使用 DeepOps 安装 Kubernetes 集群 ✨
  • 三、安装用于 Kubernetes 的 NVIDIA 插件💥
  • 四、参考链接💦

"我的NVIDIA开发者之旅” | 征文活动进行中.......

前言🎨

img

Kubernetes (K8s) 是一个开源系统,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes 包括对 GPU 的支持和对 Kubernetes 的增强,因此用户可以轻松配置和使用 GPU 资源来加速 AI 和 HPC 工作负载。

DeepOps——GPU 基础设施和自动化工具。 使用 DeepOps 自动部署,特别是对于包含许多工作节点的群集。DeepOps是一个模块化的可测试脚本集合,可以自动部署Kubernetes,Slurm或两者的混合组合。它还安装了必要的GPU驱动程序,NVIDIA Container Toolkit for Docker()以及用于GPU加速工作的各种其他依赖项。封装了 NVIDIA GPU 的最佳实践,它可以根据需要进行自定义或作为单个组件运行。

DeepOps项目封装了部署GPU服务器集群和共享单个强大节点(如NVIDIA DGX Systems)的最佳实践。DeepOps还可以以模块化方式进行调整或使用,以满足特定于站点的集群需求。例如:

  • NVIDIA DGX 服务器的本地数据中心,DeepOps 提供端到端功能来设置整个集群管理堆栈
  • 运行 Kubernetes 的现有集群,其中 DeepOps 脚本用于部署 Kubeflow 和连接 NFS 存储
  • 需要资源管理器/批处理调度程序的现有集群,其中DeepOps用于安装Slurm或Kubernetes
  • 不需要调度程序的单台计算机,只需要 NVIDIA 驱动程序、Docker 和 NVIDIA 容器运行时.

有很多方法可以使用 NVIDIA 支持的组件(如驱动程序、插件和运行时)安装 Kubernetes。本文采用DeepOps 安装 Kubernetes。

image-20220611184153474

一、创建虚拟机实例 🎁

DeepOps目前支持以下Linux发行版:

  • NVAIDA DGX OS 4, 5
  • Ubuntu 18.04 LTS, 20.04 LTS
  • CentOS 7,8
# 虚拟机型号:
# 操作系统:Linux (Ubuntu 20.04.4)
# 大小:Standard D2s v3 (2 vcpu,8 GiB 内存)

image-20220611140655063

二、使用 DeepOps 安装 Kubernetes 集群 📚

1️⃣ 使用SSH登录Ubuntu系统

image-20220611151036845

2️⃣ 使用 DeepOps 安装 Kubernetes 集群 ✨

# 克隆 DeepOps 存储库
git clone https://github.com/NVIDIA/deepops.git

# 进入deepops目录
cd deepops

# 安装必备软件并复制默认配置
./scripts/setup.sh

image-20220611151107918

如图所示,安装配置完成。

image-20220611151506319

# 编辑配置信息,设置集群中的主机名称,如下图所示。
vi config/inventory

# 验证配置信息是否正确 
ansible all -m raw -a "hostname"

# 使用 Ansible 安装 Kubernetes
ansible-playbook -l k8s-cluster -k -u xybdiy -K playbooks/k8s-cluster.yml

# 配置访问权限
cp config/artifacts/admin.conf ~/.kube/config

export KUBECONFIG=~/.kube/config

# 验证 Kubernetes 集群是否正在运行
kubectl get nodes

编辑 config/inventory 配置文件

image-20220611151611237

验证上述配置信息是否正确💚,如图所示。

(env) xybdiy@k8s:~/deepops$ ansible all -m raw -a "hostname"

PLAY [Ansible Ad-Hoc] *******************************************************************************************************************************************************************************************

TASK [raw] ******************************************************************************************************************************************************************************************************
changed: [k8s]

PLAY RECAP ******************************************************************************************************************************************************************************************************
k8s                        : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

image-20220611160459073

K8S集群使用DeepOps安装部署完成。

使用DeepOps安装K8S集群,结果如图所示。

image-20220611154923672

img

# 查看K8S部署的节点信息状态
(env) xybdiy@k8s:~/deepops$ kubectl get nodes
NAME   STATUS   ROLES                  AGE   VERSION
k8s    Ready    control-plane,master   24m   v1.22.8

三、安装用于 Kubernetes 的 NVIDIA 插件💥

NVIDIA device plugin 通过k8s daemonset的方式部署到每个k8s的node节点上,实现了Kubernetes device plugin的接口。

提供以下功能:

  • 暴露每个节点的GPU数量给集群
  • 跟踪GPU的健康情况
  • 使在k8s的节点可以运行GPU容器

开始安装 nvidia-device-plugin插件,安装此插件是为了在k8s中使用GPU

执行命令

# 这是一个简单的静态守护程序集,旨在演示的基本功能。
# 在 Kubernetes 中启用 GPU 支持,执行以下命令
kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.12.0/nvidia-device-plugin.yml

# 查看容器
kubectl get pods -A

# 通过检查kube-system命名空间中的pod来验证是否已安装此插件
kubectl get pods -n kube-system | grep -i nvidia

# 查看节点详细信息
kubectl describe node

# 运行 GPU 作业。部署守护程序集后,容器现在可以使用以下资源类型请求 NVIDIA GPU:nvidia.com/gpu
$ cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: gpu-pod
spec:
  restartPolicy: Never
  containers:
    - name: cuda-container
      image: nvcr.io/nvidia/k8s/cuda-sample:vectoradd-cuda10.2
      resources:
        limits:
          nvidia.com/gpu: 1 # requesting 1 GPU
  tolerations:
  - key: nvidia.com/gpu
    operator: Exists
    effect: NoSchedule
EOF

# 查看容器
kubectl get pods -A

执行命令结果

(env) xybdiy@k8s:~/deepops$ kubectl create -f https://raw.githubusercontent.com/NVIDIA/k8s-device-plugin/v0.6.0/nvidia-device-plugin.yml
daemonset.apps/nvidia-device-plugin-daemonset created


(env) xybdiy@k8s:~/deepops$ kubectl get pods -A
NAMESPACE                        NAME                                                              READY   STATUS    RESTARTS       AGE
deepops-nfs-client-provisioner   nfs-subdir-external-provisioner-7f5b859849-c67t2                  1/1     Running   0              135m
default                          gpu-demo-vectoradd                                                0/1     Pending   0              21m
gpu-operator-resources           gpu-operator-6497cbf9cd-c47fv                                     1/1     Running   0              137m
gpu-operator-resources           nvidia-gpu-operator-node-feature-discovery-master-84566dff2vzgt   1/1     Running   0              137m
gpu-operator-resources           nvidia-gpu-operator-node-feature-discovery-worker-w99tt           1/1     Running   0              137m
kube-system                      calico-kube-controllers-5788f6558-bvgl5                           1/1     Running   1 (139m ago)   139m
kube-system                      calico-node-csh2h                                                 1/1     Running   0              140m
kube-system                      coredns-8474476ff8-6kj72                                          1/1     Running   0              139m
kube-system                      dns-autoscaler-7f76f4dd6-5rcmf                                    1/1     Running   0              139m
kube-system                      kube-apiserver-k8s                                                1/1     Running   1              141m
kube-system                      kube-controller-manager-k8s                                       1/1     Running   2 (138m ago)   141m
kube-system                      kube-proxy-wvp6s                                                  1/1     Running   0              140m
kube-system                      kube-scheduler-k8s                                                1/1     Running   2 (138m ago)   141m
kube-system                      kubernetes-dashboard-6c96f5b677-nxpmj                             1/1     Running   0              139m
kube-system                      kubernetes-metrics-scraper-54b676c794-lwqv7                       1/1     Running   0              139m
kube-system                      nodelocaldns-4bzzr                                                1/1     Running   0              139m
kube-system                      nvidia-device-plugin-daemonset-nqbzf                              1/1     Running   0              89m

(env) xybdiy@k8s:~/deepops$ kubectl get pods -n kube-system | grep -i nvidia
nvidia-device-plugin-daemonset-nqbzf          1/1     Running   0              87m

image-20220611162620724

查看容器

image-20220611181714379

四、参考链接💦

安装 Kubernetes — NVIDIA Cloud Native Technologies 文档

NVIDIA/deepops: Tools for building GPU clusters (github.com)

deepops/docs/k8s-cluster at master · NVIDIA/deepops (github.com)

"我的NVIDIA开发者之旅” | 征文活动进行中.......

...全文
2068 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
A_TFMJ 2022-06-29
  • 打赏
  • 举报
回复 1

好文啊,按照你的操作步骤,复现了一下,可以实现,支持~

彳亍75 2022-06-22
  • 打赏
  • 举报
回复 3
真的很有用,看到这篇文章,顺利地解决了我的问题
文賽 2022-06-15
  • 打赏
  • 举报
回复 2

感谢大佬,解决问题了!!

weixin_43565138 2022-06-15
  • 打赏
  • 举报
回复 2
支持!
云矩阵 2022-06-11
  • 打赏
  • 举报
回复 3
键按快了,自己打赏自己,亏了😅

1,337

社区成员

发帖
与我相关
我的任务
社区描述
NVIDIA 开发者技术交流
人工智能 企业社区
社区管理员
  • nvdev
  • 活动通知
  • AI_CUDA_Training
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧