# Despliegue en Nutanix AHV

### **Requisitos previos**

1. Asegúrese de tener acceso a su clúster Nutanix AHV.
2. Instale las siguientes herramientas en su estación de trabajo:
   * **Helm:** [Instalar Helm](https://helm.sh/docs/intro/install/)
   * **Kubectl:** [Instalar Kubectl](https://kubernetes.io/docs/tasks/tools/)
   * **AWS CLI:** [Instalar AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)
   * **Nutanix Prism Central o herramientas de línea de comandos de Karbon** para administrar recursos de Nutanix.

### **Paso 1: Requisitos del clúster de Kubernetes**

Configure un clúster de Kubernetes en Nutanix. [Documentación de Nutanix Kubernetes Engine aquí](https://portal.nutanix.com/page/documents/details?targetId=Nutanix-Kubernetes-Engine-v2_10:top-deploy-kubernetes-cluster-t.html).

* El clúster debe cumplir los siguientes requisitos mínimos:
  * **Requisitos de nodos:** 3 nodos, [cada uno con al menos 8 GB de RAM](https://portal.nutanix.com/page/documents/solutions/details?targetId=NVD-2174-Hybrid-Cloud-6-5-Mid-Market-Design:virtual-machine-standard-deployment-sizes.html).

### **Paso 2: Configurar almacenamiento persistente**

Nutanix AHV utiliza el [Nutanix CSI](https://opendocs.nutanix.com/openshift/operators/csi/) (Controlador de interfaz de almacenamiento de contenedores) para Kubernetes para gestionar el almacenamiento persistente. Instale y configure el controlador CSI:

1. Instale el controlador Nutanix CSI para Kubernetes siguiendo la [documentación de Nutanix CSI](https://portal.nutanix.com/page/documents/details?targetId=Nutanix-Data-Services-for-Kubernetes-v1_2:top-csi-driver-install-k8s-c.html).
2. Cree una StorageClass predeterminada en Kubernetes para el aprovisionamiento dinámico:

   ```yaml
   kind: StorageClass
   apiVersion: storage.k8s.io/v1
   metadata:
     name: nutanix-sc
   provisioner: csi.nutanix.com
   parameters:
     csi.storage.k8s.io/fstype: ext4
   ```

### **Paso 3: Configurar redes de Kubernetes**

Asegúrese de que esté instalado un controlador de ingreso para el acceso externo a sus servicios.

1. Inicialice el repositorio Ingress-Nginx:

   ```bash
   helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
   ```
2. Implemente el chart de Helm Ingress-Nginx:

   ```bash
   helm upgrade --install ingress-nginx ingress-nginx/ingress-nginx \
     --namespace ingress-nginx \
     --create-namespace \
     --set controller.replicaCount=2 \
     --set controller.allowSnippetAnnotations=true \
     --set controller.ingressClassResource.default=true \
     --set force-ssl-redirect=true \
     --version=4.8.3
   ```
3. Valide que la dirección IP externa del servicio LoadBalancer esté configurada:

   ```bash
   kubectl --namespace ingress-nginx get services -o wide -w ingress-nginx-controller
   ```

El controlador Ingress-Nginx es responsable de exponer los servicios de la aplicación externamente al clúster.

### **Paso 4: Preparar la configuración de Violet**

1. Crear un `violet-values.yml` archivo de configuración para la implementación:

   ```yaml
   domain: # El dominio donde se servirá Violet. El subdominio debe ser "violet": violet.mydomain.com
   customerName: # El nombre del cliente de su licencia. Proporcionado por Violet
   licenseKey: # Su clave de licencia. Proporcionada por Violet
   adminEmail: # Correo electrónico del usuario administrador para el cliente
   adminName: # Nombre completo del usuario administrador ("Nombre Apellido") para el cliente

   aws:
     accessKeyId: # Dejar en blanco o eliminar si no corresponde
     accessKeySecret: # Dejar en blanco o eliminar si no corresponde

   global:
     storageClass: nutanix-sc

   # opcional: Esto es necesario si desea usar una base de datos externa 
   # en lugar de una bd postgres interna creada automáticamente por el chart de helm. 
   # No agregar si usa la bd interna. 
   postgresql:
     enabled: false # Deshabilitar la base de datos interna si usa una base de datos externa
     auth:
       host: # nombre de host para la bd externa
       password: # contraseña del usuario de la bd
       username: # nombre de usuario del usuario de la bd
       adminPassword: # contraseña del usuario administrador
       adminUsername: # nombre de usuario administrador
   ```

<details>

<summary>Desplegar o actualizar Violet con versión bloqueada [OPCIONAL]</summary>

Si desea bloquear la versión de Violet que está utilizando y no obtener automáticamente la última versión, agregue la siguiente entrada a su `violet-values.yml` archivo:

```yaml
imagen:
  versionTag: # use la etiqueta de versión correcta para bloquear una versión y no siempre obtener la última. Proporcionada por Violet para el despliegue inicial.
```

El registro de cambios de Violet (y las etiquetas de versión) se puede encontrar aquí [Registro de cambios de VioletLabs | Productlane](https://changelog.violetlabs.com/changelog)

Si está implementando Violet en este entorno por primera vez, continúe a [#step-5-fetch-internal-secrets-from-violet](#step-5-fetch-internal-secrets-from-violet "mention").

Si ya ha desplegado Violet y solo está bloqueando la versión o actualizando a una versión específica de Violet, ingrese esa versionTag en el `violet-values.yml` archivo y luego salte a [#step-6-deploy-violet-helm-chart](#step-6-deploy-violet-helm-chart "mention").

</details>

### **Paso 5: Obtener secretos internos de Violet**

Para gestionar secretos de forma segura en Nutanix, puede usar **Secrets de Kubernetes** o integrarse con Nutanix Vault o HashiCorp Vault. Esto se usa para cargar algunos secretos específicos del cliente desde la nube AWS de Violet hacia la implementación On-Prem de Violet.

1. Instale External Secrets:

   ```bash
   helm repo add external-secrets https://charts.external-secrets.io
   helm repo update
   helm upgrade --namespace external-secrets --create-namespace --install --wait external-secrets external-secrets/external-secrets
   ```
2. Configure un perfil de AWS llamado `violet-external`&#x20;

   ```
   $ aws configure —profile violet-external
   AWS Access Key ID [None]:[AWS_ACCESS_KEY desde 1Pass]
   AWS Secret Access Key [None]: [AWS_SECRET_ACCESS_KEY desde 1Pass]
   Default region name [None]: us-west-1
   Default output format [None]: json
   ```
3. Cree un namespace para Violet:

   ```bash
   kubectl create namespace violet
   ```
4. Cree un secreto que permita a Kubernetes acceder al repositorio de Charts de Helm de Violet:

   <pre class="language-bash"><code class="lang-bash"><strong>kubectl create secret docker-registry --namespace violet ecr-creds --docker-server=911167899009.dkr.ecr.us-west-1.amazonaws.com --docker-username=AWS --docker-password=$(aws ecr --profile violet-external get-login-password)
   </strong></code></pre>
5. Instale el agente de registro mezmo. Esto envía logs desde su clúster al equipo de Violet para asistencia en solución de problemas y monitoreo

   ```
   kubectl apply -f https://assets.logdna.com/clients/logdna-agent/3/agent-namespace.yaml

   # Obtenga <mezmo-ingestion-key> de su entrada en 1Pass
   kubectl create secret generic logdna-agent-key -n logdna-agent --from-literal=logdna-agent-key=<mezmo-ingestion-key> 

   kubectl apply -f https://assets.logdna.com/clients/logdna-agent/3/agent-resources.yaml
   ```

### **Paso 6: Implementar el chart de Helm de Violet**

1. Inicie sesión en el repositorio del chart de Helm de Violet

   ```bash
   aws ecr --profile violet-external get-login-password | helm registry login --username AWS --password-stdin 911167899009.dkr.ecr.us-west-1.amazonaws.com
   ```
2. Instale el chart de Helm de Violet:

   ```bash
   helm upgrade --namespace violet --create-namespace --install myviolet oci://911167899009.dkr.ecr.us-west-1.amazonaws.com/violet-helm --version 1.0.0-main -f violet-values.yml
   ```

### **Paso 7: Verificar la instalación**

Tenga en cuenta que puede tardar hasta 5 minutos en ejecutar los scripts de aprovisionamiento de la base de datos. Puede comprobar el estado de la implementación viendo los pods:

1. Compruebe el estado de los pods en el namespace Violet:

   ```bash
   kubectl get pods -n violet
   ```

### **Paso 8: Configuración posterior a la instalación**

Después de completar la instalación, el chart de helm mostrará alguna información y comandos que incluyen la URL para acceder a su nueva implementación, cómo obtener la dirección IP en la que se sirve la implementación (para configurar reglas DNS) y cómo obtener la contraseña autogenerada para el `violet_admin@violetlabs.com` cuenta.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.violetlabs.com/es/recursos/administrativo/despliegue-local/despliegue-en-nutanix-ahv.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
