Desenvolvendo uma aplicação DevOps usando Kubernetes e NodeJS
Desenvolvendo uma aplicação DevOps usando Kubernetes e NodeJS
# whoami
root Victor Perin
- Organizador do NodeSchool Campinas
- Desenvolvedor NodeJS
- Desculpem pelos vicios de linguagem
- ❤️ Cryptography | Cypherpunks | Bitcoins
- ❤️ JS | Docker | NoSQL
- ❤️ FP | Reactive | Async
- ❤️ DevOps
Sumário
- O que é DevOps
- O que são containers
- O que é Docker
- O que é kubernetes
- Que problemas ele resolve
- Arquitetura simplificada
- Primitives
- Pods
- Labels & Selectors
- Deployments
- Services
- Nodes
- Master Node
- Workshop!
Antes...
O que é DevOps?
O que são
Containers?
São uma padrão de unidade de software.
Performam melhor que VMs, pois não precisam carregar um OS virtual e ainda conseguem compartilhar libs comuns entre si.
E esse tal de
Docker?
Docker é uma camada adicional de abstração para containers linux
(e agora Windows também)
Finalmente vamos começar
Kubernetes o que é?
- Criado pela Google
- Orquestra e gerencia clusters de contêineres
- Código aberto
- Automatiza a implementação de aplicações
Problemas que o Kubernetes tenta resolver
- Usuarios esperam sua aplicação online 24/7
- Devs querem atualizar seu código, multiplas vezes por dia.
- Desejo de usar recursos cloud eficientemente via orquestração de containers
- Fault-tolerant, self-healing
- Escalabilidade
Problemas que o Kubernetes tenta resolver
Com mais de uma década de experiencia rodando aplicações de larga escala em containers, a Google fez o Kubernetes.
- Inspirado por um sistema interno chamado Borg
- Construido do zero para suportar microserviços
- Kubernetes é feito para Ops e Devs
Arquitetura Kubernetes simplificada
Primitives: Pod
-
Conjunto de um ou mais containers que agem como unidade e são entregues juntos
-
Compartilham rede e podem compartilhar filesystem
Labels & Selectors
- chave/valor anexados aos objetos
- não implica diretamente semantica ao core do sistema
- pode ser adicionado no momento da criação ou depois da criação do objeto
metadata:
labels:
app: webapp
tier: frontend
release: stable
Primitives: Deployment
- Criam e atualizam pods
- Podem escalar para aguentar a demanda
- Podem dar rollback ou rollfoward
replicas: 2
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: webapp:latest
ports:
- containerPort: 8080
name: http
env:
- name: REDIS_HOST
value: 'redis-primary'
Primitives: Service
- Definem as maneiras de acesso aos Pods
- Services se baseiam em labels para achar Pods e rotear tráfico
- Dentro do cluster fazem load balancing
- Podem também interagir com serviços externos (GCloud, AWS) para criarem serviços externos.
replicas: 2
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: webapp:latest
ports:
- containerPort: 8080
name: http
env:
- name: REDIS_HOST
value: 'redis-primary'
Sabores de Services
replicas: 2
template:
metadata:
labels:
app: webapp
spec:
containers:
- name: webapp
image: webapp:latest
ports:
- containerPort: 8080
name: http
env:
- name: REDIS_HOST
value: 'redis-primary'
-
ClusterIP: Expõe o service ao cluster de IPs internos.
-
NodePort: Expõe o service em cada IP dos Nodes em uma porta estática
-
LoadBalancer: Expõe o service externamente usando o load balancer do provedor de cloud.
-
ExternalName: Mapeia o service para um dominio externo (ex: foo.bar.example.com), retornando um registro CNAME
Nodes
- Maquinas (virtuais ou físicas)
- Rodam o kubelet e ficam ouvindo informações do servidor master
Master
- Servidor principal, roda apenas o Kubernetes
- Responsavel por gerenciar tudo, Nodes, Pods, Services, etc.
- Comunica-se com ele por meio do kubectl
Por ultimo...
- Minikube: uma forma simples de rodar o kubernetes em um único PC, geralmente usado para aprender.
- Kubeadm: Ferramenta para simplificar a configuração TLS do kubernetes e simplifica a adição de nodes, no cluster
Workshop Time!
Desenvolvendo uma aplicação DevOps usando Kubernetes e NodeJS
By Victor Perin
Desenvolvendo uma aplicação DevOps usando Kubernetes e NodeJS
- 409