O blog da AWS

Controlando o Cluster Kubernetes na AWS através do Slack

por Giovanna Chiaratti, Arquiteta de Soluções para Parceiros América Latina,
Gerson Itiro Hidaka, Arquiteto de Soluções para GSII.

 

Introdução

Em uma bela sexta-feira a noite você começa a receber mensagens no seu smartphone sobre a falta de capacidade do cluster Kubernetes que foi construído no dia anterior. Será necessário a intervenção de um administrador para adicionar novas instâncias no Node Group, pois a funcionalidade AutoScale não foi configurada até o momento. Você está no happy hour com os amigos e o ambiente não é propício para você acessar o notebook, então resolve interromper o happy hour e voltar para casa para executar essa tarefa.

Esse é um cenário comum quando automações e mecanismos não são implementados no ambiente em questão, principalmente quando o projeto está em uma fase inicial. Mostraremos aqui uma maneira fácil de controlar os recursos do cluster Kubernetes gerenciado da AWS, o Elastic Kubernetes Services (EKS) através de uma popular ferramenta de comunicação no mundo do DevOps, o Slack.

 

Visão Geral da Arquitetura

Normalmente controlamos os serviços da AWS de uma maneira tradicional, por meio da console de administração. O objetivo desta solução será controlar um serviço AWS através de um canal do Slack. Para que isso seja possível formulamos o seguinte diagrama:

 

A idéia é utilizar o serviço AWS ChatBot para interpretar as mensagens originadas no Slack Channel, enviá-las a AWS e transformá-las nos comandos para que AWS possa interpretar e atuar de acordo. Uitlizaremos o serviço Elastic Kubernetes Services (EKS) como exemplo, mas será possível aplicar a idéia para vários outros serviços.

A seguir descreveremos os serviços que utilizaremos na próxima sessão:

Slack é uma popular plataforma de colaboração e comunicação, utilizada principalmente para troca de mensagens utilizando a divisão de workspaces e channels.

AWS ChatBot é um agente interativo que torna mais fácil monitorar e interagir com seus recursos da AWS através do seus canais do Slack e salas de chat do Amazon Chime. Com o AWS Chatbot, você pode receber alertas, enviar comandos para serem executados pela AWS e retornar informações de diagnóstico, invocar funções do AWS Lambda e criar casos de suporte da AWS. Somente um lembrete: o AWS ChatBot não é o mesmo serviço que o Amazon Lex. São serviços distintos com diferentes funcionalidades. Click no link para mais informação sobre o Amazon Lex.

O AWS Lambda permite que você execute código sem provisionar ou gerenciar servidores. Você paga apenas pelo tempo de computação consumido. Com o Lambda, você pode executar o código para praticamente qualquer tipo de aplicativo ou serviço de back-end, tudo sem precisar gerenciar as máquinas virtuais. A utilização do Lambda foi necessário aqui, pois o AWS ChatBot, atualmente, só possibilita a emissão de comandos de leitura. Portanto o Lambda será responsável pelos comandos de escala vertical (scale out) do cluster EKS. A partir da integração do AWS Lambda com o AWS Chatbot é possível enviar comandos para as mais diversas soluções da AWS, trazendo eficiência e agilidade na resposta a situações que acontecem no seu ambiente, sem a necessidade de estar a frente do computador.

Amazon Elastic Kubernetes Service (EKS) é um serviço gerenciado de Kubernetes que facilita a execução de Kubernetes na AWS, eliminando a necessidade de instalar, operar e manter o seu próprio Control Plane do Kubernetes.

Na próxima sessão iremos mostrar o passo a passo para configurar o AWS Chatbot integrado a um Slack Channel e emitir alguns comandos para interagir com o Amazon EKS.

 

Mão na Massa

A configuração desta solução será realizada em 4 principais etapas:

 

 

A seguir iniciaremos a primeira etapa:

  1. Como criar uma nova Workspace e um novo Canal no Slack:

Acessar a página oficial do Slack (www.slack.com) e clicar em “Get Started”

 

 

Na próxima tela inserir o seu e-mail e clicar em “Continue”.

 

 

Você receberá um código de 6 dígitos no e-mail informado. Basta digitar-lo na próxima tela.

 

 

Apenas mais 3 passos são necessários para a criação da nova Workspace do Slack. Passo 1: Informar o “Team Name” e clicar em “Next”.

 

 

Passo 2: Uma breve descrição sobre o workspace. Clicar em “Next”.

 

 

Passo 3: Adicionar as pessoas (e-mail) que farão parte da sua workspace. Ou clicar em “skip this step” caso não queira adicionar.

 

 

Pronto, a sua Workspace já está criada no Slack!

 

 

  1. Como integrar o AWS ChatBot com o Slack.

Efetuar o LogOn na versão browser do Slack.

 

Utilizando o mesmo navegador, abrir uma nova aba e entrar na console da AWS. Procurar pelo serviço AWS Chatbot. Você pode utilizar o menu “Services” no canto superior esquerdo da tela ou utilizar o campo “Find Services”.

 

Na tela inicial do AWS ChatBot selecionar a opção “Slack” no campo “Configure a chat client” e clicar no botão “Configure Client”.

 

 

Você receberá uma mensagem solicitando a permissão para acesso ao ambiente Slack através do AWS ChatBot. Clique em “Allow”.

 

O próximo passo será configurar o canal do Slack que enviará e receberá os comandos AWS. Clique em “Configure a new channel”

 

 

