NTNX>日記

個人的な趣味による Nutanix Community Edition 日記。Japanese のみですみません。

NKP クラスタの GPU ノードで GPU Pod むけスケジューリング調整を設定してみる。

Nutanix Kubernetes Platform(NKP)で GPU ノード プールを作成すると、デフォルトでは GPU を必要としない Pod であっても、GPU ノードで起動されてしまいます。そこで、Kubernetes の Taint と toleration により、GPU Pod が起動されるノードを調整してみます。

 

今回の内容です。

 

GPU Pod の起動制御について

Nutanix Enterprise AI(NAI)では、推論サービス エンドの GPU Pod を起動します。そのため、NAI のドキュメントでは、下記のように、Kubernetes の Taint と toleration で GPU Pod が起動されるノードを調整する方法が案内されています。

Nutanix Enterprise AI Requirements

After you configure a worker node pool with NVIDIA GPUs, ensure that you taint the worker nodes with the key nvidia.com/gpu and the effect NoSchedule, to enable inference pods with matching toleration to be scheduled on the tainted worker node. Any pods that do not require GPUs will not be scheduled on the tainted worker node.

 

これは、下記のように Pod の起動を制御します。

  • GPU を搭載している Kubernetes ノードには、Pod を起動しないように Taint を設定する。
  • GPU Pod には、その Taint を許容する Toleration を設定して起動可能にする。

 

今回の環境

NKP の Kubernetes クラスタを用意してあります。今回は、NKP の管理クラスタをそのまま NAI を展開しています。

demo@nkp-work-01:~$ kubectl get nodes
NAME                                 STATUS   ROLES           AGE    VERSION
nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   Ready    <none>          34d    v1.33.5
nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   Ready    <none>          102d   v1.33.5
nkpnai-md-0-xqwvn-zlrmk-62gc2        Ready    <none>          102d   v1.33.5
nkpnai-md-0-xqwvn-zlrmk-c5h88        Ready    <none>          102d   v1.33.5
nkpnai-md-0-xqwvn-zlrmk-knrqk        Ready    <none>          102d   v1.33.5
nkpnai-md-0-xqwvn-zlrmk-zhdm4        Ready    <none>          102d   v1.33.5
nkpnai-vvzvd-cctr2                   Ready    control-plane   102d   v1.33.5
nkpnai-vvzvd-ck76s                   Ready    control-plane   102d   v1.33.5
nkpnai-vvzvd-k4z42                   Ready    control-plane   102d   v1.33.5

 

GPU を搭載したノード プール(nkpnai-gpupool-1-z9mz6)に、2ノード展開してあります。

demo@nkp-work-01:~$ kubectl get machinedeployments.cluster.x-k8s.io
NAME                     CLUSTER   REPLICAS   READY   UPDATED   UNAVAILABLE   PHASE     AGE    VERSION
nkpnai-gpupool-1-z9mz6   nkpnai    2          2       2         0             Running   102d   v1.33.5
nkpnai-md-0-xqwvn        nkpnai    4          4       4         0             Running   102d   v1.33.5

 

kubectl get nodes で、GPU ノードのみ取得してみます。このクラスタには NVIDIA GPU Operator がインストールされているので、GPU 搭載ノードには「nvidia.com/gpu.present: true」ラベルが付与されています。

demo@nkp-work-01:~$ kubectl get nodes -l nvidia.com/gpu.present=true
NAME                                 STATUS   ROLES    AGE    VERSION
nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   Ready    <none>   34d    v1.33.5
nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   Ready    <none>   102d   v1.33.5

 

NAI の nai-system Namespace の Pod の起動ノードを確認すると、GPU を必要としていない Pod(nai-db-0 など)も、GPU ノード(nkpnai-gpupool-1-z9mz6-~)で起動されています。ちなみに、全ノードで起動される DaemonSet など、GPU を必要としていなくても GPU ノードで起動される例外もあります。

