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.
Tarefa
WebServer
- De um print das Telas abaixo:
- Da aba network topology no OpenStack.
- Das regras do Security Group utilizado.
- Da Aba do navegador com o WebServer Rodando.
Containerizando este WEBSERVER¶
Instalar o Docker na instancia juju-openstack-web-server¶
Arquitetura Docker
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
- 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
- De um print das Telas abaixo:
- WebServer Rodando no navegador.
- Saída do comando (docker images ls)
- 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
- De um print das Telas abaixo:
- 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
kubectl create -f ingress.yaml
Tarefa
Expor e Acessar o deploy utilizando Cluster-IP
- De um print das Telas abaixo:
- 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
- De um print das Telas abaixo:
- Do comando -> kubectl get all
- 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
- De um print das Telas abaixo:
- Do comando -> kubectl get all
- WebServer modificado Rodando no navegador utilizando a porta aberta.