Orquestradores de Containers
Guilherme Moreira - 28/06/22 - CBLabOrquestradores de Containers
O que são?
Automatizam o deploy e gerenciamento de aplicações em containers.
Pra quê?
Docker Swarm
vs
Kubernetes
Docker Swarm
Vantagens
Desvantagens
Kubernetes
Vantagens
Desvantagens
Arquitetura
Objetos são entidades pesistentes em um cluster.
Kubertenes usa essas entidades para representar o estado atual do cluster.
Esses objetos são modificados por meio da API do Kubernetes.
O kubectl faz as chamadas necessárias na API.
É possível usar a API diretamente.
Tipicamente, os objetos são descritos usando arquivos yaml, que são passados para o kubectl.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
spec:
selector:
matchLabels: nginx
replicas: 2
template:
metadata:
labels:
app:nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
Exemplo de um deployment do Nginx
Campos obrigatórios
nomeUm Pod é a unidade básica de um cluster. Geralmente contém um ou mais containers.
São efêmeros por design, então podem ser destruídos em qualquer momento.
Containers em um pod compartilham rede, armazenamento e lifecycle, e podem se comunicar diretamente, além de serem iniciados e destruídos ao mesmo tempo.
Usado para criar múltiplas cópias de um mesmo Pod em um cluster.
Garante que um número determinado de Pods estejam rodando em qualquer momento.
Se um Pod morrer, o ReplicationController cria outro para substituí-lo.
Uma alternativa mais poderosa ao ReplicationController.
Não são feitos para serem criados diretamente, geralmente são criados automaticamente por outros objetos.
Usados para gerenciar Pods.
A primeira coisa que um Deployment faz é criar um ReplicaSet.
São usados para escalar a aplicação, aumentando e diminuindo a quantidade de Pods rodando.
Outro objeto que gerencia os Pods de um cluster.
Garante que um pod em particular seja executado em todos os nós que compõem um cluster.
Útil para monitoramento ou logging.
Organiza os objetos em um cluster.
Permite que recursos sejam agrupados e ações sejam executadas nesses recursos.
Útil para separar ambientes de stagine e produção, evitando conflitos de nome.
Separam a configuração dos containers.
Permitem que dados sejam alterados dinâmicamente em containers.
Usados para informações não-sensíveis.
https://kubernetes.io/case-studies/spotify/
200 milhões de usuários
Muitos microserviços
Usavam uma solução feita por eles, chamada Helios
Helios foi criado em 2014, antes de qualquer solução open-source para orquestramento de containers.
Decidiram mudar para Kubernetes em 2017.
Em 2020, completaram a migração completa para Kubernetes.
Observaram impacto positivo em todas as métricas coletadas, como tempo de deploy e velocidade para servir mídia.
“Distribuição” de k8s para uso local.
$ sudo ln -s $(which minikube) /usr/local/bin/kubectl
$ minikube start
$ minikube get pods -A
$ kubectl create deployment hello-minikube \
--image=k8s.gcr.io/echoserver:1.4
$ kubectl expose deployment hello-minikube \
--type=NodePort --port=8080
$ kubectl get services hello-minikube
$ minikube service hello-minikube
$ kubectl port-forward service/hello-minikube 7080:8080
$ firefox localhost:7080
$ curl -sSL https://is.gd/Ke39BN > application.yaml
$ less application.yaml
$ kubectl apply -f application.yaml
$ minikube dashboard
$ kubectl port-forward svc/frontend 8080:80
$ kubectl scale deployment frontend --replicas=5
Chaos é uma plataforma que permite rodar “experimentos” em clusters.
$ curl -sSL https://is.gd/8qju6r | bash
Tente começar um experimento de “pod failure”.