demo@nkp-work-01:~$ kubectl get pod -n nai-system -o wide
NAME                                                     READY   STATUS      RESTARTS   AGE   IP              NODE                                 NOMINATED NODE   READINESS GATES
chi-nai-clickhouse-server-chcluster1-0-0-0               1/1     Running     0          40d   192.168.2.168   nkpnai-md-0-xqwvn-zlrmk-knrqk        <none>           <none>
chk-nai-clickhouse-keeper-chkeeper-0-0-0                 1/1     Running     0          40d   192.168.3.242   nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>           <none>
iam-database-bootstrap-8wrkc-n9jhm                       0/1     Completed   0          40d   192.168.2.141   nkpnai-md-0-xqwvn-zlrmk-knrqk        <none>           <none>
iam-proxy-b798b7fcd-7kldt                                1/1     Running     0          40d   192.168.3.168   nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>           <none>
iam-proxy-control-plane-8674b9c87b-j7mxp                 1/1     Running     0          40d   192.168.3.24    nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>           <none>
iam-themis-7787f8dff4-66czf                              1/1     Running     0          40d   192.168.3.232   nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>           <none>
iam-themis-bootstrap-jdybv-7fsqg                         0/1     Completed   0          40d   192.168.3.233   nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>           <none>
iam-ui-55bcb984f9-zmk74                                  1/1     Running     0          40d   192.168.2.77    nkpnai-md-0-xqwvn-zlrmk-knrqk        <none>           <none>
iam-user-authn-7f754498cf-mgg26                          1/1     Running     0          40d   192.168.3.225   nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>           <none>
nai-api-5d4795bf9f-qjvn4                                 1/1     Running     0          40d   192.168.1.179   nkpnai-md-0-xqwvn-zlrmk-c5h88        <none>           <none>
nai-api-db-migrate-lylzy-kc976                           0/1     Completed   0          40d   192.168.4.235   nkpnai-md-0-xqwvn-zlrmk-zhdm4        <none>           <none>
nai-clickhouse-schema-job-1770036715-twbl4               0/1     Completed   0          40d   192.168.1.52    nkpnai-md-0-xqwvn-zlrmk-c5h88        <none>           <none>
nai-db-0                                                 1/1     Running     0          40d   192.168.7.78    nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
nai-iep-model-controller-5c74b76dc9-sflrw                1/1     Running     0          40d   192.168.2.26    nkpnai-md-0-xqwvn-zlrmk-knrqk        <none>           <none>
nai-labs-8448976b65-dj4gh                                1/1     Running     0          40d   192.168.1.251   nkpnai-md-0-xqwvn-zlrmk-c5h88        <none>           <none>
nai-oauth2-proxy-585dc57587-8d66d                        1/1     Running     0          40d   192.168.3.51    nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>           <none>
nai-oidc-client-registration-wcazn-t92zm                 0/1     Completed   0          40d   192.168.4.163   nkpnai-md-0-xqwvn-zlrmk-zhdm4        <none>           <none>
nai-operators-nai-clickhouse-operator-584d9f7b44-lsgwz   2/2     Running     0          40d   192.168.7.138   nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
nai-otel-collector-collector-4hzkt                       0/1     Init:0/1    0          40d   <none>          nkpnai-vvzvd-k4z42                   <none>           <none>
nai-otel-collector-collector-4phpg                       0/1     Init:0/1    0          40d   <none>          nkpnai-vvzvd-ck76s                   <none>           <none>
nai-otel-collector-collector-5jp8s                       0/1     Init:0/1    0          40d   <none>          nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
nai-otel-collector-collector-7mt45                       0/1     Init:0/1    0          40d   <none>          nkpnai-md-0-xqwvn-zlrmk-c5h88        <none>           <none>
nai-otel-collector-collector-bbhjf                       0/1     Init:0/1    0          40d   <none>          nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>           <none>
nai-otel-collector-collector-bdwkr                       0/1     Init:0/1    0          40d   <none>          nkpnai-md-0-xqwvn-zlrmk-zhdm4        <none>           <none>
nai-otel-collector-collector-cghpt                       0/1     Init:0/1    0          40d   <none>          nkpnai-md-0-xqwvn-zlrmk-knrqk        <none>           <none>
nai-otel-collector-collector-qf65b                       0/1     Init:0/1    0          40d   <none>          nkpnai-vvzvd-cctr2                   <none>           <none>
nai-otel-collector-collector-rjxww                       0/1     Init:0/1    0          34d   <none>          nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
nai-otel-collector-targetallocator-7f4654bd9c-kbtl6      1/1     Running     0          40d   192.168.3.159   nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>           <none>
nai-pulse-job-29558885-jj4cn                             0/1     Completed   0          11h   192.168.8.242   nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
nai-ui-7bd775976b-wvkbj                                  1/1     Running     0          40d   192.168.7.155   nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
redis-standalone-86cb5b9c4d-nskkm                        2/2     Running     0          40d   192.168.3.34    nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>           <none>

 

