

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Implementar recursos y paquetes de Kubernetes con Amazon EKS y un repositorio de gráficos de Helm en Amazon S3
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3"></a>

*Sagar Panigrahi, Amazon Web Services*

## Resumen
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-summary"></a>

Este patrón le ayuda a administrar las aplicaciones de Kubernetes de forma eficiente, independientemente de su complejidad. El patrón integra Helm en sus canalizaciones de integración y entrega continuas (CI/CD) existentes para implementar aplicaciones en un clúster de Kubernetes. Helm es un administrador de paquetes de Kubernetes que le ayuda a gestionar las aplicaciones de Kubernetes. Los gráficos de Helm le ayudan a definir, instalar y actualizar aplicaciones complejas de Kubernetes. Los gráficos se pueden versionar y almacenar en repositorios de Helm, lo que mejora el tiempo medio de restauración (MTTR) durante las interrupciones. 

Este patrón utiliza Amazon Elastic Kubernetes Service (Amazon EKS) para el clúster de Kubernetes. Utiliza Amazon Simple Storage Service (Amazon S3) como repositorio de gráficos de Helm, de modo que todos los desarrolladores de la organización puedan gestionar y acceder a los gráficos de forma centralizada.

## Requisitos previos y limitaciones
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-prereqs"></a>

**Requisitos previos **
+ Una cuenta de Amazon Web Services (AWS) activa con una nube privada virtual (VPC)
+ Un clúster de Amazon EKS 
+ Nodos de trabajo configurados dentro del clúster de Amazon EKS y preparados para soportar cargas de trabajo
+ Kubectl para configurar el archivo kubeconfig de Amazon EKS para el clúster de destino en la máquina cliente
+ Acceso de AWS Identity and Access Management (IAM) para crear el bucket de S3
+ Acceso de IAM (mediante programación o de rol) a Amazon S3 desde la máquina cliente
+ Gestión del código fuente y CI/CD canalización

**Limitaciones**
+ En este momento, no se admite la actualización, la eliminación o la administración de definiciones de recursos personalizadas (CRDs).
+ Si utiliza un recurso que hace referencia a una CRD, la CRD debe instalarse por separado (fuera del gráfico).

**Versiones de producto**
+ Helm v3.6.3

## Arquitectura
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-architecture"></a>

**Pila de tecnología de destino**
+ Amazon EKS
+ Amazon VPC
+ Amazon S3
+ Gestión de código fuente
+ Helm
+ Kubectl

**Arquitectura de destino**

