Vai al contenuto

Come Integrare Serverless In Un Cluster K8s

Una volta aver fatto accesso al pannello e avere ottenuto il kubeconfig del nostro tenant, è possibile integrare i servizi serverless GPU nel proprio cluster privato.

Installare il Chart

Per utilizzare i nostri servizi è necessario installare il nostro Chart sul tuo cluster tramite Helm.

Per installare il relativo chart è possibile eseguire i seguenti comandi sostituendo:

  • {tenant name} con il nome del tenant desiderato
  • {path to your tenant kubeconfig} con il percorso assoluto al tuo kubeconfig
helm repo add clastix https://clastix.github.io/charts
helm repo update

helm upgrade --install k8sgpu clastix/k8sgpu \
  --namespace kube-system \
  --set "k8sgpuOptions.tenantName={tenant name}" \
  --set-file "kubeConfigSecret.content={path to your tenant kubeconfig}"

Verificare la presenza del nodo GPU

Installato il chart il nodo k8s.gpu dovrebbe comparire nel tuo cluster:

kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s.gpu Ready agent 37m v1.0.0
...

Verificare le RuntimeClass disponibili

Una volta che il nodo sarà reso disponibile è possibile visualizzare tutte le RuntimeClass disponibili:

Info

Una RuntimeClass non è altro che un insieme di risorse GPU definite da rendere disponibili ai nostri POD:

kubectl get runtimeclasses
NAME HANDLER AGE
seeweb-nvidia-1xa100 nvidia 13h
seeweb-nvidia-1xa30 nvidia 13h
seeweb-nvidia-1xl4 nvidia 13h

Utilizzare le RuntimeClass

Una volta selezionata la RuntimeClass di interesse è sufficiente inizializzare i nostri POD specificando quale RuntimeClass si desidera utilizzare:

cat << EOF | kubectl create -f -
apiVersion: v1
kind: Pod
metadata:
  name: nvidia-smi
spec:
  restartPolicy: OnFailure
  runtimeClassName: seeweb-nvidia-1xa30
  #runtimeClassName: seeweb-nvidia-1xl4
  #runtimeClassName: seeweb-nvidia-1xa100
  containers:
  - name: nvidia
    image: nvidia/cuda:11.0.3-base-ubuntu20.04
    command: ["/bin/bash", "-c", "--"]
    args: ["sleep 3600"]
    imagePullPolicy: Always
  ## Following toleration is required on some distributions, e.g. AKS
  ## as no CNI is assigned on virtual nodes
  # tolerations:
  # - key: "node.kubernetes.io/network-unavailable"
  # operator: "Exists"
  # effect: "NoSchedule"
EOF

Il POD dovrebbe ora apparire sul nodo GPU virtuale con la possibilità di accedere alla GPU specificata dalla RuntimeClass:

kubectl get pods
NAME READY STATUS RESTARTS AGE
nvidia-smi 1/1 Running 0 37m

Possiamo verificare l'accesso alla GPU con il seguente comando:

kubectl exec nvidia-smi -- nvidia-smi
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI                   550.54.15 Driver Version:     550.54.15 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name                  Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan Temp   Perf           Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0 NVIDIA A30                       On |   00000000:06:00.0 Off |                    0 |
| N/A 32C    P0                27W / 165W |        0MiB / 24576MiB |       0%     Default |
|                                         |                        |             Disabled |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
| GPU  GI  CI        PID  Type  Process name                                   GPU Memory |
|      ID  ID                                                                  Usage      |
|=========================================================================================|
| No running processes found                                                              |
+-----------------------------------------------------------------------------------------+

Disisnstallare il Chart

Per disinstallare il Chart dal proprio Cluster è sufficiente eseguire i seguenti comandi:

helm uninstall k8sgpu --namespace kube-system

Limitazioni Correnti

K8sGPU Agent è una soluzione in corso d'opera. Come molte cose nuove, è qualcosa che può essere migliorato sempre di più. Vi preghiamo di essere pazienti e di fornire un onesti per aiutarci a migliorarla. Attualmente sono presenti le seguenti limitazioni (alcune saranno rimosse nelle prossime versioni):

  • I pod non possono montare lo storage locale e CSI PersistentVolume
  • I pod non possono accedere ad altri servizi kubernetes locali
  • I pod possono accedere solo allo storage S3
  • I pod non possono essere esposti sul cluster locale
  • I Pod possono essere esposti solo su Internet pubblico e vi si accede con l'endpoint HTTPS nella forma dihttps://<il vostro_tenant_id>.k8sgpu.net
  • Ricordativi di munirvi di autenticazione