本ページでは、ノード管理に関するよくある質問について説明します。
クラスターの GPU ノードのカーネルを手動でアップグレードするにはどうすればよいですか。
次の手順を使用して、クラスターの GPU ノードのカーネルを手動でアップグレードできます。
注 現在のカーネルバージョンは、3.10.0-957.21.3
より前のバージョンです。
- kubectl を利用した Kubernetes クラスターへの接続.
- ターゲット GPU ノードをスケジュール対象外に設定します。 この例では、ノード cn-beijing.i-2ze19qyi8votgjz12345 をターゲットノードとして使用します。
kubectl cordon cn-beijing.i-2ze19qyi8votgjz12345
node/cn-beijing.i-2ze19qyi8votgjz12345 already cordoned
- ターゲットノードのポッドを他のノードに移行します。
# kubectl drain cn-beijing.i-2ze19qyi8votgjz12345 --grace-period=120 --ignore-daemonsets=true
node/cn-beijing.i-2ze19qyi8votgjz12345 cordoned
WARNING: Ignoring DaemonSet-managed pods: flexvolume-9scb4, kube-flannel-ds-r2qmh, kube-proxy-worker-l62sf, logtail-ds-f9vbg
pod/nginx-ingress-controller-78d847fb96-5fkkw evicted
- 既存の nvidia-driver をアンインストールします。
注 この手順では、バージョン 384.111 ドライバーがアンインストールされます。 ドライバーのバージョンが 384.111 でない場合は、NVIDIA の公式 Web
サイトからドライバーをダウンロードし、384.111
を実際のバージョン番号で置換する必要があります。
- GPU ノードにログインし、
nvidia-smi
コマンドを実行してドライバーのバージョンを確認します。
# nvidia-smi -a | grep 'Driver Version'
Driver Version : 384.111
- ドライバーのインストールパッケージをダウンロードします。
cd /tmp/
curl -O https://cn.download.nvidia.cn/tesla/384.111/NVIDIA-Linux-x86_64-384.111.run
注 ドライバーをアンインストールするには、インストールパッケージが必要です。
- 既存のドライバーをアンインストールします。
chmod u+x NVIDIA-Linux-x86_64-384.111.run
. /NVIDIA-Linux-x86_64-384.111.run --uninstall -a -s -q
- カーネルをアップグレードします。
ニーズに基づいてカーネルをアップグレードします。
- GPU ノードを再起動します。
- GPU ノードにログインし、対応する kernel-devel パッケージをインストールします。
yum install -y kernel-devel-$(uname -r)
- NVIDIA の公式 Web サイトにアクセスし、必要なドライバーをダウンロードしてターゲットノードにインストールします。 この例では、410.79 を使用しています。
cd /tmp/
curl -O https://cn.download.nvidia.cn/tesla/410.79/NVIDIA-Linux-x86_64-410.79.run
chmod u+x NVIDIA-Linux-x86_64-410.79.run
sh . /NVIDIA-Linux-x86_64-410.79.run -a -s -q
# GPU のウォームアップ
nvidia-smi -pm 1 || true
nvidia-smi -acp 0 || true
nvidia-smi --auto-boost-default=0 || true
nvidia-smi --auto-boost-permission=0 || true
nvidia-modprobe -u -c=0 -m || true
- /etc/rc.d/rc.local ファイルをチェックし、次の設定が含まれているかどうかを確認します。 含まれていない場合は、次の内容を追加します。
nvidia-smi -pm 1 || true
nvidia-smi -acp 0 || true
nvidia-smi --auto-boost-default=0 || true
nvidia-smi --auto-boost-permission=0 || true
nvidia-modprobe -u -c=0 -m || true
- kubelet と Docker を再起動します。
service kubelet stop
service docker restart
service kubelet start
- GPU ノードをスケジュール対象に設定します。
# kubectl uncordon cn-beijing.i-2ze19qyi8votgjz12345
node/cn-beijing.i-2ze19qyi8votgjz12345 already uncordoned
- nvidia-device-plugin コンテナーで次のコマンドを実行し、GPU ノードにインストールされているドライバーのバージョンを確認します。
kubectl exec -n kube-system -t nvidia-device-plugin-cn-beijing.i-2ze19qyi8votgjz12345 nvidia-smi
Thu Jan 17 00:33:27 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 410.79 Driver Version: 410.79 CUDA Version: N/A |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla P100-PCIE... On | 00000000:00:09.0 Off | 0 |
| N/A 27C P0 28W / 250W | 0MiB / 16280MiB | 0% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| No running processes found |
+-----------------------------------------------------------------------------+
GPU ノードでコンテナーが開始されない問題を修正するにはどうすればよいですか。
特定の Kubernetes バージョンがインストールされている GPU ノードで kubelet と Docker を再起動すると、再起動後にノードでコンテナーが開始されないことがあります。
# service kubelet stop
Redirecting to /bin/systemctl stop kubelet.service
# service docker stop
Redirecting to /bin/systemctl stop docker.service
# service docker start
Redirecting to /bin/systemctl start docker.service
# service kubelet start
Redirecting to /bin/systemctl start kubelet.service
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
以下のコマンドを実行して、cgroup ドライバーを表示します。
docker info | grep -i cgroup
Cgroup Driver: cgroupfs
この出力は、cgroup ドライバーが cgroupfs に設定されていることを示しています。
次の手順を使用して問題を修正できます。
- /etc/docker/daemon.json のコピーを作成し、次のコマンドを実行して /etc/docker/daemon.json を更新します。
cat >/etc/docker/daemon.json <<-EOF
{
"default-runtime": "nvidia",
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
},
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "10"
},
"oom-score-adjust": -1000,
"storage-driver": "overlay2",
"storage-opts":["overlay2.override_kernel_check=true"],
"live-restore": true
}
EOF
- 次のコマンドを実行して Docker と kubelet を再起動します。
# service kubelet stop
Redirecting to /bin/systemctl stop kubelet.service
# service docker restart
Redirecting to /bin/systemctl restart docker.service
# service kubelet start
Redirecting to /bin/systemctl start kubelet.service
- 次のコマンドを実行し、cgroup ドライバーが systemd に設定されているかどうかを確認します。
# docker info | grep -i cgroup
Cgroup Driver: systemd