Blog de Amazon Web Services (AWS)
Control de Kubernetes Cluster en AWS a través de Slack
Por Giovanna Chiaratti, Arquitecta de Soluciones y Gerson Itiro Hidaka, Arquitecto de Soluciones
Introducción
En una hermosa noche del viernes comienza a recibir mensajes en su teléfono smartphone acerca de la falta de capacidad del clúster Kubernetes que construiste el día anterior. Un administrador tendrá que intervenir para agregar nuevas instancias al grupo de nodos ya que el AutoScale no ha sido configurado hasta ahora. Usted está en la happy hour con amigos y el entorno no es propicio para acceder a la computadora, por lo que decide dejar el happoy hour e ir a casa para realizar esta tarea.
Este es un escenario común cuando no se implementan automatismos y mecanismos en el ambiente en cuestión, especialmente cuando el proyecto se encuentra en una etapa temprana. Aquí les mostramos una forma sencilla de controlar los recursos del clúster de Kubernetes gestionado por AWS, Elastic Kubernetes Services (EKS) a través de una herramienta de comunicación popular en el mundo de DevOps, Slack.
Descripción general de arquitectura
Normalmente controlamos los servicios de AWS de forma tradicional por medio de la consola de administración. El objetivo de esta solución será controlar un servicio de AWS por medio de un canal de Slack. Para que esto sea posible formulamos el siguiente diagrama:
Yla idea es utilizar el servicio AWS ChatBot para interpretar los mensajes que se originan en el canal de Slack, enviarlos a AWS y convertirlos en comandos para que AWS pueda interpretarlos y actuar de acuerdo. Utilizaremos el servicio Elastic Kubernetes Services (EKS) como ejemplo, pero es posible aplicar la idea a otros servicios.
A continuación describiremos los servicios que utilizaremos en la próxima sesión:
Slack es una plataforma popular de colaboración y comunicación, utilizada principalmente para la mensajería mediante la división de espacios de trabajo y canales.
AWS ChatBot es un agente interactivo que facilita la supervisión y la interacción con sus recursos de AWS a través de sus canales de Slack y las salas de chat de Amazon Chime. Con AWS Chatbot, puede recibir alertas, enviar comandos para ejecutarlos por AWS y devolver información de diagnóstico, invocar funciones de AWS Lambda y crear casos de soporte de AWS. Sólo un recordatorio: AWS ChatBot no es el mismo servicio que Amazon Lex. Se trata de diferentes servicios con diferentes funcionalidades. Haga clic en el enlace para obtener más información sobre Amazon Lex.
AWS Lambda le permite ejecutar código sin aprovisionar ni administrar servidores. Sólo paga por el tiempo de cálculo consumido. Con Lambda, puede ejecutar código para prácticamente cualquier tipo de aplicación o servicio back-end, todo sin tener que administrar máquinas virtuales. El uso de Lambda era necesario aquí porque AWS ChatBot actualmente solo habilita la emisión de comandos de lectura. Por lo tanto, Lambda será responsable de los comandos de escala horizontal del clúster EKS. Mediante la integración de AWS Lambda con AWS Chatbot, puede enviar comandos a las más diversas soluciones de AWS, aportando eficiencia y agilidad a la hora de responder a situaciones que ocurren en su entorno, sin tener que estar delante de la computadora.
Amazon Elastic Kubernetes Service (EKS) es un servicio de Kubernetes gestionado que facilita la ejecución de Kubernetes en AWS, lo que elimina la necesidad de instalar, operar y mantener su propio plano de control de Kubernetes.
En la próxima sesión le mostraremos paso a paso la configuración de AWS Chatbot integrado con un canal de Slack y emitir algunos comandos para interactuar con Amazon EKS.
Mano en la Misa
La configuración de esta solución se llevará a cabo en 4 pasos principales:
A continuación comenzaremos el primer paso:
- Cómo crear un nuevo espacio de trabajo y canal en Slack:
Acceda la página oficial de Slack (www.slack.com) y haga clic en «Empezar»
En la siguiente pantalla ingrese su correo electrónico y haga clic en «Continuar».
Recibirás un código de 6 dígitos en el correo electrónico proporcionado. Simplemente escríbalo en la siguiente pantalla.
Solo se requieren 3 pasos más para crear el nuevo espacio de trabajo de Slack. Paso 1: Introduce «Nombre del equipo» y haz clic en «Siguiente».
Paso 2: Breve descripción del espacio de trabajo. Haga clic en «Siguiente».
Paso 3: Agregue las personas (correo electrónico) que formarán parte de su espacio de trabajo. O haga clic en «omitir este paso» si no desea agregarlo.
Muy bien, ¡tu espacio de trabajo ya está creado en Slack!
- Cómo integrar AWS ChatBot con Slack.
Inicie sesión en la versión del navegador de Slack.
Con el mismo navegador, abra una nueva pestaña e inicie sesión en la consola de AWS. Busque el servicio AWS Chatbot. Puede usar el menú «Servicios» en la esquina superior izquierda de la pantalla o usar el campo «Buscar servicios».
En la pantalla de inicio de AWS ChatBot, seleccione la opción «Slack» en el campo «Configurar el cliente de chat» y haga clic en el botón «Configurar cliente».
Recibirá un mensaje solicitando permiso para acceder al entorno de Slack a través de AWS ChatBot. Haga clic en «Permitir».
El siguiente paso será configurar el canal de Slack que enviará y recibirá los comandos de AWS. Haga clic en «Configurar un nuevo canal»
En la siguiente pantalla hay algunas sesiones que necesitarán información. La primera sesión es «Detalles de configuración». Establezca un nombre para la configuración utilizando el campo «Nombre de configuración».
La próxima sesión es Slack Channel. Debe seleccionar el tipo de canal (Público o Privado) y seleccionar el canal en el siguiente campo.
La siguiente sesión es Permisos. En el campo de rol de IAM, seleccione «Crear un rol de IAM utilizando la plantilla» si desea crear un nuevo rol de IAM. Establezca el nombre del rol IAM a través del campo «Nombre del rol». Seleccione las políticas aplicables a su proyecto en el campo «Plantillas de directiva». Haga clic en el botón «Configurar».
Listo, ¡el servicio AWS Chatbot está configurado!
- Cómo crear la función en Lambda:
Para crear nuestra función Lambda, haga clic en «Servicios», «Lambda». Haga clic en el menú «Funciones» y el botón «Crear función».
En la pantalla «Crear función», seleccione «Autor desde cero». Defina un nombre para la función utilizando el campo «Nombre de función». Hicimos la elección de desarrollar la función utilizando Python 3.8. Seleccione el tiempo de ejecución «Python 3.8». En «Rol de ejecución» seleccione «Usar un rol existente» y seleccione el rol en la secuencia. Si no tiene un rol con permiso para agregar nuevos nodos EKS, debe crearlo de antemano. Esto se aplica a otros servicios que desea aprovisionar en AWS a través de AWS Lambda. Haga clic en el botón «Crear función».
Copie el código abajo y reemplace el código existente en el «Código de función». Haga clic en «Implemente»
importar json importar boto3 registro de importación logger = Loggging.getLogger () Logger.setLevel (Logging.info) def lambda_handler (evento, contexto): # Solicitar el número de trabajador actual client = boto3.client ('eks') response = client.descripbe_nodegroup ( clustername='eksWorkshop-eksctl', nodeGroupName='NodeGroup' ) CurrentNodes = respuesta ["nodegroup"] ["scalingConfig"] ["DesiredSize"] logger.info (CurrentNodes) TotalNodes = CurrentNodes + 1 logger.info (TotalNodes) # Actualizar el nodo de trabajo DesiredSize response1 = client.update_nodegroup_config ( clustername='eksWorkshop-eksctl', nodeGroupName='NodeGroup', scalingConfig= { 'Tamaño pequeño': 2, Tamaño máximo: 10, 'DesiredSize ': TotalNodes } ) devolver { 'CurrentWorkerNodes': CurrentNodes, FutureWorkerNodes: TotalNodes, }
- «Prueba de humo»:
Ahora pasaremos a la fase final y realizaremos algunas pruebas. Vuelva a la aplicación Slack (puede utilizar el navegador o la aplicación. Uso del campo de mensaje.
Introduzca el comando «@aws help» para realizar una primera prueba. Si recibe un mensaje solicitando la invitación para unirse a @aws, haga clic en «Sí».
Si todo ha sido configurado correctamente, debería recibir una devolución como en el siguiente ejemplo. Tenga en cuenta los diferentes comandos posibles sugeridos por «@aws help». Si desea que AWS Lambda realice estos comandos, debe adaptar el código para atender esta necesidad, lo que significa que «@aws help» sugiere comandos, y si AWS Lambda no tiene en cuenta estos comandos en su código, este comando no se ejecutará:
En el campo de mensaje de Slack, escribiremos un comando para enumerar los clústeres de Amazon EKS en la región us-east-2. Escriba la siguiente cadena en el campo de mensaje (sin las comillas dobles): «@aws eks list-clusters – -region us-east-2″
Para agregar nuevos nodos de trabajo al clúster de Amazon EKS, invoquemos la función AWS Lambda que creamos anteriormente. Para esto usaremos el comando (sin las comillas dobles): «@aws lambda invoke —function-name eks-addnode —region us-east-2»:
Después de recibir la carga útil de la función Lambda en Slack, podemos abrir la consola de EC2 y verificar que se han aprovisionado varios nodos de trabajo y se están inicializando.
Conclusión
Con este paso a paso, descubrimos que no solo podemos controlar fácilmente los recursos del clúster administrado de Kubernetes, sino también hacer la «recuperación», es decir, solicitar cierta información del ambiente para ayudar a resolver un problema. También podemos ir más allá y controlar los servicios de AWS en general, de forma segura, aumentando así los kits de herramientas de DevOps de su equipo para responder a eventos operativos. Y, por supuesto, la preservación de la buena vieja noche del viernes Happy Hour!
Sobre los autores
Giovanna Chiaratti es Arquitecta de Soluciones para Socios en América Latina enfocada en los países hispano-hablantes. Admiradora y estudioa de tecnologías como Machine Learning, Artificial Intelligence y Serverless. Trabaja para escalar los socios de consultoría y tecnología para que puedan apoyar a AWS en la creación de soluciones seguras, innovadoras e inteligentes.
Gerson Itiro Hidaka es Arquitecto de Soluciones para Integradores e Influencers Globales de Sistemas (GSII). Entusiasta de tecnologías como Internet de las Cosas, Drones, Devops y especialista en tecnologías como VMware, Container y Kubernetes. Trabaja estrictamente con GSII en América Latina ayudando a los clientes en la jornada a la nube y creando soluciones de computación en la nube.