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