Skip to content

Containers e K8s

Aviso

AVISO IMPORTANTE !!!

Parabéns !!! Você chegou a um roteiro avancado, este Roteiro envolve a resolução de problemas de aplicação, esperamos que você esteja preparado, este roteiro é prototipado por você!!!!

WebServer

  • Criar uma instância m1.small com IP público no Openstack, nomea-la como juju-openstack-web-server
  • Adicionar um Security Group novo a esta instancia (não utilizar o default)
  • Acessar a instancia criada
  • Vamos criar um WebServer em NodeJS
  • Criar o arquivo ~/hello-node/server.js
#!/usr/bin/env nodejs

var http = require('http');
var os = require('os');

var handleRequest = function(request, response) {
    console.log('Received request for URL: ' + request.url);
    response.writeHead(200);
    response.end('{ "host": ' + os.hostname() + ', "message": "Hello World!"}');
};

var www = http.createServer(handleRequest);
www.listen(8082);
console.log('Server running at http://localhost:8082/');
  • Testar o WebServer rodando localmente no terminal.
sudo apt install nodejs
node server.js

Tarefa

WebServer

  1. De um print das Telas abaixo:
  2. Da aba network topology no OpenStack.
  3. Das regras do Security Group utilizado.
  4. Da Aba do navegador com o WebServer Rodando.

Containerizando este WEBSERVER

Instalar o Docker na instancia juju-openstack-web-server

Arquitetura Docker ❗

Imagem-Topologia

sudo apt-get update
sudo apt install build-essential apt-transport-https curl
curl -fsSL https://get.docker.com | sh -
sudo usermod -aG docker $USER
newgrp docker
docker version
docker run hello-world
  • Criar uma um arquivo ~/hello-node/Dockerfile que dará origem ao container
FROM node:6.9.2
EXPOSE 8080
COPY server.js .
CMD node server.js
  • Montar a imagem local (Cria um container com esta aplicacao webserver)

docker build -t hello-node:v1 ./hello-node/

  • Rodar o container com a imagem criada.

docker container run hello-node:v1

Tarefa

Docker

  1. De um print das Telas abaixo:
  2. WebServer Rodando no navegador.
  3. Saída do comando (docker images ls)
  4. Saída do comando (docker container ls)

Docker Hub

Aviso

Caso não tenha ainda, criar individualmente um login (usuário) na https://hub.docker.com/

• Fazer o login no Docker • Aplicar a tag na imagem e dar o push do Docker Hub • Para mais detalhes docker --help

Fazendo um Deploy

  • Fazer o deploy da imagem docker criada na sessão anterior

kubectl run hello-node --image=[user]/hello-node:v1 --port=8080

  • Verificar no terminal: kubectl get all
  • Verificar o deploy status no Dashboard
  • Expandir o deploy para 5 réplicas do pod

Tarefa

Dashboard Kubernetes

  1. De um print das Telas abaixo:
  2. Do dashboard Kubernetes com as 5 replicas

Acessando o Deploy - entregando a aplicação para seu cliente

Criar um serviço que irá expor o deploy

Modo 1 - ClusterIP com Ingress

kubectl expose deployment hello-node --type=ClusterIP

  • Criar o arquivo ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hello-node-ingress
spec:
  rules:
  - host: hello-node.[ip do kubernetes-worker].xip.io
    http:
      paths:
      - path: /
        backend:
          serviceName: hello-node
          servicePort: 8080
* Aplicar arquivo ingress ao K8s

kubectl create -f ingress.yaml

Tarefa

Expor e Acessar o deploy utilizando Cluster-IP

  1. De um print das Telas abaixo:
  2. Do comando -> kubectl get all

Modo 2 - NodePort

kubectl expose deployment hello-node --type=NodePort

  • Verificar qual porta foi designada e liberar o security group do worker

juju run --unit kubernetes-worker/[# worker] "open-port [porta]"

Tarefa

Expor e Acessar o deploy utilizando NodePort

  1. De um print das Telas abaixo:
  2. Do comando -> kubectl get all
  3. WebServer Rodando no navegador utilizando a porta aberta.

Alterando o deploy

  • Alterar o arquivo server.js
  • Montar uma nova imagem com tag v2 e faça um push
  • Fazer um deploy de um pod de testes
  • Testar as alterações
  • Fazer a implantação imediata em produção:

kubectl set image deployment/hello-node hello-node=[user]/hello-node:v2

Tarefa

Modificação da imagem rodando em produção

  1. De um print das Telas abaixo:
  2. Do comando -> kubectl get all
  3. WebServer modificado Rodando no navegador utilizando a porta aberta.