Na próxima tela há algumas sessões que precisarão de informações. A primeira sessão é a “Configuration details”. Definir um nome para a configuração através do campo “Configuration Name”.

 

 

A próxima sessão é a  “Slack channel”. Você deverá selecionar o tipo de canal (Público ou Privado) e selecionar o canal no próximo campo.

A próxima sessão é a “Permissions”. No campo IAM role, selecionar “Create an IAM role using template” caso queira criar um novo IAM Role. Definir o nome da IAM Role através do campo “Role Name”. Selecionar as políticas aplicáveis ao seu projeto no campo “Policy templates”. Clicar no botão “Configure”.

 

Pronto, o serviço AWS Chatbot está configurado!

  1. Como criar a Função no Lambda:

Para criar a nossa função Lambda, clicar em “Services”, “Lambda”. Clicar no menu “Functions e no botão “Create function”.

 

Na tela “Create Function”, selecionar “Author from scratch”. Definir um nome para a função através do campo “Function Name”. Fizemos a escolha de desenvolver a função usando Python 3.8. Selecionar o runtime “Python 3.8”. Em “Execution role” selecionar “Use an existing role” e selecionar a role na sequencia. Caso não tenha uma role com permissão para adicionar novos nodes de EKS, vocês deverá criá-lo previamente. Isso se aplica a outros serviços que você queira provisionar na AWS por meio do AWS Lambda. Clicar no botão “Create function”.

 

 

Copiar o código abaixo e substituir o código existente no “Function Code”. Clicar em “Deploy”

 

import json

import boto3

import logging

logger = logging.getLogger()

logger.setLevel(logging.INFO)




def lambda_handler(event, context):

    # Request the current Worker Number

    client = boto3.client('eks')

    response = client.describe_nodegroup(

        clusterName='eksworkshop-eksctl',

        nodegroupName='nodegroup'

    )

    currentNodes = response["nodegroup"]["scalingConfig"]["desiredSize"]

    logger.info(currentNodes)

    totalNodes = currentNodes + 1

    logger.info(totalNodes)

    

    # Update the Worker Node desiredSize

    response1 = client.update_nodegroup_config(

        clusterName='eksworkshop-eksctl',

        nodegroupName='nodegroup',

        scalingConfig={

            'minSize': 2,

            'maxSize': 10,

            'desiredSize': totalNodes

        }

    )

    

    return {

        'CurrentWorkerNodes': currentNodes,

        'FutureWorkerNodes': totalNodes,

    }

 

OBS: Esse é um código simples, que poderá ser adaptado para diversas necessidades.

  1. “Smoke Test”:

Vamos agora a fase final e realizaremos alguns testes. Retornar para a aplicação Slack (pode utilizar o Browser ou o aplicativo. Utilizando o campo de mensagens.

 

 

Digitar o comando “@aws help” para realizarmos um primeiro teste. Caso receba uma mensagem solicitando o convite para a inclusão da @aws, clicar em “Sim”.

Se tudo foi configurado corretamente você deverá receber um retorno como no exemplo abaixo. Repare os comandos diferentes possíveis sugeridos pelo “@aws help”. Caso queira que sua AWS Lambda realize esses comandos, é necessário adaptar o código para que seja possível atender essa necessidade, ou seja, o “@aws help” sugere comandos e se o AWS Lambda não considerar esses comandos em seu código, esse comando não será realizado:

 

 

No campo de mensagens do Slack vamos digitar um comando para listar os clusters do Amazon EKS na região us-east-2. Digitar a seguinte string no campo de mensagens (sem as aspas duplas): “@aws eks list-clusters – -region us-east-2″

 

 

Para adicionar novos worker nodes no cluster Amazon EKS, vamos realizar a chamada (invoke) da função AWS Lambda que criamos anteriormente. Para isso utilizaremos o comando (sem as aspas duplas): “@aws lambda invoke —function-name eks-addnode —region us-east-2”:

 

 

Após receber o retorno (Payload) da função Lambda no Slack, podemos abrir a console do EC2 e verificar que vários worker nodes foram provisionados e estão inicializando.

 

 

Conclusão

Com esse passo a passo, verificamos que podemos, não só controlar facilmente os recursos do cluster Kubernetes gerenciado, quanto fazer o “retrieve”, ou seja, solicitar alguma informação do ambiente para ajudar na resolução de algum problema. Podemos ir além e controlar também os serviços da AWS de maneira geral, de um modo seguro e aumentando assim os toolkits de DevOps do seu time para responder a eventos operacionais. E é claro, preservando o bom e velho Happy Hour de Sexta a noite!

 

 


Sobre os autores

 Giovanna Chiaratti é Arquiteta de Soluções para Parceiros na América Latina focada em países de língua espanhola. Admiradora e estudiosa de tecnologias como Machine Learning, Inteligência Artificial e Serverless. Trabalha para escalar parceiros de consultoria e tecnologia para que possam apoiar a AWS em criar soluções seguras, inovadoras e inteligentes.

 

 

 

 Gerson Itiro Hidaka é Arquiteto de Soluções para Global System Integrators and Influencers (GSII). Entusiasta de tecnologias como Internet das Coisas, Drones, Devops e especialista em tecnologias como VMware, Container e Kubernetes. Trabalha em conjunto com os GSIIs na América Latina ajudando os clientes na jornada de cloud e na construção de soluções de computação em nuvem.