![\[Los clientes Helm y Kubectl implementan un repositorio de gráfico de Helm en Amazon S3 para los clústeres de Amazon EKS.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/d3f993e6-4d96-4cb9-a075-c4debe431fd7/images/2f09f7bb-440a-4c4b-b29f-08d136d1ada4.png)


 

**Automatización y escala**
+ AWS se CloudFormation puede utilizar para automatizar la creación de la infraestructura. Para obtener más información, consulte [Creación de recursos de Amazon EKS con AWS CloudFormation](https://docs.aws.amazon.com/eks/latest/userguide/creating-resources-with-cloudformation.html) en la documentación de Amazon EKS.
+ Helm se incorporará a su herramienta de CI/CD automatización existente para automatizar el empaquetado y el control de versiones de los gráficos de Helm (algo fuera del alcance de este patrón).
+ GitVersion o bien, se pueden utilizar los números de compilación de Jenkins para automatizar el control de versiones de los gráficos.

## Tools (Herramientas)
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-tools"></a>

**Herramientas**
+ [Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/what-is-eks.html): Amazon Elastic Kubernetes Service (Amazon EKS) es un servicio administrado para ejecutar Kubernetes en AWS sin necesidad de crear ni mantener su propio plano de control de Kubernetes. Kubernetes es un sistema de código abierto para automatizar la implementación, el escalado y la administración de las aplicaciones en contenedores.
+ [Helm](https://helm.sh/docs/): Helm es un administrador de paquetes para Kubernetes que le ayuda a instalar y administrar aplicaciones en su clúster de Kubernetes.
+ [Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/gsg/GetStartedWithS3.html): Amazon Simple Storage Service (Amazon S3) es un servicio de almacenamiento para Internet. Puede utilizar Amazon S3 para almacenar y recuperar cualquier cantidad de datos en cualquier momento y desde cualquier parte de la web.
+ [Kubectl](https://kubernetes.io/docs/reference/kubectl/overview/): Kubectl es una utilidad de la línea de comandos para la ejecución de comandos en clústeres de Kubernetes.

**Código**

Se adjunta el código de ejemplo.

## Epics
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-epics"></a>

### Configurar e inicializar Helm
<a name="configure-and-initialize-helm"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Instalar el cliente Helm. | Para descargar e instalar el cliente Helm en su sistema local, utilice el siguiente comando. <pre>sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash</pre> | DevOps ingeniero | 
| Validar la instalación de Helm. | Para validar que Helm puede comunicarse con el servidor API de Kubernetes del clúster de Amazon EKS, ejecute `helm version`. | DevOps ingeniero | 

### Crear e instalar un gráfico de Helm en el clúster de Amazon EKS
<a name="create-and-install-a-helm-chart-in-the-amazon-eks-cluster"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Crear un gráfico de Helm para NGINX. | Para crear un gráfico de Helm llamado `my-nginx` en la máquina cliente, ejecute `helm create my-nginx`. | DevOps ingeniero | 
| Revisar la estructura del gráfico. | Para revisar la estructura del gráfico, ejecute el comando tree `tree my-nginx/`. | DevOps ingeniero | 
| Desactive la creación de cuentas de servicio en el gráfico. | En `values.yaml`, en la sección `serviceAccount`, establezca la clave `create` en `false`. Esta opción está desactivada porque no es necesario crear una cuenta de servicio para este patrón. | DevOps ingeniero | 
| Validar (lint) el gráfico modificado para detectar errores sintácticos. | Para validar el gráfico para detectar cualquier error sintáctico antes de instalarlo en el clúster de destino, ejecute `helm lint my-nginx/`. | DevOps ingeniero | 
| Instale el gráfico para implementar los recursos de Kubernetes. | Para ejecutar la instalación del gráfico de Helm, utilice el siguiente comando. <pre>helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space </pre>La marca opcional `debug` muestra todos los mensajes de depuración durante la instalación. La marca `namespace` especifica el espacio de nombres en el que se creará la parte de recursos de este gráfico. | DevOps ingeniero | 
| Revisar los recursos del clúster de Amazon EKS. | Para revisar los recursos que se crearon como parte del gráfico de Helm en el espacio de nombres `helm-space`, utilice el siguiente comando. <pre>kubectl get all -n helm-space</pre> | DevOps ingeniero | 

### Restaurar una versión anterior de una aplicación de Kubernetes
<a name="roll-back-to-a-previous-version-of-a-kubernetes-application"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Modifique y actualice la versión. | Para modificar el gráfico, en `values.yaml`, cambie el valor `replicaCount` a `2`. A continuación, ejecute el siguiente comando para actualizar la versión ya instalada.<pre>helm upgrade my-nginx-release my-nginx/ --namespace helm-space</pre> | DevOps ingeniero | 
| Revisar el historial de la versión de Helm. | Para ver todas las revisiones de una versión específica instalada con Helm, ejecute el siguiente comando. <pre>helm history my-nginx-release</pre> | DevOps ingeniero | 
| Comprobar los detalles de una revisión específica. | Antes de cambiar a o restaurar una versión operativa, y para obtener una capa adicional de validación antes de instalar una revisión, compruebe qué valores se han pasado a cada una de las revisiones mediante el siguiente comando.<pre>helm get --revision=2 my-nginx-release</pre> | DevOps ingeniero | 
| Restaurar una versión anterior. | Para restaurar una revisión anterior, utilice el siguiente comando. <pre>helm rollback my-nginx-release 1 </pre>Este ejemplo restaura la revisión número 1. | DevOps ingeniero | 

### Inicializar un bucket de S3 como repositorio de Helm
<a name="initialize-an-s3-bucket-as-a-helm-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree un bucket de S3 para gráficos de Helm. | Cree un bucket de S3 único. En el bucket, cree una carpeta llamada `charts`. El ejemplo de este patrón usa `s3://my-helm-charts/charts` como repositorio de gráficos de destino. | Administrador de la nube | 
| Instalar el complemento de Helm para Amazon S3. | Para instalar el complemento helm-s3 en su máquina cliente, utilice el siguiente comando. <pre>helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0</pre>Nota: El soporte de Helm V3 está disponible con la versión 0.9.0 y superior del complemento. | DevOps ingeniero | 
| Inicializar el repositorio de Helm de Amazon S3.  | Para inicializar la carpeta de destino como repositorio de Helm, utilice el siguiente comando. <pre>helm S3 init s3://my-helm-charts/charts </pre>El comando crea un archivo `index.yaml` en el destino para rastrear toda la información del gráfico almacenada en esa ubicación. | DevOps ingeniero | 
| Añada el repositorio de Amazon S3 a Helm. | Para añadir el repositorio a la máquina cliente, utilice el siguiente comando.<pre>helm repo add my-helm-charts s3://my-helm-charts/charts </pre>Este comando añade un alias al repositorio de destino de la máquina cliente de Helm. | DevOps ingeniero | 
| Revisar la lista de repositorios. | Para ver la lista de repositorios de la máquina cliente de Helm, ejecute `helm repo list`. | DevOps ingeniero | 

### Empaquetar y almacenar gráficos en el repositorio de Helm de Amazon S3
<a name="package-and-store-charts-in-the-amazon-s3-helm-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Empaquetar el gráfico. | Para empaquetar el gráfico `my-nginx` que creó, ejecute `helm package ./my-nginx/`. El comando empaqueta todo el contenido de la carpeta de gráficos `my-nginx` en un archivo de almacenamiento que se nombra según el número de versión mencionado en el archivo `Chart.yaml`. | DevOps ingeniero | 
| Almacenar el paquete en el repositorio de Helm de Amazon S3. | Para cargar el paquete en el repositorio de Helm de Amazon S3, ejecute el siguiente comando usando el nombre correcto del archivo `.tgz`.<pre>helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts</pre> | DevOps ingeniero | 
| Buscar el gráfico de Helm. | Para confirmar que el gráfico aparece tanto localmente como en el repositorio de Helm de Amazon S3, ejecute el siguiente comando.<pre>helm search repo my-nginx</pre> | DevOps ingeniero | 

### Modificar, versionar y empaquetar un gráfico
<a name="modify-version-and-package-a-chart"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Modifique y empaquete el gráfico. | En `values.yaml`, defina el valor de `replicaCount` en `1`. A continuación, ejecute `helm package ./my-nginx/` para empaquetar el gráfico, esta vez cambiando la versión en `Chart.yaml` a `0.1.1`. Lo ideal es actualizar el control de versiones mediante la automatización mediante herramientas como GitVersion los números de compilación de Jenkins en un CI/CD proceso. La automatización del número de versión está fuera del alcance de este patrón. | DevOps ingeniero | 
| Enviar la nueva versión al repositorio de Helm de Amazon S3. | Para enviar el nuevo paquete, versión 0.1.1, al repositorio de Helm `my-helm-charts` de Amazon S3, ejecute el siguiente comando.<pre>helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts</pre> | DevOps ingeniero | 

### Buscar e instalar un gráfico en el repositorio de Helm de Amazon S3
<a name="search-for-and-install-a-chart-from-the-amazon-s3-helm-repository"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Buscar todas las versiones del gráfico my-nginx. | Para ver todas las versiones disponibles de un gráfico, ejecute el siguiente comando con la marca `--versions`.<pre>helm search repo my-nginx --versions</pre>Sin la marca, Helm mostrará de forma predeterminada la última versión cargada de un gráfico. | DevOps ingeniero | 
| Instalar un gráfico desde el repositorio de Helm de Amazon S3. | Los resultados de búsqueda de la tarea anterior mostrarán las múltiples versiones del gráfico `my-nginx`. Para instalar la nueva versión (0.1.1) desde el repositorio de Helm de Amazon S3, utilice el siguiente comando.<pre>helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space</pre> | DevOps ingeniero | 

## Recursos relacionados
<a name="deploy-kubernetes-resources-and-packages-using-amazon-eks-and-a-helm-chart-repository-in-amazon-s3-resources"></a>
+ [Documentación de HELM](https://helm.sh/docs/)
+ [Complemento helm-s3 (licencia MIT)](https://github.com/hypnoglow/helm-s3.git)
+ [Binario del cliente HELM](https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3)
+ [Documentación de Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html)

## Conexiones
<a name="attachments-d3f993e6-4d96-4cb9-a075-c4debe431fd7"></a>

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: [attachment.zip](samples/p-attach/d3f993e6-4d96-4cb9-a075-c4debe431fd7/attachments/attachment.zip)