Como aplicar os 5 pilares do Well-Architected Framework com o EKS -Excelência Operacional

Introdução

Sobre o Well-Architected Framework

Sobre o Elastic Kubernetes Service

Excelência Operacional no EKS

1- Infraestrutura da Cloud

  • Network (VPC, Transit gateway)
  • Armazenamento de arquivos (S3, NFS)
  • Bancos de dados (RDS, DynamoDB)
  • Web application firewalls (WAF)
  • Conteúdos estáticos (CloudFront)
  • O próprio cluster EKS
  • Chaves de criptografia (KMS)
  • Identidade e acesso (IAM)
  • Terraform: Amplamente difundido, permite declarar a infraestrutura utilizando uma linguagem clara e objetiva chamada de HCL. Suporta os principais provedores de infra e possui uma comunidade extensa.
  • CDKTF e CDK: São duas bibliotecas que permitem escrever a infraestrutura utilizando linguagens de programação conhecidas e então através de um processo de transpilação os scripts reais são gerados (a primeira gera scripts Terraform e a segunda CloudFormation). Permitem a criação de building blocks reusáveis e facilitam a adoção para desenvolvedores que desejam permanecer trabalhando com a stack de domínio.
  • CloudFormation: É uma das soluções da própria AWS para provisionamento de infraestrutura. Utiliza de templates feitas em YAML ou JSON e tem a vantagem de ser orquestrado pela própria AWS, ou seja, a execução e o estado não são de responsabilidade do cliente.
  • Eksctl: É a ferramenta de linha de comando (cli) oficial para provisionamento de clusters EKS. Apesar de ser uma ferramenta específica para o EKS, a mencionamos devido a sua facilidade de utilização e maturidade.
  • AWS Controllers for Kubernetes (ACK): Este último é um pouco diferente dos demais da lista. O ACK puxa mais responsabilidades para dentro do cluster EKS (lembrando que não é um serviço específico para o EKS, pode ser implantado em qualquer cluster K8s) aonde podemos definir receitas que irão representar serviços reais da AWS e que serão provisionados pelo próprio ACK. Estas receitas podem fazer parte da camada de infraestrutura do cluster ou das aplicações (veremos mais adiante), estando sujeitos aos mesmos mecanismos e ciclo de vida.
  • Mantenha todos os seus scripts versionados e utilize mecanismos para aplicá-los de maneira automatizada. Uma ferramenta de orquestração como o Jenkins pode ser responsável por este passo.
  • Utilize mecanismos para validar os scripts antes mesmo da execução nos ambientes alvo. Ferramentas de teste de infraestrutura são comuns e ajudam a fortalecer a qualidade.
  • Aplique políticas para garantir padrões e limites. A engine Open Policy Agent pode ser utilizada para estes fins e alguns exemplos de políticas são: quais serviços da cloud podem ser provisionados, quais tipos de instância EC2, padronização tags, enforce de boas práticas como por exemplo habilitar proteção de deleção para instâncias RDS em ambiente produtivo, validar o range CIDR de uma VPC, etc.
  • Modularize os componentes da infraestrutura para garantir reusabilidade e também evolução contínua. Para isto pode ser adotado um modelo de segregação por responsabilidade (network, storage, compute) ou um modelo de share-nothing aonde cada stack possui todos os recursos necessários para executar um conjunto de aplicações (serverless, contêineres).
  • Sempre versione os seus módulos e sempre utilize versões específicas.