Namespace 横断(-A オプション)で、「gpupool」を含む名前のノードで起動されている Pod の、Pod 名のみを表示してみます。ここでも、GPU を使用していなそうな多くの Pod が、GPU ノードで起動されていることがわかります。

demo@nkp-work-01:~$ kubectl get pod -A -o wide | grep gpupool | awk '{print $2}'
envoy-gateway-667545bc7d-6vp85
git-operator-admin-credentials-rotate-29556000-9q8pj
git-operator-admin-credentials-rotate-29557440-hpggd
git-operator-admin-credentials-rotate-29558880-clnfh
git-operator-git-0
ai-navigator-app-7c4d994b45-cfxcj
alertmanager-kube-prometheus-stack-alertmanager-0
create-kommander-thanos-query-stores-configmap-x5t8j
dkp-ceph-prereq-job-xqh57
gpu-feature-discovery-kwwk8
gpu-feature-discovery-l88mj
grafana-logging-548947487c-8dwxz
grafana-loki-pre-install-zr6qj
kommander-capimate-7bfd498cc9-p2vjn
kommander-webhook-9786644c6-tqnsf
kube-prometheus-stack-grafana-74b7f5f98-97m4r
kube-prometheus-stack-kube-state-metrics-58b99f6dc7-dw59v
kube-prometheus-stack-operator-57f998d8d7-ws6qx
kube-prometheus-stack-prometheus-node-exporter-md6lv
kube-prometheus-stack-prometheus-node-exporter-v47b8
kubecost-aggregator-0
kubecost-cost-analyzer-6645f49489-644jz
kubecost-pre-install-m4zjx
kubernetes-dashboard-api-6b948766f5-btmhf
kubernetes-dashboard-auth-66ccf9f644-87qtm
kubernetes-dashboard-kong-5d8d8bc7b8-np4mn
kubernetes-dashboard-metrics-scraper-7fbb77f87f-pbbp9
kubernetes-dashboard-web-6cd6897bc7-wpkzd
kubetunnel-5ff4dcd89-zmcng
logging-operator-6bbf786d9d-vhntl
logging-operator-logging-fluentbit-bfkvf
logging-operator-logging-fluentbit-bzjj4
logging-operator-logging-fluentd-0
nkp-insights-management-mgmt-cm-f799c5db5-9zmbv
nvidia-container-toolkit-daemonset-9l5r8
nvidia-container-toolkit-daemonset-x5tbz
nvidia-cuda-validator-9ddj2
nvidia-cuda-validator-z629w
nvidia-dcgm-5xlwt
nvidia-dcgm-exporter-77tb5
nvidia-dcgm-exporter-m9fz5
nvidia-dcgm-wdslq
nvidia-device-plugin-daemonset-bcs44
nvidia-device-plugin-daemonset-rmjqx
nvidia-operator-validator-tvx78
nvidia-operator-validator-wb926
prometheus-kube-prometheus-stack-prometheus-0
rook-ceph-crashcollector-nkpnai-gpupool-1-z9mz6-pl9k2-9xdncb7qm
rook-ceph-exporter-nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9-66dcscvdc
rook-ceph-mon-c-6677bd9675-bblzt
rook-ceph-osd-1-7649b4c9fd-ckqtl
rook-ceph-osd-prepare-rook-ceph-osd-set1-data-0vnfjx-5lr2w
rook-ceph-rgw-dkp-object-store-a-78c469b85f-xwbrd
thanos-query-54bb4455d-npzp2
velero-f5fdcccc-hp2fp
velero-pre-install-gb8h8
kserve-controller-manager-59d84566d-vrntb
cilium-4zvfr
cilium-envoy-2s6zw
cilium-envoy-9bd9h
cilium-p8kpp
kube-proxy-lrj8t
kube-proxy-rtd8g
metallb-speaker-lkjnf
metallb-speaker-mmfgw
llama32-iep-predictor-566f5bdd89-2llq5
nai-db-0
nai-operators-nai-clickhouse-operator-584d9f7b44-lsgwz
nai-otel-collector-collector-5jp8s
nai-otel-collector-collector-rjxww
nai-pulse-job-29558885-jj4cn
nai-ui-7bd775976b-wvkbj
node-feature-discovery-worker-gl2hk
node-feature-discovery-worker-p2t9f
nutanix-csi-node-qflqg
nutanix-csi-node-tv9lk

 

