Permite implantação de aplicativos dentro de containers.
Similar a uma máquina virtual, no entanto o kernel é compartilhado. Ou seja, não há necessidade do overhead de ter toda uma stack de sistema operacional rodando na memória da máquina host.
A ideia é que cada container rode apenas a aplicação ou serviço e que seus dados importantes fiquem persistidos fora do container, tornando possível que o container seja descartável (destruir/recriar o container sem comprometer a integridade da instalação da aplicação/serviço).
Dúvida: O que é um pod? Resposta: containers que trabalham em conjunto.
“Um dos gravíssimos erros é ver o pessoal migrar suas aplicações com imagens gigantescas com vários gigas para containers e achar que vai deixar aquilo ligado eternamente. Container não é pra isso. Container é feito para nascer e morrer rápido.”
O Rancher é um software open source que conecta um conjunto de softwares necessários para o gerenciamento e orquestração de containers via web.
O Rancher aceita tanto hosts Linux de numvem pública, nuvem privada, servidores físicos ou máquinas virtuais, o Rancher não faz distinção em seu uso, implementando uma camada de serviços de infra-estrutura projetados especificamente para facilitar o gerenciamento de aplicações em containers.
Os serviços de infraestrutura do Rancher incluem rede, armazenamento, volumes, balanceador de carga, DNS.
Kubernetes é uma plataforma open source de gerenciamento de containers de nível enterprise, baseado em 15 anos de experiência do Google e pronto para o mundo multi-cloud: nuvem pública/privada/híbrida. Possui desenho modular e pode ser rodado em quase qualquer lugar.
https://research.google/pubs/pub43438/: um paper falando sobre o Borg, que é a ferramenta que deu origem ao kubernetes. Este documento com conteúdo bastante rico descrevendo os problemas enfretados pela google antes da implementação do kubernetes.
vídeo: https://youtu.be/7MwxA4Fj2l4
O kubernetes provê uma arquitetura flexível e com mecanismo desacoplado de service discovery. Como a maioria de plataformas computacionais distribuídas, um cluster consiste de:
O master é responsável pela API, agendamento dos deployments e gerenciamento total do cluster.
,-----------------------------------------------,
| kubernetes master |
| ,------------, ,-----------, ,------------, |
| | | | | | | |
| | API Server | | Scheduler | | Controller | |
| | | | | | | |
| '------------' '-----------' '------------' |
| ,-------------------------------------------, |
| | etcd | |
| '-------------------------------------------' |
'-----------------------------------------------'
Cada node do cluster roda:
Os nodes são os trabalhadores do cluster. Eles expõem os serviços de computação, rede e armazenamento para as aplicações.
Apresentação: DevOps na AWS: Construindo Sistemas para Entregas Rápidas - Fernando Sapata - AWS Summit 2018 - DEV301
Ingress: é o que responde pela aplicação do kubernetes externamente.
Parte prática inicia aos 13:35.
Criar 4 máquinas virtuais 4 GB/2 CPUs (máquina de $20 na DigitalOcean):
ubuntu
com acesso via chave SSHcriar uma chave pública na máquina que será usada para acessar o host remoto:
ssh-keygen -t dsa
Isso vai gerar o arquivo /home/USERNAME/.ssh/id_dsa.pub
.
# executar como root
####################
# criar um usuário sem senha
useradd --create-home --home-dir /home/USERNAME --shell /bin/bash USERNAME
usermod -aG sudo ubuntu
ufw allow OpenSSH
# Copiar o conteúdo de `/home/{USER_NAME}/.ssh/id_dsa.pub` **da máquina local**
# e colar **no host remoto** em `/home/ubuntu/.ssh/authorized_keys`.
# Configurar as permissões
chown -R ubuntu:ubuntu /home/ubuntu/.ssh
chmod 700 /home/ubuntu/.ssh
chmod 600 /home/ubuntu/.ssh/authorized_keys
Pode ser uma boa dar uma olhadinha em /etc/ssh/sshd_config
e certificar-se que PubkeyAuthentication yes
.
Se tudo der certo agora é possível ir na “máquina local” e se logar sem senha usando o comando:
ssh ubuntu@ip.do.host
# executar na sua máquina local
ssh -T ubuntu@ip.do.host << EOF
sudo su
curl https://releases.rancher.com/install-docker/19.03.sh | sh
usermod -aG docker ubuntu
EOF
Começa em 21:30 da aula 4.
Lembrar de liberar todas as portas no firewall.
Importante: necessário ter uma conta no docker hub. Meu nome de usuário é meleuzord
.
Isso parece ser uma dica para remover todos os containers locais:
docker rm -f $(docker ps -a -q)
Comandos a serem executados na máquina do rancher:
# considerando logado como usuário ubuntu
sudo su
apt-get install git -y
curl -L \
"https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
exit # sair do 'sudo su'
cd # ir para /home/ubuntu
git clone https://github.com/jonathanbaraldi/devops
cd devops/exercicios/app
####################
# container do redis
####################
cd redis
# criando uma imagem no nosso docker hub
docker build -t meleuzord/redis:devops .
# executando o container a partir da imagem criada acima
docker run -d \
--name redis \
-p 6379:6379 \
meleuzord/redis:devops
# conferindo...
docker ps
docker logs redis
###################
# container do node
###################
cd ../node
docker build -t meleuzord/node:devops .
# executando o container ligando-o com o container do redis
docker run -d \
--name node \
-p 8080:8080 \
--link redis meleuzord/node:devops
# com isso temos a aplicação rodando e conectada ao redis.
# para conferir acesse /redis
# conferindo...
docker ps
docker logs node
#################
# container nginx
#################
cd ../nginx
docker build -t meleuzord/nginx:devops
# executando o container ligando-o com o container do node
docker run -d \
--name nginx \
-p 80:80 \
--link node \
meleuzord/nginx:devops
# conferindo...
docker ps
docker logs nginx
# com isso podemos acessar a aplicação na porta 80 e 8080
Após confirmar que estes 3 containers estão servindo a aplicação corretamente, podemos remover todos os containers (para posteriormente chamá-los através do docker-compose
).
docker rm -f $(docker ps -a -q)
docker volume rm $(docker volume ls)
cd ..
vim docker-compose.yml
# editar linhas 8, 18 e 37, colocando username do docker hub
docker-compose -f docker-compose.yml up -d
curl localhost:80
# realizar o mesmo teste com curl na sua máquina local
# testar em /redis, /html e /load
# conferindo...
docker logs
# terminando a aplicação
docker-compose down