Instala Trident de NetApp en un clúster de VKS
Instala NetApp Trident como el aprovisionador de almacenamiento dinámico en tu clúster de Kubernetes Service de vSphere para integrar el almacenamiento NetApp ONTAP con tus cargas de trabajo de Kubernetes.
-
Asegúrate de que tu clúster ONTAP esté configurado y conectado a tu entorno de VMware Kubernetes.
-
Asegúrate de que tu clúster VKS tenga instaladas las herramientas iSCSI o NVMe si tus cargas de trabajo van a utilizar esos protocolos para almacenamiento.
-
Asegúrate de tener
kubectlinstalado en un equipo desde el que puedas conectarte al clúster VKS utilizando el archivo kubeconfig.
-
Instala el operador de Trident usando un chart de Helm siguiendo las instrucciones de la documentación de Trident:
Antes de ejecutar la instalación de Helm, crea y etiqueta el
tridentespacio de nombres. Laenforce=privilegedetiqueta es obligatoria porque Trident ejecuta cargas de trabajo con privilegios. Sin ella, el controlador de admisión de seguridad de pods de Kubernetes impedirá que se inicien los pods de Trident.kubectl create namespace trident kubectl label namespace trident pod-security.kubernetes.io/enforce=privilegedMostrar ejemplo
helm install trident netapp-trident/trident-operator --version 100.2606.0 --namespace tridentPara habilitar el registro de depuración, añade
--set tridentDebug=true:helm install trident netapp-trident/trident-operator --version 100.2606.0 --namespace trident --set tridentDebug=trueTambién puedes instalar Trident manualmente mediante el Trident Operator. Consulta los procedimientos que se indican en la documentación de Trident: "Implementa manualmente el operador Trident" Asegúrate de haber etiquetado el
tridentespacio de nombres con las etiquetas de seguridad de pod necesarias antes de instalar Trident manualmente. -
Confirma que todos los pods Trident están en ejecución en el clúster.
Mostrar ejemplo
kubectl get pods -n trident
Si los pods de Trident no se inician con un error de admisión de PodSecurity, es posible que las etiquetas de seguridad de los pods no se hayan aplicado altridentespacio de nombres antes de la instalación. Usa--overwritepara volver a aplicarlas y luego verifica que los pods se inicien.kubectl label namespace trident pod-security.kubernetes.io/enforce=privileged --overwrite
Prepara el backend de almacenamiento y los archivos de configuración de StorageClass para tu entorno
-
Configura un backend de Trident para ONTAP definiendo los datos de conexión necesarios y los parámetros de almacenamiento.
-
Define clases de almacenamiento en Kubernetes que se corresponden con los backends de almacenamiento NetApp. Estas clases especifican parámetros como las características de rendimiento y las políticas de replicación.
Define los backends y las clases de almacenamiento de Trident para los siguientes protocolos según lo requieran tus cargas de trabajo:
-
NAS (controlador ontap-nas)
-
NAS Economy (controlador ontap-nas-economy)
-
SAN (controlador ontap-san) para los protocolos iSCSI, FC o NVMe
-
SAN Economy (ontap-san-economy driver) para iSCSI
NASCrea un TridentBackendConfig y un StorageClass para ONTAP NAS para habilitar el aprovisionamiento de almacenamiento persistente basado en NFS. La configuración del backend incluye credenciales almacenadas en un Kubernetes Secret y hace referencia a tu ONTAP SVM y a tu LIF de gestión.
Ejemplo de secreto de backend y archivo de configuración de backend con autenticación mediante nombre de usuario y contraseña (guardar como
tbc-nas.yaml):# tbc-nas.yaml apiVersion: v1 kind: Secret metadata: name: tbc-nas-secret namespace: trident type: Opaque data: username: "<base64-encoded cluster admin username>" password: "<base64-encoded cluster admin password>" --- apiVersion: trident.netapp.io/v1 kind: TridentBackendConfig metadata: name: tbc-nas namespace: trident spec: version: 1 storageDriverName: ontap-nas managementLIF: <ONTAP management LIF> backendName: tbc-nas svm: <your SVM name> storagePrefix: <your prefix for all volume names created using this backend configuration> defaults: nameTemplate: "{{ .config.StoragePrefix }}_{{ .volume.Namespace }}_{{ .volume.RequestName }}" credentials: name: tbc-nas-secretEjemplo de secreto de backend y archivo de configuración de backend con autenticación mediante certificado de cliente (guardar como
tbc-nas.yaml):# tbc-nas.yaml apiVersion: v1 kind: Secret metadata: name: ontap-nas-secret namespace: trident type: Opaque stringData: clientPrivateKey: <client private key value> --- apiVersion: trident.netapp.io/v1 kind: TridentBackendConfig metadata: name: tbc-nas namespace: trident spec: version: 1 storageDriverName: ontap-nas managementLIF: <ONTAP management LIF> backendName: tbc-nas svm: <your SVM name> storagePrefix: <your prefix for all volume names created using this backend configuration> credentials: name: ontap-nas-secret clientCertificate: <client certificate>StorageClass definición (guarda como
sc-nas.yaml):mountOptionses un parámetro opcional que especifica opciones de montaje adicionales para volúmenes NFS. La opciónnconnectpermite múltiples conexiones TCP en paralelo para un único montaje NFS, lo que puede mejorar el rendimiento en cargas de trabajo de alto rendimiento. El valor por defecto es 1, pero se puede aumentar hasta el máximo permitido por el sistema ONTAP.
-
ONTAP admite hasta 16 conexiones para un único montaje NFS en un cliente compatible con nconnect. Trident transmite las opciones de montaje directamente a los nodos de trabajo de Kubernetes, así que elige un valor que sea compatible tanto con el cliente de NFS del nodo de trabajo como con ONTAP; en el siguiente ejemplo se utilizan cuatro conexiones.
# sc-nas.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: sc-nas
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-nas"
media: "ssd"
provisioningType: "thin"
snapshots: "true"
allowVolumeExpansion: true
mountOptions:
- nconnect=4
Crea un TridentBackendConfig y un StorageClass para el controlador ONTAP NAS Economy para habilitar el aprovisionamiento de almacenamiento persistente basado en NFS usando qtrees. La configuración del backend incluye credenciales almacenadas en un Secret de Kubernetes y hace referencia a tu SVM de ONTAP y a tu LIF de gestión.
Ejemplo de secreto de backend y archivo de configuración de backend con autenticación mediante nombre de usuario y contraseña (guardar como tbc-nas-economy.yaml):
# tbc-nas-economy.yaml
apiVersion: v1
kind: Secret
metadata:
name: tbc-nas-economy-secret
namespace: trident
type: Opaque
data:
username: "<base64-encoded cluster admin username>"
password: "<base64-encoded cluster admin password>"
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: tbc-nas-economy
namespace: trident
spec:
version: 1
storageDriverName: ontap-nas-economy
managementLIF: <ONTAP management LIF>
backendName: tbc-nas-eco
svm: <your SVM name>
storagePrefix: <your prefix for all volume names created using this backend configuration>
defaults:
nameTemplate: "{{ .config.StoragePrefix }}_{{ .volume.Namespace }}_{{ .volume.RequestName }}"
credentials:
name: tbc-nas-economy-secret
StorageClass definición (guarda como sc-nas-economy.yaml):
# sc-nas-economy.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: sc-nas-economy
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-nas-economy"
media: "ssd"
provisioningType: "thin"
allowVolumeExpansion: true
mountOptions:
- nconnect=4
Crea un TridentBackendConfig y un StorageClass para ONTAP SAN con iSCSI para habilitar el aprovisionamiento de almacenamiento en bloques basado en iSCSI. La configuración del backend utiliza el controlador ontap-san e incluye credenciales almacenadas en un secreto de Kubernetes. El sanType parámetro adopta por defecto el protocolo iSCSI si se omite.
Secreto del backend y archivo de configuración del backend con autenticación mediante nombre de usuario y contraseña (guardar como tbc-iscsi.yaml):
# tbc-iscsi.yaml
apiVersion: v1
kind: Secret
metadata:
name: backend-tbc-ontap-iscsi-secret
namespace: trident
type: Opaque
data:
username: "<base64-encoded cluster admin username>"
password: "<base64-encoded cluster admin password>"
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: ontap-iscsi
namespace: trident
spec:
version: 1
storageDriverName: ontap-san
managementLIF: <ONTAP management LIF>
backendName: ontap-iscsi
svm: <your SVM name>
credentials:
name: backend-tbc-ontap-iscsi-secret
Secreto del backend y archivo de configuración del backend con autenticación mediante certificado de cliente (guardar como tbc-iscsi.yaml):
# tbc-iscsi.yaml
apiVersion: v1
kind: Secret
metadata:
name: backend-tbc-ontap-iscsi-secret
namespace: trident
type: Opaque
stringData:
clientPrivateKey: <client private key>
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: ontap-iscsi
namespace: trident
spec:
version: 1
storageDriverName: ontap-san
managementLIF: <ONTAP management LIF>
backendName: ontap-iscsi
svm: <your SVM name>
credentials:
name: backend-tbc-ontap-iscsi-secret
clientCertificate: <client certificate>
StorageClass definición (guarda como sc-iscsi.yaml):
# sc-iscsi.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: sc-iscsi
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-san"
media: "ssd"
provisioningType: "thin"
fsType: ext4
snapshots: "true"
allowVolumeExpansion: true
Crea un TridentBackendConfig y un StorageClass para ONTAP SAN con NVMe para habilitar el aprovisionamiento de almacenamiento en bloques basado en NVMe. La configuración del backend utiliza el controlador ontap-san e incluye credenciales almacenadas en un Secret de Kubernetes. El parámetro sanType debe establecerse en nvme.
Secreto del backend y archivo de configuración del backend con autenticación mediante nombre de usuario y contraseña (guardar como tbc-nvme.yaml):
# tbc-nvme.yaml
apiVersion: v1
kind: Secret
metadata:
name: backend-tbc-ontap-nvme-secret
namespace: trident
type: Opaque
data:
username: "<base64-encoded cluster admin username>"
password: "<base64-encoded cluster admin password>"
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: ontap-nvme
namespace: trident
spec:
version: 1
storageDriverName: ontap-san
sanType: nvme
managementLIF: <ONTAP management LIF>
backendName: ontap-nvme
svm: <your SVM name>
credentials:
name: backend-tbc-ontap-nvme-secret
Secreto del backend y archivo de configuración del backend con autenticación mediante certificado de cliente (guardar como tbc-nvme.yaml):
# tbc-nvme.yaml
apiVersion: v1
kind: Secret
metadata:
name: backend-tbc-ontap-nvme-secret
namespace: trident
type: Opaque
stringData:
clientPrivateKey: <client private key>
---
apiVersion: trident.netapp.io/v1
kind: TridentBackendConfig
metadata:
name: ontap-nvme
namespace: trident
spec:
version: 1
storageDriverName: ontap-san
sanType: nvme
managementLIF: <ONTAP management LIF>
backendName: ontap-nvme
svm: <your SVM name>
credentials:
name: backend-tbc-ontap-nvme-secret
clientCertificate: <client certificate>
StorageClass definición (guarda como sc-nvme.yaml):
# sc-nvme.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: sc-nvme
provisioner: csi.trident.netapp.io
parameters:
backendType: "ontap-san"
media: "ssd"
provisioningType: "thin"
fsType: ext4
snapshots: "true"
allowVolumeExpansion: true
Consulta la documentación de Trident para ver más ejemplos de archivos YAML e información sobre los modos de acceso y los modos de volumen compatibles con los controladores SAN y NAS.
Crea un archivo de configuración de VolumeSnapshotClass
Crea una definición de VolumeSnapshotClass. Esta configuración habilita las operaciones basadas en instantáneas para los volúmenes persistentes.
Definición de VolumeSnapshotClass (guarda como snapshot-class.yaml):
# snapshot-class.yaml
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: trident-snapshotclass
driver: csi.trident.netapp.io
deletionPolicy: Retain
Aplica los archivos de configuración a tu clúster
Aplica los archivos de configuración que creaste en los pasos anteriores al clúster de vSphere Kubernetes Service usando kubectl. Esto crea los secretos, las configuraciones de backend, las clases de almacenamiento y la clase de instantáneas necesarios en tu clúster.
-
Aplica los archivos TridentBackendConfig y StorageClass para cada protocolo que configuraste.
kubectl apply -f tbc-nas.yaml -n trident kubectl apply -f sc-nas.yaml kubectl apply -f tbc-nas-economy.yaml -n trident kubectl apply -f sc-nas-economy.yaml kubectl apply -f tbc-iscsi.yaml -n trident kubectl apply -f sc-iscsi.yaml kubectl apply -f tbc-nvme.yaml -n trident kubectl apply -f sc-nvme.yaml kubectl apply -f snapshot-class.yaml -
Verifica que los recursos se hayan creado correctamente.
Revisa los objetos TridentBackendConfig:
kubectl get tbc -n tridentComprueba los objetos de StorageClass:
kubectl get storageclassRevisa VolumeSnapshotClass:
kubectl get volumesnapshotclass
Configura las clases predeterminadas de almacenamiento y de instantáneas de Trident
Configura la StorageClass y la VolumeSnapshotClass de Trident como valores predeterminados en el clúster del servicio de Kubernetes de vSphere.
-
Configura el StorageClass predeterminado de Trident.
Configura un StorageClass respaldado por Trident como predeterminado del clúster para que las PersistentVolumeClaims lo usen automáticamente cuando no se especifique ninguna clase de almacenamiento.
Asegúrate de que solo una StorageClass esté configurada como predeterminada. Si otra StorageClass ya está configurada como predeterminada, establece su anotación en
false.Desde la CLI:
kubectl patch storageclass <storage class name> -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}' -
Establece el Trident VolumeSnapshotClass predeterminado.
Configura un VolumeSnapshotClass compatible con Trident como valor predeterminado del clúster para habilitar las operaciones basadas en instantáneas para los volúmenes persistentes. Esto asegura que VolumeSnapshots use automáticamente el controlador CSI de Trident cuando no se especifique ninguna clase de instantánea.
Asegúrate de que solo haya un VolumeSnapshotClass configurado como predeterminado. Si ya hay otro VolumeSnapshotClass configurado como predeterminado, establece su anotación en
false.Desde la CLI:
kubectl patch volumesnapshotclass <snapshot class name> --type=merge -p '{"metadata":{"annotations":{"snapshot.storage.kubernetes.io/is-default-class":"true"}}}'
Utiliza las reclamaciones de volumen persistente de Kubernetes para solicitar almacenamiento para las cargas de trabajo
Trident aprovisiona automáticamente los volúmenes necesarios desde el almacenamiento backend NetApp. Consulta "Implementa cargas de trabajo con almacenamiento persistente" para ver ejemplos de cómo implementar una carga de trabajo con PVCs en un clúster de VKS.