2- Infraestrutura do cluster Kubernetes

  • Definir cotas, limites e valores padrão para os recursos implantados
  • Limitar quais e quantos itens podem ser criados em cada namespace
  • Gerenciar o tráfego de network
  • Monitorar a saúde do cluster
  • Definir prioridades para os workloads
  • Definir regras de autorização
  • Elasticidade — Cluster Autoscaler
  • Backups do cluster — Velero
  • Tráfego de entrada para os serviços HTTP expostos — NGINX Ingress Controller / ALB Ingress Controller
  • Registros de DNS para os serviços expostos — External DNS
  • Monitoramento e métricas — Prometheus Operator
  • Regras de network — Calico
  • Mantenha todos os add-ons e manifests de políticas e configurações sob versionamento no mesmo repositório e garanta que a aplicação destes seja executada de forma automatizada. Nós aconselhamos o modelo GitOps para tal fim, com isso temos o repositório Git como ponto único de referência (source of truth) e nos beneficiamos dos mecanismos nativos do mesmo como auditoria, segurança, pull requests, etc. Como ferramenta nós recomendamos o Flux CD devido ao fato do mesmo ser recomendado pela própria AWS para promover a cultura GitOps e está evoluindo a passos largos juntamente com a comunidade (Flux v2).
  • Utilize Helm charts para obter versões estáveis e validadas para cada add-on. O Flux CD possui um componente adicional chamado de Helm Operator, que é capaz de aplicar os conceitos de GitOps para as Helm Releases versionadas no seu repositório.
  • Sempre utilize versões fixas para todos os add-ons instalados.
  • Monitore a saúde de todos os componentes instalados no seu cluster. O Prometheus Operator é a nossa recomendação como tecnologia, devido ao seu extenso ecossistema, resiliência e fácil utilização. Um dos componentes provisionados por ele é o Alert Manager, que irá gerar notificações sobre problemas encontrados através das regras configuradas. Uma dica importante é integrar esta ferramenta ao canal de comunicação utilizado pela sua equipe (Slack, Discord, Telegram, etc.), isto irá fornecer feedbacks contínuos e dará visibilidade ao ambiente. Praticamente todos os componentes atuantes possuem webhooks que podem ser utilizadas para estes fins.

3- Infraestrutura dos workloads

  • Qual repositório/imagem/tag Docker contém o workload
  • Quais os recursos de CPU e memória
  • Quais variáveis de ambiente serão utilizadas
  • Quais volumes serão montados
  • Como identificar se o workload está saudável
  • Quantas réplicas devem ser executadas
  • Como será exposto o tráfego para o workload
  • Qual o nível de privilégio que o workload precisa para executar adequadamente
  • Dependendo do tamanho e das responsabilidades atribuídas aos seus times de desenvolvimento, mantenha os manifests versionados junto das aplicações.
  • Utilize um modelo de push-based através de um pipeline de entrega para obter maior controle sobre todos os estágios necessários. Para a ferramenta de orquestração do pipeline aconselhamos o Jenkins, pela sua maturidade e flexibilidade.
  • Utilize uma ferramenta para templating dos seus manifests, com isso você irá melhorar a legibilidade e reusabilidade. Kustomize e Helm são ótimos exemplos de ferramentas (o Helm pode ser utilizado apenas para renderização da template dependendo do cenário).
  • Estabelecer e aplicar políticas de boas práticas antes mesmo dos manifests serem aplicados no ambiente alvo. A engine Open Policy Agent é fortemente recomendada para definir e aplicar estas regras aos manifests. Exemplos de políticas que podem ser estabelecidas neste pilar do framework são: labels padronizadas, versionamento correto das imagens (sempre pinadas e nunca apontando para a latest), definição de recursos utilizados (QoS Guaranteed ou Burstable), obrigar o uso de probes para garantir a saúde do workload, etc.
  • Faça backups frequentemente dos namespaces que contém os seus workloads. Uma ferramenta que faz este trabalho com excelência é o Velero, que pode ser configurado para utilizar um armazenamento de baixo custo e altamente durável como o S3. Pode também agendar automaticamente a execução destes backups e inclusive suporta efetuar backups não apenas dos manifests mas também dos volumes persistentes utilizados.

--

--

Cloud Specialists providing professional services with DevOps, BigData, Cloud Native Applications and Security. https://www.3bit.com.br/3bit

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
3Bit Technologies

Cloud Specialists providing professional services with DevOps, BigData, Cloud Native Applications and Security. https://www.3bit.com.br/3bit