Introdução

Num modelo sem kubernetes, onde implementamos um pseudo-cluster, como resolver os seguintes problemas:

  • O que fazer quando um container apresenta problemas?
  • O que fazer quando um nó, de seu pseudo-cluster morrer?
  • O que fazer quando um nó, não renponder a uma requisição?

Quanto mais de um artefato está implantando para construir uma aplicação(microserviços);

  • Naked Pod, executado pelo K8s, mas não gerenciado por ele
  • O replicaset guarda a quantidade de replicas que um container deve rodar, o deployment, fica em cima do replicaset... O deployment guarda as versões dos containers que estão rodando.
  • O service é um balanceador de carga para os deployments

É necessário a criação de mecanismos de monitoramento do estado de todos os elementos do pseudo-cluster, implementação de lógicas complexas e customizadas para garantir a disponibilidade de sua aplicação.

  • Também conhecido como K8s é um orquestrador de aplicações containerizadas.

  • Provê mecanismos para construção e implantação de aplicações distribuídas de maneira a manter a confiabilidade e escalabilidade

Conceitos

Confiabilidade: Os serviços não podem falhar. Se partes do sistema falhar, outras deverão continuar a funcionar.

Disponibilidade: O sistema deve se manter disponível mesmo em atualizações/manutenções.

Escalabilidade: Estratégia de alocação de recursos em operação. Controlar o aumento e diminuição de recursos de acordo com a demanda.

  • Horizontal: Adição ou remoção de nós
  • Vertical: Adição de mais recursos computacionais aos nós

Elasticidade: Adapta a capacidade em relação a demanda. Geralmente está diretamente associada ao monitoramento e automação de disponibilização de recursos

A utilização de um orquestrador como K8s habilita, entre outras: velocidade, escalabilidade, abstração da infraestrutura e eficiência.

Velocidade

Não é o número de funcionalidades entregues, mas sim o número de coisas entregues, enquanto o sistema se mantêm altamente disponível.

A interrelação entre imutabilidade, configuração declarativa e self-healing, aumenta a velocidade com que se implanta aplicações de maneira confiável.

Imutabilidade

A utilização de containers e um orquestrador como o K8s encoraja o desenvolvimento de sistemas distribuídos que aderem ao princípio de infraestrutura imutável

Infraestrutura mutável: O estado da infraestrutura é representado como um acúmulo de mudanças e atualizações, ou seja, as atualizações, mesmo que feitas de maneira automatizadas, seguem uma sequência definida de procedimentos que devem ser executados.

Infraestrutura imutável: É representado com um único artefato. Para trocar a versão de uma biblioteca ou VM ou container toda a imagem será refeita, enquanto que a antiga permanece disponível para casos de necessidade de um rollback. Containers imutáveis estão no cerne do kubernetes. Apesar de possível, não é recomendado a modificação de containers em execução.

Configuração Declarativa

É o contrário da configuração imperativa. A configuração no K8s é feita com a definição de objetos de configuração de como a aplicação deve existir. A configuração declarativa descreve o [[Desired State#Definição | estado desejado]] de algo.

Imperativa: Descreve ações que devem ser executadas para se alcançar o estado esperado da aplicação; Declarativa: Descreve todos os elementos necessários para que o estado esperado seja alcançado;

É possível utilizar ferramentas e metodologias utilizadas no desenvolvimento de software, tais como controle de versão, revisão de código e testes unitários.

Self Healing

Continuamente executa ações para alcançar o estado desejado(idempotência). O daemon não somente criará o que foi declarado, mas continuamente garantirá que o estado desejado seja mantido/ancaçado.

Escalonamento

A utilização do k8s habilita o fácil escalonamento, tanto da solução desenvolvida, quanto da equipe envolvida.

Desacoplamento: Permite separar cada parte do sistema de forma a aumentar a facilidade de identificação da necessidade de escalonamento das partes. O Desacoplamento dos times permite a construção de soluções robustas por conta do foco empregado por cada time.

  • O tamanho ideal de uma equipe pode ser mensaurada utilizando a técninca two-pizza team;
  • Para ajudar na implantação de micro serviços, o k8s dispõem das seguintes abstrações:
    • [[Pods]]: Grupo de containers;
    • Namespace: Provê isolamento e controle de acesso para restringir a interação com os recursos;
    • Service: Provê o lanceamento de carga, nomeação e descoberta para isolamento de um microserviço de outro;
    • Ingress: Frontend que combina múltiplos micro serviços em uma única API externalizada;

SE uma parte dos sistema não é escalável, toda a aplicação não é escalável

[[Pods#Conceitos| Vou te contar viu]]

Abstração da infraestrutura

A infraestrutura é abstraída pois os elementos presentes em uma solução são descritos de maneira abstrata, separando o desenvolvimento da implementação e aproximando as equipes dos conceitos relacionados. A utilização do k8s habilita a portabilidade entre infraestrutura on premises e provedores de cloud computing.

Service -> ALB PersistentVolume -> EBS