GPU ノードの Taint 設定

まず、Kubernetes ノードの Taint の設定状況を確認しておきます。デフォルトでは、GPU ノード プールで展開されたノード(nkpnai-gpupool-1-z9mz6-~)には Taint が設定されていません。

demo@nkp-work-01:~$ kubectl get nodes -o 'custom-columns=NAME:.metadata.name,GPU_PRESENT:.metadata.labels.nvidia\.com/gpu\.present,TAINTS:.spec.taints'
NAME                                 GPU_PRESENT   TAINTS
nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   true          <none>
nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   true          <none>
nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>        <none>
nkpnai-md-0-xqwvn-zlrmk-c5h88        <none>        <none>
nkpnai-md-0-xqwvn-zlrmk-knrqk        <none>        <none>
nkpnai-md-0-xqwvn-zlrmk-zhdm4        <none>        <none>
nkpnai-vvzvd-cctr2                   <none>        [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]]
nkpnai-vvzvd-ck76s                   <none>        [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]]
nkpnai-vvzvd-k4z42                   <none>        [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]]

 

GPU が搭載されている Kubernetesノードに、Taint を設定します。今回は、「nvidia.com/gpu.present: true」ラベルの付与されているノード(2台)に、まとめて Taint を設定しています。

  • Taint:nvidia.com/gpu=true:NoSchedule
demo@nkp-work-01:~$ kubectl taint node -l nvidia.com/gpu.present=true nvidia.com/gpu=true:NoSchedule
node/nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm tainted
node/nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9 tainted

 

これで、ノードに Taint が設定されました。

demo@nkp-work-01:~$ kubectl get nodes -o 'custom-columns=NAME:.metadata.name,GPU_PRESENT:.metadata.labels.nvidia\.com/gpu\.present,TAINTS:.spec.taints'
NAME                                 GPU_PRESENT   TAINTS
nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   true          [map[effect:NoSchedule key:nvidia.com/gpu value:true]]
nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   true          [map[effect:NoSchedule key:nvidia.com/gpu value:true]]
nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>        <none>
nkpnai-md-0-xqwvn-zlrmk-c5h88        <none>        <none>
nkpnai-md-0-xqwvn-zlrmk-knrqk        <none>        <none>
nkpnai-md-0-xqwvn-zlrmk-zhdm4        <none>        <none>
nkpnai-vvzvd-cctr2                   <none>        [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]]
nkpnai-vvzvd-ck76s                   <none>        [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]]
nkpnai-vvzvd-k4z42                   <none>        [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]]

 

すぐに Pod を移動するために、「kubectl drain ~」を実行してノードで起動されている Pod を退避しておきます。

kubectl drain nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm --ignore-daemonsets --delete-emptydir-data

 

ノードで Pod のスケジュールが停止されます。

