Ubuntu 22.04下Kubernetes管理4块4090GPU显卡
创作时间:
作者:
@小白创作中心
Ubuntu 22.04下Kubernetes管理4块4090GPU显卡
引用
CSDN
1.
https://m.blog.csdn.net/wu_tech/article/details/143182294
本文将详细介绍如何在Ubuntu 22.04系统下使用Kubernetes管理4块RTX 4090 GPU显卡。内容涵盖显卡驱动安装、Docker配置、NVIDIA容器工具包安装、Kubernetes集群搭建以及GPU设备插件部署等多个方面,适合有一定技术基础的读者参考学习。
1. 安装显卡驱动
使用CUDA 12.2版本的驱动程序:
# wget https://cn.download.nvidia.com/XFree86/Linux-x86_64/525.113.01/NVIDIA-Linux-x86_64-525.113.01.run
# sh NVIDIA-Linux-x86_64-535.113.01.run
安装完成后重启系统:
sudo reboot
开启显卡内存持久化:
nvidia-smi -pm 1
检查显卡信息:
nvidia-smi -L
2. 安装Docker
配置APT源:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
安装Docker:
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
重启Docker服务:
systemctl restart docker
3. 安装NVIDIA-Docker-Toolkit
配置存储库:
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list \
&& \
sudo apt-get update
安装NVIDIA容器工具包:
sudo apt-get install -y nvidia-container-toolkit
测试安装:
docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
4. 安装Kubernetes和Kubeadm
由于服务器上已经安装了Docker,这里不再安装containerd。
基础环境配置
- 设置主机名:
hostnamectl set-hostname ubuntu
- 禁用SELinux:
sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
- 关闭swap分区:
swapoff -a
sed -ri 's/.*swap.*/#&/' /etc/fstab
sed -ri 's/#(.*swap.*)/\1/' /etc/fstab
- 配置IPv6流量桥接:
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
- 应用配置:
sysctl --system
- 安装Kubernetes组件:
配置Docker:
cat /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"],
"data-root": "/data2/dockerdata",
"runtimes": {
"nvidia": {
"args": [],
"path": "nvidia-container-runtime"
}
}
}
添加Kubernetes APT存储库:
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
sudo apt-add-repository "deb kubernetes-xenial main"
安装Kubernetes组件:
sudo apt update
sudo apt install -y kubelet=1.23.8-00 kubeadm=1.23.8-00 kubectl=1.23.8-00
sudo apt-mark hold kubelet kubeadm kubectl
设置kubelet开机自启:
sudo systemctl enable --now kubelet
配置master域名映射:
echo "172.16.1.220 cluster-endpoint" >> /etc/hosts
初始化Kubernetes集群:
sudo kubeadm init \
--apiserver-advertise-address=172.16.1.220 \
--control-plane-endpoint=cluster-endpoint \
--image-repository registry.aliyuncs.com/google_containers \
--kubernetes-version v1.23.8 \
--service-cidr=10.96.0.0/16 \
--pod-network-cidr=10.244.0.0/16
在使用Docker安装Kubernetes时,需要确保Docker使用systemd作为cgroup驱动:
vim /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"]
}
systemctl daemon-reload
systemctl restart docker
重置之前的初始化:
kubeadm reset
rm -rf /etc/kubernetes/manifests/kube-apiserver.yaml
rm -rf /etc/kubernetes/manifests/kube-controller-manager.yaml
rm -rf /etc/kubernetes/manifests/kube-scheduler.yaml
rm -rf /etc/kubernetes/manifests/etcd.yaml
rm -rf /var/lib/etcd/*
检查kubelet状态:
sudo systemctl status kubelet
查看Docker镜像:
sudo docker images | grep google
生成加入令牌:
kubeadm token create --print-join-command
配置kubectl:
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
安装网络组件:
curl https://docs.projectcalico.org/v3.20/manifests/calico.yaml -O
vi calico.yaml
kubectl apply -f calico.yaml
查看节点状态:
kubectl get nodes
去除节点污点:
kubectl taint nodes --all node-role.kubernetes.io/master-
检查Pod状态:
kubectl get pods --all-namespaces
5. 安装设备插件
部署设备插件的首选方法是使用Helm作为守护进程。安装Helm的说明可以在 这里 找到。
下载Helm二进制包:
tar -zxvf helm-v3.10.2-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm
设置Helm存储库:
helm repo add nvdp https://nvidia.github.io/k8s-device-plugin
helm repo update
验证插件版本:
helm search repo nvdp --devel
部署设备插件:
helm install --generate-name nvdp/nvidia-device-plugin --namespace nvidia-device-plugin \
--create-namespace
下载Helm Chart包:
helm pull nvdp/nvidia-device-plugin
如果安装失败,检查日志并修改配置:
kubectl logs nvidia-device-plugin-1712138777-wxdc8 -n nvidia-device-plugin
修改daemon.json文件:
more /etc/docker/daemon.json
{
"exec-opts":["native.cgroupdriver=systemd"],
"data-root": "/data2/dockerdata",
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"runtimeArgs": [],
"path": "/usr/bin/nvidia-container-runtime"
}
}
}
sudo systemctl restart docker
6. 安装GPU特性发现组件
设置Helm存储库:
helm repo add nvgfd https://nvidia.github.io/gpu-feature-discovery
helm repo update
helm search repo nvgfd --devel
部署GPU特性发现组件:
helm install --generate-name nvgfd/gpu-feature-discovery --namespace gpu-feature-discovery \
--create-namespace
如果镜像下载失败,可以手动下载并重新安装:
helm uninstall gpu-feature-discovery-1712148385 -n gpu-feature-discovery
docker pull yansenchangyu/node-feature-discovery:v0.13.1
docker pull nvcr.io/nvidia/gpu-feature-discovery:v0.8.2
helm install gpu-feature-discovery . --create-namespace --namespace gpu-feature-discovery
7. 测试集群和GPU集成
创建GPU Pod:
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
nodeSelector:
accelerator: nvidia-rtx4090
EOF
观察运行日志:
kubectl logs gpu-pod
如果看到 "Test PASSED",则表示容器使用GPU计算运行完成。
完整的视频演示可以在B站查看:老吴聊技术
热门推荐
老司机分享:自动挡车省油的真相,你不得不知
总台蛇年春晚吉祥物亮相!从三星堆到春晚,它穿越了3000年
哪些有氧运动减肥效果好?五种减肥有氧运动公认最好
散养还是笼养?幼犬究竟是散养比较好还是笼养比较好?
《修仙家族模拟器2》:势力组织深度解析与玩法探索
外油内干痘痘肌适合什么护肤品好
朋友到期未还钱,又不想和朋友翻脸,应不应该催好朋友还钱呢?
地下根茎类作物:土豆、萝卜、生姜、中药材等如何促进根茎膨大!
高学历人才涌入社区:变革的序曲,正能量的涌动,未来何限可能?
采购项目管理清单怎么写
2025年提升学历的五大途径,深度解析哪种方式含金量更高!
平顶山一日游攻略,探寻中原文化瑰宝,体验自然风光之美
临床常用的疼痛评估量表汇总,附操作步骤与评定标准
白盒测试-简单循环
云盘如何锁定文件夹
推动社区活动参与的创新互动挑战
国网焦作供电公司:电能替代让非遗文化更出彩
五行取名大全:2026精选带土的男宝宝名字
什么是授权书?定义、类型及法律效力全解析
酸奶别错过这个搭档,专家建议:这样吃,肠道更健康!
三国杀:盘点那些不在牌堆中的特殊装备和锦囊(上)
空囊和葡萄胎的区别与判断方法
《食品科学》:南昌大学万茵教授等:平卧菊三七提取物降尿酸活性的物质基础分析
广西师范大学专业排名一览表2024(附:王牌热门专业)
考研没有竞赛和科研经验该如何应对
地球生命都是碳基生命,一个残酷的事实:宇宙不存在硅基生命!
如何计算购车首付以优化财务规划?这种计算对购车预算有何影响?
爱奇艺热剧《漂白》被指抄袭,律师怎么解读?
“转型”成为高频词,武汉各界共识:主动转,必须转!
磨豆机转速对咖啡甜感与酸感的影响