NetApp beschreibt Trident wie folgt:
Astra Trident ist ein Open-Source- und vollständig unterstützter Storage-Orchestrator für Container und Kubernetes-Distributionen, einschließlich Red hat OpenShift. Trident kann mit dem gesamten NetApp Storage-Portfolio eingesetzt werden, einschließlich NetApp ONTAP und Element Storage-Systeme. Es unterstützt auch NFS- und iSCSI-Verbindungen. Trident beschleunigt den DevOps-Workflow, da Endbenutzer Storage über ihre NetApp Storage-Systeme bereitstellen und managen können, ohne dass ein Storage-Administrator eingreifen muss.
In meinem Fall hatte ich eine NetApp FAS8200 im Zugriff und dort sind folgende Vorarbeiten nötig:
Eigenen VServer erzeugen
fas8200::> vserver create -vserver NFS-Datastore06-K8S -subtype default -rootvolume NFS_Datastore06_K8S_root -rootvolume-security-style unix -language C.UTF-8 -snapshot-policy none -data-services data-iscsi,data-nfs,data-cifs,data-flexcache,data-nvme-tcp -foreground true -aggregate aggr_n1_sas_1TB
[Job 7843] Job succeeded:
Vserver creation completed.
"Dummerweise" hat eine LIF eine Firewall-Policy und es braucht deswegen 2 LIF´s.
Ein Data-LIF erzeugen
DataLIF
fas8200::> net int create -vserver NFS-Datastore06-K8S -lif NFS-Datastore06-K8S-lif1 -address 172.16.14.10 -netmask 255.255.255.0 -service-policy default-data-files -home-node fas8200-n1 -home-port a0a-14
(network interface create)
Ein extra MGMT-Lif erzeugen
MGMT-LIF
fas8200::> net int create -vserver NFS-Datastore06-K8S -lif NFS-Datastore06-K8S-adm -service-policy default-management -address 172.16.14.11 -netmask 255.255.255.0 -home-node fas8200-n1 -home-port a0a-14
Default Route einstellen
fas8200::> route add -vserver NFS-Datastore06-K8S -destination 0.0.0.0/0 -gateway 172.16.14.1
Einen ArbeitsUser erstellen (mit den Rechten auf die OntapAPI und SSH)
fas8200::> security login create -user-or-group-name sdeiss -application ontapi -authentication-method password -role vsadmin -is-ns-switch-group no -second-authentication-method none -vserver NFS-Datastore06-K8S
Please enter a password for user 'sdeiss':
Please enter it again:
fas8200::> security login create -user-or-group-name sdeiss -application ssh -authentication-method password -role vsadmin -is-ns-switch-group no -second-authentication-method none -vserver NFS-Datastore06-K8S
In der Netapp Dokumentation wird Trident mit dem HELM-Tool installiert. Dieses HELM muss erst mal in Kubernetes installiert werden:
https://helm.sh/de/docs/intro/quickstart/
Wir hatten uns auf eine Installation per Script entschieden.
https://helm.sh/de/docs/intro/install/
curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3
chmod 700 get_helm.sh
./get_helm.sh
Fehlermeldung weil das passende Repository nicht eingehängt war:
helm repo add netapp-trident https://netapp.github.io/trident-helm-chart
mkellerer@k3s-n2:~$ helm repo list
NAME URL
netapp-trident https://netapp.github.io/trident-helm-chart
mkellerer@k3s-n2:~$ helm search repo trident
NAME CHART VERSION APP VERSION DESCRIPTION
netapp-trident/trident-operator 100.2402.0 24.02.0 A Helm chart for deploying NetApp's Trident CSI...
mkellerer@k3s-n2:~$
Leider kam bei dem folgenden Befehl immer eine Fehlermeldung:
helm install trident netapp-trident/trident-operator --version 24.02.0 --create-namespace --namespace trident --set tridentDebug=true
Error: INSTALLATION FAILED: chart "trident-operator" matching 24.02.0 not found in netapp-trident index. (try 'helm repo update'): no chart version found for trident-operator-24.02.0
mkellerer@k3s-n2:~$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "netapp-trident" chart repository
Update Complete. ⎈Happy Helming!⎈
mkellerer@k3s-n2:~$ helm repo list
NAME URL
netapp-trident https://netapp.github.io/trident-helm-chart
mkellerer@k3s-n2:~$ helm search repo trident
NAME CHART VERSION APP VERSION DESCRIPTION
netapp-trident/trident-operator 100.2402.0 24.02.0 A Helm chart for deploying NetApp's Trident CSI...
mkellerer@k3s-n2:~$
Erst die Angabe der Chart Version, statt der APP Version brachte den Erfolg
helm install trident netapp-trident/trident-operator --version 100.2402.0 --create-namespace --namespace trident --set tridentDebug=true
NAME: trident
LAST DEPLOYED: Fri Mar 8 09:31:24 2024
NAMESPACE: trident
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Thank you for installing trident-operator, which will deploy and manage NetApp's Trident CSI
storage provisioner for Kubernetes.
Your release is named 'trident' and is installed into the 'trident' namespace.
Please note that there must be only one instance of Trident (and trident-operator) in a Kubernetes cluster.
To configure Trident to manage storage resources, you will need a copy of tridentctl, which is
available in pre-packaged Trident releases. You may find all Trident releases and source code
online at https://github.com/NetApp/trident.
To learn more about the release, try:
$ helm status trident
$ helm get all trident
kubectl run -i --tty ping --image=busybox --restart=Never --rm -- \ ping <management IP>
wget https://github.com/NetApp/trident/releases/download/v24.02.0/trident-installer-24.02.0.tar.gz
tar -xf trident-installer-24.02.0.tar.gz
cd trident-installer/
./tridentctl install -n trident
mkellerer@k3s-n2:~/trident-installer$ kubectl get pods -n trident
NAME READY STATUS RESTARTS AGE
trident-operator-67d6fd899b-2b6n4 1/1 Running 1 (10m ago) 10m
mkellerer@k3s-n2:~/trident-installer$ ./tridentctl install -n trident
INFO Starting Trident installation. namespace=trident
INFO Created controller service account.
INFO Created controller role.
INFO Created controller role binding.
INFO Created controller cluster role.
INFO Created controller cluster role binding.
INFO Created node linux service account.
INFO Creating or patching the Trident CRDs.
INFO Applied latest Trident CRDs.
INFO Added finalizers to custom resource definitions.
INFO Created Trident service.
INFO Created Trident encryption secret.
INFO Created Trident protocol secret.
INFO Created Trident resource quota.
INFO Created Trident deployment.
INFO Created Trident daemonset.
INFO Waiting for Trident pod to start.
INFO Trident pod started. deployment=trident-controller namespace=trident pod=trident-controller-7dbb6d9786-zc2bk
INFO Waiting for Trident REST interface.
INFO Trident REST interface is up. version=24.02.0
INFO Trident installation succeeded.
mkellerer@k3s-n2:~/trident-installer$ kubectl get pods -n trident
NAME READY STATUS RESTARTS AGE
trident-controller-7dbb6d9786-zc2bk 6/6 Running 0 31s
trident-node-linux-g7xcw 1/2 Running 0 31s
trident-node-linux-lskr6 1/2 Running 0 31s
trident-node-linux-pl8p7 1/2 Running 0 31s
trident-operator-67d6fd899b-2b6n4 1/1 Running 1 (11m ago) 11m
mkellerer@k3s-n2:~/trident-installer$
mkellerer@k3s-n2:~/trident-installer$ ./tridentctl -n trident version
+----------------+----------------+
| SERVER VERSION | CLIENT VERSION |
+----------------+----------------+
| 24.02.0 | 24.02.0 |
+----------------+----------------+
mkellerer@k3s-n2:~/trident-installer$
Da die Pods nur Dienste nutzen können, die ein Worker auch kann, muss auf jedem Node die NFS-Utilities installiert werden.
https://docs.netapp.com/de-de/trident/trident-use/worker-node-prep.html#ermittlung-des-node-service
sudo apt-get install -y nfs-common
https://docs.netapp.com/de-de/trident/trident-use/ontap-nas.html
---
Jetzt eine backend.yaml Datei erzeugen.
apiVersion: v1
kind: Secret
metadata:
name: backend-tbc-ontap-nas-secret
namespace: trident
type: Opaque
stringData:
username: mkellerer
password: xxxxxxxx
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: backend-tbc-ontap-nas
namespace: trident
spec:
version: 1
storageDriverName: ontap-nas
managementLIF: 172.16.14.11
dataLIF: 172.16.14.10
backendName: tbc-ontap-nas
svm: NFS-Datastore-K8S
autoExportCIDRs:
- 172.16.155.0/24
autoExportPolicy: true
credentials:
name: backend-tbc-ontap-nas-secret
Dann die Datei dem Kubernetes Cluster bekannt geben:
kubectl apply -f backend.yaml
Jetzt braucht es eine Storage Classe ( Gold,Silber,Bronze usw ).
Dazu erzeugt man eine Date mit dem Namen: storageclass.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ontap-nfs
provisioner: csi.trident.netapp.io
mountOptions: ["rw", "nfsvers=3", "proto=tcp"]
parameters:
backendType: "ontap-nas"
Und dem Cluster bekannt geben und bestehende StorageClassen erweitern
kubectl apply -f storageclass.yaml
kubectl patch storageclass ontap-nfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
Zur Überprüfung am Besten sich das Backend und die PODs ansehen:
kubectl get pods -n trident-operator
kubectl get tridentbackend -n trident-operator
kubectl get sc