demo@nkp-work-01:~$ kubectl get nodes
NAME                                 STATUS                     ROLES           AGE    VERSION
nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   Ready,SchedulingDisabled   <none>          34d    v1.33.5
nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   Ready                      <none>          102d   v1.33.5
nkpnai-md-0-xqwvn-zlrmk-62gc2        Ready                      <none>          102d   v1.33.5
nkpnai-md-0-xqwvn-zlrmk-c5h88        Ready                      <none>          102d   v1.33.5
nkpnai-md-0-xqwvn-zlrmk-knrqk        Ready                      <none>          102d   v1.33.5
nkpnai-md-0-xqwvn-zlrmk-zhdm4        Ready                      <none>          102d   v1.33.5
nkpnai-vvzvd-cctr2                   Ready                      control-plane   102d   v1.33.5
nkpnai-vvzvd-ck76s                   Ready                      control-plane   102d   v1.33.5
nkpnai-vvzvd-k4z42                   Ready                      control-plane   102d   v1.33.5

 

ノードの Drain を解除するには、下記のように kubectl uncordon を実行します。

kubectl uncordon nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm

 

これを GPU ノードで1台ずつ実施すると、GPU ノードから、GPU が不要な Pod が退避できます。今回の構成であれば、2台目の GPU ノードでも同様に Drain → Uncordon を実行します。

kubectl drain nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9 --ignore-daemonsets --delete-emptydir-data
kubectl uncordon nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9

 

GPU Pod と、DaemonSet から起動された Pod 以外は、GPU ノード以外に移動されました。

demo@nkp-work-01:~$ kubectl get pod -A -o wide | grep gpupool
kommander                           gpu-feature-discovery-kwwk8                                       1/1     Running     0               102d    192.168.7.219   nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
kommander                           gpu-feature-discovery-l88mj                                       1/1     Running     0               34d     192.168.8.102   nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
kommander                           kube-prometheus-stack-prometheus-node-exporter-md6lv              2/2     Running     0               102d    10.1.7.242      nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
kommander                           kube-prometheus-stack-prometheus-node-exporter-v47b8              2/2     Running     0               34d     10.1.7.237      nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
kommander                           logging-operator-logging-fluentbit-bfkvf                          1/1     Running     0               34d     192.168.8.52    nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
kommander                           logging-operator-logging-fluentbit-bzjj4                          1/1     Running     0               102d    192.168.7.148   nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
kommander                           nvidia-container-toolkit-daemonset-9l5r8                          1/1     Running     0               34d     192.168.8.215   nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
kommander                           nvidia-container-toolkit-daemonset-x5tbz                          1/1     Running     0               102d    192.168.7.56    nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
kommander                           nvidia-dcgm-5xlwt                                                 1/1     Running     0               34d     192.168.8.106   nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
kommander                           nvidia-dcgm-exporter-77tb5                                        1/1     Running     3 (102d ago)    102d    192.168.7.165   nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
kommander                           nvidia-dcgm-exporter-m9fz5                                        1/1     Running     0               34d     192.168.8.85    nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
kommander                           nvidia-dcgm-wdslq                                                 1/1     Running     0               102d    192.168.7.240   nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
kommander                           nvidia-device-plugin-daemonset-bcs44                              1/1     Running     0               34d     192.168.8.209   nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
kommander                           nvidia-device-plugin-daemonset-rmjqx                              1/1     Running     0               102d    192.168.7.142   nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
kommander                           nvidia-operator-validator-tvx78                                   1/1     Running     0               34d     192.168.8.223   nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
kommander                           nvidia-operator-validator-wb926                                   1/1     Running     0               102d    192.168.7.111   nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
kube-system                         cilium-4zvfr                                                      1/1     Running     0               34d     10.1.7.237      nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
kube-system                         cilium-envoy-2s6zw                                                1/1     Running     0               34d     10.1.7.237      nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
kube-system                         cilium-envoy-9bd9h                                                1/1     Running     0               102d    10.1.7.242      nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
kube-system                         cilium-p8kpp                                                      1/1     Running     0               102d    10.1.7.242      nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
kube-system                         kube-proxy-lrj8t                                                  1/1     Running     0               34d     10.1.7.237      nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
kube-system                         kube-proxy-rtd8g                                                  1/1     Running     0               102d    10.1.7.242      nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
metallb-system                      metallb-speaker-lkjnf                                             4/4     Running     0               102d    10.1.7.242      nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
metallb-system                      metallb-speaker-mmfgw                                             4/4     Running     0               34d     10.1.7.237      nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
nai-admin                           llama32-iep-predictor-566f5bdd89-nkdd4                            1/1     Running     0               10m     192.168.8.3     nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
nai-system                          nai-otel-collector-collector-2hgh5                                0/1     Init:0/1    0               47m     <none>          nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
nai-system                          nai-otel-collector-collector-cf6mq                                0/1     Init:0/1    0               49m     <none>          nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
node-feature-discovery              node-feature-discovery-worker-gl2hk                               1/1     Running     0               34d     192.168.8.131   nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>
node-feature-discovery              node-feature-discovery-worker-p2t9f                               1/1     Running     0               102d    192.168.7.88    nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
ntnx-system                         nutanix-csi-node-qflqg                                            3/3     Running     0               102d    10.1.7.242      nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   <none>           <none>
ntnx-system                         nutanix-csi-node-tv9lk                                            3/3     Running     1 (34d ago)     34d     10.1.7.237      nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   <none>           <none>

 

