我的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开发者之旅” | 征文活动进行中.......

...全文
2276 5 打赏 收藏 转发到动态 举报
写回复
用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
键按快了,自己打赏自己,亏了😅
代码下载地址: https://pan.quark.cn/s/bcac7912890d 在本文中,我们将详细研究如何将Windows 10操作系统调整为类似苹果的主题风格,并分析这一过程可能涉及的关键技术要素。Windows 10用户有时期望通过改变系统界面来获得与苹果Mac OS相近的体验,这通常涉及到图标、窗口布局、任务栏等方面的调整。"windows10美化变仿苹果主题"是一个此类解决方案,它致力于提供一种简便高效的方法,让用户能够在不降低系统性能的情况下,使Windows 10的外观更接近苹果的操作系统。 我们需要熟悉这个美化工具的关键部分——"安装程序Dock.exe"。Dock是苹果Mac OS中的一个显著功能,它是一个可定制的快捷方式条,用于迅速访问常用的应用程序和文件。在Windows 10中,实现仿苹果主题通常包括一个类似的功能,模拟Mac的Dock效果,使用户能够便捷地启动和切换应用程序。这个Dock程序很可能包含了模仿Mac样式的任务栏和启动器的界面组件。 在描述中提及的"一键启动,完美仿苹果",表明这个美化工具应该是用户友好的,只需执行一个简单的步骤,就能完成整个系统的转换。这样的设计对于那些不熟悉复杂系统设置调整的用户来说非常便利。同时,"支持:windows7/windows10"显示这个工具不仅适用于Windows 10,还适用于较早版本的Windows 7,拓宽了它的适用范围。 值得关注的是,该工具被强调为"不会占用很多资源",在个人电脑测试中,仅消耗3%的内存资源。这在一定程度上确保了系统性能不会因为美化而受到明显影响。在进行系统美化时,保证软件的轻量化和资源使用效率是至关重要的,因为过多的后台进程可能会减慢系统运行速度。 在达...
源码链接: https://pan.quark.cn/s/a4b39357ea24 ### MG996R舵机控制详细说明 #### 一、MG996R舵机概述 MG996R舵机是一种在机器人、无人机、模型飞机等多个领域得到普遍应用的伺服电机。该舵机能够依据输入的脉冲宽度调制(PWM)信号进行精准的角度定位。由于具备操作简便、运行高效、成本较低等优势,这种舵机在各种机电控制系统中被频繁采用。 #### 二、MG996R舵机的工作机制 MG996R舵机内部配备了一个精密的反馈系统,确保其输出的角度具有高度的精确性。其主要运作过程如下: 1. **控制信号调节**:控制信号由接收机的通道传输至信号调制芯片,该信号通常表现为周期性变化的PWM信号。信号调制芯片会提取出这一信号中的直流偏置电压。 2. **基准信号的产生**:舵机内部设有基准电路,用于生成一个周期为20ms、宽度为1.5ms的基准信号。 3. **电压对比**:所获取的直流偏置电压与电位器的电压进行对比,从而得出电压差。 4. **电机驱动**:电压差的正负决定了电机的旋转方向。电机通过一系列的齿轮减速装置驱动电位器旋转,使电压差趋近于零,此时电机停止转动。 #### 三、舵机控制信号详述 舵机的控制信号通常采用PWM信号,通过调节信号的占空比来控制舵机的位置。一般情况下,对舵机的控制要求如下: - **周期**:通常设置为20ms。 - **脉冲宽度**:依据所需控制的角度而变动,通常范围为1ms至2ms之间。 - **最小脉冲宽度**:1ms对应舵机的最左侧位置。 - **最大脉冲宽度**:2ms对应舵机的最右侧位置。 - **中间位置**:1.5ms对应的脉冲宽度代表舵机的中心位置。 #### 四...

1,409

社区成员

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

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