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 di
https://<il vostro_tenant_id>.k8sgpu.net
- Ricordativi di munirvi di autenticazione