GPU Pod の Toleration の様子

GPU Pod には、下記のように Toleration(容認)を設定することで、Taint(nvidia.com/gpu=true:NoSchedule)が設定されている GPU ノードでも、Pod を起動できるようになります。これは、NAI で推論サービスを起動(エンドポイントを作成)した際には、自動設定されます。

demo@nkp-work-01:~$ kubectl get pod -n nai-admin llama32-iep-predictor-566f5bdd89-2llq5 -o yaml
apiVersion: v1
kind: Pod
metadata:
(省略)
spec:
(省略)
  tolerations:
  - effect: NoSchedule
    key: nvidia.com/gpu
    operator: Exists
  - effect: NoExecute
    key: node.kubernetes.io/not-ready
    operator: Exists
    tolerationSeconds: 300
  - effect: NoExecute
    key: node.kubernetes.io/unreachable
    operator: Exists
    tolerationSeconds: 300
(省略)   

 

おまけ:Taint の解除

ノードから Taint を削除するには、Taint の末尾に「-」を付与して、「kubectl taint node」を実行します。

demo@nkp-work-01:~$ kubectl taint node -l nvidia.com/gpu.present=true nvidia.com/gpu=true:NoSchedule-
node/nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm untainted
node/nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9 untainted

 

下記のように、Taint が削除されたことを確認できます。

demo@nkp-work-01:~$ kubectl get nodes -o 'custom-columns=NAME:.metadata.name,GPU_PRESENT:.metadata.labels.nvidia\.com/gpu\.present,TAINTS:.spec.taints'
NAME                                 GPU_PRESENT   TAINTS
nkpnai-gpupool-1-z9mz6-pl9k2-4n5fm   true          <none>
nkpnai-gpupool-1-z9mz6-pl9k2-9xdn9   true          <none>
nkpnai-md-0-xqwvn-zlrmk-62gc2        <none>        <none>
nkpnai-md-0-xqwvn-zlrmk-c5h88        <none>        <none>
nkpnai-md-0-xqwvn-zlrmk-knrqk        <none>        <none>
nkpnai-md-0-xqwvn-zlrmk-zhdm4        <none>        <none>
nkpnai-vvzvd-cctr2                   <none>        [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]]
nkpnai-vvzvd-ck76s                   <none>        [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]]
nkpnai-vvzvd-k4z42                   <none>        [map[effect:NoSchedule key:node-role.kubernetes.io/control-plane]]

 

以上。

©2026 gowatana
クリエイティブ・コモンズ・ライセンスこの 作品 は クリエイティブ・コモンズ 表示 4.0 国際 ライセンスの下に提供されています。