Implementar recursos y paquetes de Kubernetes con Amazon EKS y un repositorio de gráficos de Helm en Amazon S3 - Recomendaciones de AWS

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

Creado por Sagar Panigrahi (AWS)

Entorno: PoC o piloto

Tecnologías: contenedores y microservicios; DevOps

Servicios de AWS: Amazon EKS

Resumen

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

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

  • Administración de código fuente y una canalización de CI/CD

Limitaciones

  • En este momento no se admite la actualización, la eliminación o la administración de las definiciones de recursos personalizadas (CRD).

  • 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

Pila de tecnología de destino

  • Amazon EKS

  • Amazon VPC

  • Amazon S3

  • Gestión de código fuente

  • Helm

  • Kubectl

Arquitectura de destino

Arquitectura con cliente, repositorio externo, repositorio de gráficos de Helm en Amazon S3 y una VPC con un plano de control EKS y un plano de datos EKS.

Automatizar y escalar

  • 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 en la documentación de Amazon EKS.

  • Helm se incorporará a su herramienta de automatización de CI/CD 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.

Herramientas

Herramientas

  • Amazon EKS: 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, escalado y administración de las aplicaciones en contenedores.

  • Helm: Helm es un administrador de paquetes para Kubernetes que le ayuda a instalar y administrar aplicaciones en su clúster de Kubernetes.

  • Amazon S3: 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: 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

TareaDescripciónHabilidades requeridas

Instalar el cliente Helm.

Para descargar e instalar el cliente Helm en su sistema local, utilice el siguiente comando. 

sudo curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
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
TareaDescripciónHabilidades 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. 

helm install --name my-nginx-release --debug my-nginx/ --namespace helm-space

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. 

kubectl get all -n helm-space
DevOps ingeniero
TareaDescripciónHabilidades 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.

helm upgrade my-nginx-release my-nginx/ --namespace helm-space
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. 

helm history my-nginx-release
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.

helm get --revision=2 my-nginx-release
DevOps ingeniero

Restaurar una versión anterior.

Para restaurar una revisión anterior, utilice el siguiente comando. 

helm rollback my-nginx-release 1

Este ejemplo restaura la revisión número 1.

DevOps ingeniero
TareaDescripciónHabilidades 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. 

helm plugin install https://github.com/hypnoglow/helm-s3.git --version 0.10.0

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. 

helm S3 init s3://my-helm-charts/charts

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.

helm repo add my-helm-charts s3://my-helm-charts/charts

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
TareaDescripciónHabilidades 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.

helm s3 push ./my-nginx-0.1.0.tgz my-helm-charts
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.

helm search repo my-nginx
DevOps ingeniero
TareaDescripciónHabilidades 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 una canalización de CI/CD. 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.

helm s3 push ./my-nginx-0.1.1.tgz my-helm-charts
DevOps ingeniero
TareaDescripciónHabilidades 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.

helm search repo my-nginx --versions

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.

helm upgrade my-nginx-release my-helm-charts/my-nginx --version 0.1.1 --namespace helm-space
DevOps ingeniero

Recursos relacionados

Conexiones

Para acceder al contenido adicional asociado a este documento, descomprima el archivo: attachment.zip