Requisitos previos para la implementación de AI Data Engine en varios nodos
Para una implementación de AI Data Engine (AIDE) con varios nodos, debes aportar tu propio clúster de Kubernetes. El instalador implementa AI Data Engine en tu clúster existente, pero no lo aprovisiona ni lo gestiona. Prepara el clúster, los nodos, el almacenamiento y el host del instalador antes de ejecutar el comando de instalación.
Tu entorno debe cumplir los requisitos que se indican en las siguientes secciones antes de ejecutar el comando de instalación. Para obtener información sobre el dimensionamiento de los nodos, las versiones de Kubernetes compatibles y los puertos de red, consulta "Requisitos AIDE".
Host de instalación
El host de instalación es un equipo de gestión ligero. No ejecuta cargas de trabajo de AI Data Engine. Debe ser un equipo Linux con bash y acceso de red al servidor de la API de Kubernetes. No es compatible con macOS. Antes de ejecutar comandos de shell en esta página, cambia a bash.
-
Tienes un archivo kubeconfig válido para el clúster de destino. Especifícalo con la opción
--kubeconfigo con la variable de entornoKUBECONFIG. Si no proporcionas uno, el instalador te lo pedirá. El contexto actual debe apuntar al clúster en el que quieres realizar el despliegue. Para comprobarlo o cambiarlo, ejecutakubectl config current-contextokubectl config use-context <name>. -
El usuario de kubeconfig tiene permisos de cluster-admin o equivalentes en el clúster de destino. Como mínimo, el usuario puede hacer lo siguiente:
-
Lee los espacios de nombres, las StorageClasses y los nodos.
-
Aplica recursos personalizados.
-
Crear PersistentVolumes, PersistentVolumeClaims, Secrets, ConfigMaps, Deployments, Services, StatefulSets, DaemonSets, CronJobs y Jobs.
-
Crea y actualiza CustomResourceDefinitions. El instalador instala las definiciones de
aidecomponents,aideservicesyaideoperators. -
Crea ClusterRoles y ClusterRoleBindings.
-
Crea ServiceAccounts, Roles y RoleBindings en el espacio de nombres
aide.
-
-
El host de instalación ejecuta Linux y tiene bash 4.0 o posterior, curl y tar.
-
El instalador descarga automáticamente
helm,kubectl, yjqen un directorio de herramientas. Sikubectlya se encuentra en tuPATH, el instalador utiliza esa copia y no descarga otra. No es necesario instalar ninguna de estas herramientas por adelantado. El instalador no las añade a tuPATH. -
El directorio predeterminado de herramientas es
/opt/netapp/aide/.aide-installer-tools. El instalador también guarda allí el registro de instalación. Si se puede escribir en el directorio predeterminado, puedes omitir la--tools-diropción.-
Si el directorio predeterminado no tiene permiso de escritura y ejecutas el instalador desde un terminal, el instalador te pedirá otro directorio. Pulsa Intro para usar
$HOME/.cache/netapp/aide. -
Si el directorio predeterminado no tiene permisos de escritura y el instalador no tiene terminal, la instalación se detiene. Especifica un directorio que te pertenezca con la opción
--tools-dir, por ejemplo--tools-dir "$HOME/.aide-installer-tools".
-
-
Ejecuta el instalador como el usuario que tiene acceso al clúster.
Los kubeconfigs de clústeres gestionados se autentican mediante un plugin de credenciales exec que lee el inicio de sesión de la CLI de la nube del usuario actual. Ejecuta el instalador como el usuario que tiene ese inicio de sesión. Para obtener instrucciones específicas de AKS, consulta Requisitos AKS.
Al iniciarse, el instalador ejecuta kubectl config current-context y kubectl cluster-info y se detiene si alguno de los comandos falla. Ejecuta primero estos comandos, como el mismo usuario y con los mismos privilegios que utilizas para el instalador. El instalador también te pedirá que confirmes que has completado la preparación del nodo, del NFS y del clúster tal y como se indica en las secciones siguientes.
Clúster de Kubernetes
-
Proporcionas un clúster de Kubernetes que ejecuta RKE2, OpenShift o Azure Kubernetes Service (AKS) y cumple con "versiones compatibles de Kubernetes".
-
Los componentes de AI Data Engine se ejecutan en los nodos que etiquetes. Consulta Etiquetas de nodos. Las demás cargas de trabajo de esos nodos no pueden usar los puertos 80 y 443 del host.
-
El clúster cuenta con al menos tres nodos con capacidad asignable suficiente para tu configuración. Consulta "dimensionamiento de nodos".
-
Cada nodo tiene acceso de red saliente al registro de contenedores NetApp. Consulta "Acceso a Internet saliente". Si restringes de dónde se pueden extraer las imágenes, permite el registro de NetApp.
-
Si tu entorno requiere un proxy de salida, consulta "Más información sobre los proxies para AI Data Engine". Para implementar con un proxy, incluida la configuración del proxy del entorno de ejecución de contenedores y la confianza en el certificado de CA en cada nodo, sigue "Implementar AI Data Engine como una implementación multinodo con un proxy".
Preparación del nodo
Sigue estos pasos en cada nodo que programa cargas de trabajo de AI Data Engine.
Versión del kernel
Se recomienda utilizar el núcleo de Linux 5.3 o posterior para la opción de montaje NFS nconnect, que proporciona el rendimiento que requiere el volumen de configuración compartido. Para conocer las distribuciones y versiones que cumplen esta recomendación, consulta la guía sobre el núcleo de Linux en "Requisitos AIDE". Para comprobar la versión del núcleo, ejecuta uname -r.
Parámetros de kernel
-
Comprueba el valor de
net.core.somaxconn:sysctl net.core.somaxconnSi el valor es 511 o superior, no es necesario realizar ninguna acción. Si el valor es inferior, ponte en contacto con el servicio de asistencia de NetApp antes de continuar.
-
Añade las siguientes líneas a
/etc/sysctl.conf:vm.max_map_count=262144 fs.inotify.max_user_instances=1280 sunrpc.min_resvport=1000Si un nodo ya tiene un valor mayor para
vm.max_map_countofs.inotify.max_user_instances, mantén el valor mayor. Establece siempresunrpc.min_resvport=1000. -
Carga el
sunrpcmódulo, haz que sea persistente y aplica la configuración:sudo modprobe sunrpc echo "sunrpc" | sudo tee /etc/modules-load.d/aide-sunrpc.conf sudo sysctl -p -
Comprueba la configuración de cada nodo:
lsmod | grep sunrpc cat /etc/modules-load.d/aide-sunrpc.conf sysctl vm.max_map_count sunrpc.min_resvportEl módulo
sunrpcdebe estar cargado, el archivo debe contenersunrpc,vm.max_map_countdebe ser como mínimo 262144 ysunrpc.min_resvportdebe ser 1000. Sisysctl -pinformacannot stat /proc/sys/…para una clave, carga el módulo del kernel para esa configuración, por ejemplosudo modprobe sunrpc, y vuelve a ejecutarsudo sysctl -p.
Directorios del host
Crea los siguientes directorios y configura su titularidad y permisos:
sudo mkdir -p /var/lib/netapp/aide /var/lib/netapp/aide/filebeat /var/lib/netapp/aide/elasticsearch /var/log/netapp/aide
sudo chown 4321:4321 /var/lib/netapp/aide /var/lib/netapp/aide/filebeat /var/lib/netapp/aide/elasticsearch /var/log/netapp/aide
sudo chmod 775 /var/lib/netapp/aide /var/lib/netapp/aide/filebeat /var/lib/netapp/aide/elasticsearch /var/log/netapp/aide
Compatibilidad con Kerberos CIFS/SMB (opcional)
El paquete cifs-utils solo es necesario para el análisis de CIFS/SMB basado en Kerberos, en todos los nodos que programan cargas de trabajo de AI Data Engine. Omite este paso si utilizas CIFS solo con NTLM o si no realizas análisis de recursos compartidos SMB.
sudo dnf install -y cifs-utils
sudo apt-get update
sudo apt-get install -y cifs-utils
Servidor NFS
El volumen de configuración de AI Data Engine usa NFS como respaldo. Debes proporcionar un servidor NFS y una export antes de ejecutar el instalador. La instalación no puede continuar sin ellos. Especifica el nombre de host o la dirección IP del servidor NFS con --nfs-server <host> y la ruta de la export con --nfs-data-share <path> al ejecutar el comando de instalación.
Para conocer los requisitos de dimensionamiento de la implementación y de rendimiento del almacenamiento, consulta "dimensionamiento de nodos".
| Requisito | Valor |
|---|---|
Acceso de exportación |
Lectura/escritura, accesible desde todas las direcciones IP de los nodos de Kubernetes |
Propietario |
UID:GID 4321:4321 |
Modo de permisos |
0770 |
Squash |
No reasignes el UID 4321 a otro usuario. El UID 4321 debe conservar el acceso de escritura a la exportación montada. |
Para preparar la exportación, ejecuta los siguientes comandos en el servidor NFS o en cualquier host que tenga montada la exportación:
sudo mkdir -p <nfs-data-share>
sudo chown 4321:4321 <nfs-data-share>
sudo chmod 0770 <nfs-data-share>
El instalador crea los subdirectorios necesarios en export durante la primera instalación.
Configuración del clúster
Espacio de nombres
El espacio de nombres de Kubernetes aide debe existir antes de ejecutar el instalador. El instalador no lo crea. AI Data Engine solo admite el espacio de nombres aide.
kubectl create namespace aide
Etiquetas de nodos
AI Data Engine programa sus componentes mediante etiquetas de nodo. Aplica las siguientes etiquetas a los nodos que programan las cargas de trabajo de AI Data Engine. Cada etiqueta debe estar presente en al menos tres nodos. Algunos tamaños de configuración usan más nodos, así que aplica las etiquetas a todos los nodos que programan cargas de trabajo. Sustituye <node-name> por el nombre de cada nodo.
El instalador no aplica ni comprueba estas etiquetas. Debes etiquetar los nodos antes de ejecutar el instalador. Si falta alguna etiqueta, los pods de AI Data Engine más tarde permanecen en estado Pending.
El siguiente comando aplica todas las etiquetas a un nodo:
kubectl label node <node-name> \
3rdparty-aide-nginx=true 3rdparty-aide-postgres=true \
3rdparty-aide-rabbitmq=true 3rdparty-aide-redis=true \
3rdparty-aide-es=true 3rdparty-aide-kafka=true \
3rdparty-aide-logstash=true 3rdparty-aide-filebeat=true \
3rdparty-aide-k8s-event-exporter=true 3rdparty-aide-telegraf=true \
microservices-aide=true --overwrite
Taints y tolerations
Este paso es opcional. Complétalo solo si AI Data Engine comparte un clúster con otras cargas de trabajo.
En un clúster compartido, lo habitual es reservar nodos para AI Data Engine. Aplica un taint de Kubernetes a esos nodos para evitar que se ejecuten otras cargas de trabajo en ellos. Las etiquetas que has aplicado en Etiquetas de nodos mantienen los pods de AI Data Engine en esos nodos. Cada carga de trabajo de AI Data Engine incluye una toleración integrada para el siguiente taint, de modo que sus pods puedan planificarse en los nodos con taint:
netapp.com/aide=true:NoSchedule
Si no utilizas taints, la tolerancia no tiene ningún efecto y no necesitas cambiar nada.
| Despliegue | Etiqueta los nodos | Taint en los nodos de AI Data Engine | Resultado |
|---|---|---|---|
Clúster dedicado |
Sí |
No es obligatorio |
La tolerancia integrada no tiene ningún efecto. |
Nodos dedicados en un clúster compartido |
Sí |
|
Los pods de AI Data Engine solo se ejecutan en esos nodos, y las demás cargas de trabajo se mantienen fuera de ellos. |
|
|
Si un nodo tiene un taint que los pods de AI Data Engine no toleran, los pods permanecen en el estado Pending.
|
-
En un clúster compartido, aplica un taint a cada nodo que hayas reservado para AI Data Engine. Sustituye
<node-name>por el nombre del nodo:kubectl taint node <node-name> netapp.com/aide=true:NoScheduleLos pods que no son de AI Data Engine no se pueden programar en el nodo. Los pods de AI Data Engine toleran el taint.
-
Si los nodos tienen otros taints, añade el parámetro
--extra-tolerational final del comando de instalación, después del último parámetro existente. Repite el parámetro para cada taint adicional.-
Para hacer coincidir una clave y un valor, utiliza
--extra-toleration KEY=VALUE:EFFECT. -
Para hacer coincidir solo una clave, utiliza
--extra-toleration KEY:EFFECT.EFFECTesNoSchedule,PreferNoScheduleoNoExecute. Si especificas un efecto no válido, el instalador se detiene. El instalador aplica las tolerancias adicionales a todos los componentes de AI Data Engine.Por ejemplo, si un nodo también está tainted
dedicated=redis:NoSchedule, añade el siguiente parámetro:
--extra-toleration dedicated=redis:NoSchedule -
Puertos de entrada
AI Data Engine implementa un controlador de entrada que utiliza los puertos TCP 80 y 443 del host en los nodos que tienen la etiqueta 3rdparty-aide-nginx=true. Ninguna otra carga de trabajo de Kubernetes puede reservar estos puertos en esos nodos. Elimina o desactiva otros controladores de entrada, como Traefik, prográmalos para que no se ejecuten en estos nodos o configúralos para que no utilicen los puertos 80 y 443 del host.
Para comprobar si hay asignaciones existentes de puertos de host de Kubernetes, ejecuta:
kubectl get pods -A -o json | jq -r '
.items[] | . as $pod
| .spec.containers[]?.ports[]?
| select(.hostPort == 80 or .hostPort == 443)
| "\($pod.spec.nodeName // "-") \($pod.metadata.namespace)/\($pod.metadata.name) hostPort=\(.hostPort)"
'
StorageClass
Debe existir en el clúster una StorageClass para los componentes con estado (Elasticsearch, Kafka, PostgreSQL, RabbitMQ y Redis), y debe cumplir con los IOPS y el rendimiento indicados en "dimensionamiento de nodos". Pasa su nombre al instalador con --storage-class <name>. El nombre predeterminado es aide-sc. Si la StorageClass indicada no existe, el instalador se detiene y muestra las StorageClasses disponibles.
Utiliza almacenamiento en bloque, como NVMe o iSCSI. El almacenamiento compartido ofrece un rendimiento deficiente.
La StorageClass es independiente del volumen de configuración de NFS.
En las plataformas de Kubernetes gestionadas, el tipo de disco aprovisionado por StorageClass debe poder adjuntarse al tipo de instancia del nodo de trabajo. El instalador no puede verificar esta compatibilidad de antemano. Si los tipos de disco y de nodo son incompatibles, el pod puede programarse, pero el adjuntado del volumen falla durante el despliegue.
Requisitos específicos de la nube
AKS
Además de los requisitos anteriores, un clúster AKS debe cumplir los siguientes requisitos.
El tamaño de la VM del nodo debe ser compatible con el tipo de disco que aprovisiona StorageClass. Los discos premium de Azure (Premium_LRS, Premium_ZRS y PremiumV2_LRS) solo se adjuntan a tamaños de VM compatibles con premium, que tienen una s en la SKU, como Standard_D16s_v5. Si el tamaño de la VM no es compatible con el disco aprovisionado, el pod se programa, pero se produce un error FailedAttachVolume al adjuntar el volumen.
Utiliza un tamaño de VM compatible con premium para el grupo de nodos AIDE porque los componentes con estado de AIDE requieren IOPS elevadas y un alto rendimiento. Como alternativa, utiliza una StorageClass con una SKU de disco compatible con el tamaño de VM actual. La opción integrada managed-csi aprovisiona StandardSSD_LRS. managed-csi-premium aprovisiona Premium_LRS.
Para comprobar el tipo de disco que proporciona una StorageClass y el tamaño de la máquina virtual de tus nodos, ejecuta los siguientes comandos:
kubectl get sc <name> -o jsonpath='{.provisioner}{" "}{.parameters}{"\n"}'
kubectl get nodes -o custom-columns=NAME:.metadata.name,VMSIZE:.metadata.labels.node\.kubernetes\.io/instance-type
El siguiente ejemplo usa Premium SSD v2 (PremiumV2_LRS) y muestra cómo configurar las IOPS y el rendimiento de forma independiente. Premium SSD v2 requiere un tamaño de VM compatible con Premium y cachingMode: None. Establece diskIOPSReadWrite y diskMBpsReadWrite con los valores correspondientes a tu tamaño en "dimensionamiento de nodos". El ejemplo usa valores de implementación Small:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: aide-sc
provisioner: disk.csi.azure.com
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
reclaimPolicy: Retain
parameters:
skuName: PremiumV2_LRS
cachingMode: None
diskIOPSReadWrite: "8000"
diskMBpsReadWrite: "1000"
Guarda el manifiesto como aide-sc.yaml y aplícalo ejecutando kubectl apply -f aide-sc.yaml. A continuación, especifica --storage-class aide-sc al ejecutar el comando de instalación.
-
Ejecuta
az logincomo el usuario que ejecuta el instalador. Los archivos kubeconfig de AKS se autentican usando el inicio de sesión de Azure CLI del usuario actual. Especifica un directorio tools que sea tuyo. -
Si el clúster AKS es privado, el host del instalador debe poder conectarse al servidor de la API a través de la red virtual, una red emparejada o una VPN. Ejecuta
kubectl cluster-infodesde el host del instalador para comprobar el acceso.