Instalar kind
Instalar kubectl
Baixar imagem
- docker pull kindest/node:v1.21.1
Criar cluster Kubernetes
- kind create cluster --name meucluster --config cluster.yaml
- tem o arquivo de configuração de contexto, configura de maneira automático para kubectl acessar o cluster Kubernetes
- configura um load balancer, cenário de alta disponibilidade
Listar os nodes do Cluster
- kubectl get nodes
Listar quais são os clusters criados pelo Kind
- kind get clusters
Ver como foi criado o container
- docker container ls
- Terá o haproxy - load balancer
- Terá os control-plane e os worker
- Verificar o bind de porta
Excluir cluster
- kind delete cluster --name meucluster
- executa os containers no kubernetes
- não traz escalabilidade
- não traz resiliência
- não traz gerenciamento de versão
Consultar grupo de recursos
- kubectl api-resources
Aplicar o manifesto do pod no Kubernetes
- kubectl create -f meupod.yaml
- kubectl apply -f meupod.yaml
Listar Pods - Pod rodando no cluster kubernetes
- kubectl get pods
Detalhes do Pod
- kubectl describe pod meupod
- mostra o nome, qual node do cluster está rodando, porta, imagem utilizada, eventos que aconteceram
- descrever melhor o objeto
Redirecionar qualquer chamada da porta 8080 para a porta 80 do container
- kubectl port-forward pod/meupod 8080:80
- parecido com o port bind
- faz o redirecionamento da porta local para a porta do pod
Deletar o Pod do cluster
- kubectl delete pod meupod
- não recria o pod, não tem resiliência neste cenário
- não tem escalabilidade, criação de replicas
Uso de label e selector
- label: marcar aquele objeto, elemento chave valor
- selector: selecionar o objeto pela label
Selecionar objeto específico pela label
- kubectl get pods -l app=web
- escalabilidade - diminuir ou aumentar número de replicas
- resiliência - confiabilidade: Pod sempre em execução no meu cluster, número de replicas sendo executadas no Kubernetes
- gerenciamento de replicas, controlar número de replicas
- não gerencia as versões de maneira automática, precisa deletar o pod para aplicar nova versão
- replicaset gerencia pods
Filtrar recurso
- kubectl api-resources | grep replicaset
Executar replicaset
- kubectl apply -f meureplicaset.yaml
Listar ReplicaSets
- kubectl get replicaset
- gera um nome aleatório
Verificar mais detalhes do ReplicaSet
- kubectl describe replicaset meureplicaset
Deletar um Pod
- kubectl delete pod [NOME_POD]
Alterar porta para verificar não atualização da imagem
- kubectl port-forward pod/[NOME_POD] 8080:80
- não consegue fazer a troca de versão de uma forma fácil e automática
- vai funcionar se deletar o pod, replicaset vai criar um novo pod
- quando recria um novo pod irá iniciar com a versão atualizada
Remover replicaset
- kubectl delete -f meureplicaset.yaml
- gerenciamento de versões dos pods e replicaset
- Deployment gerencia replicaset
- se mudar para versão 2, novo replicaset será criado, vai excluindo um pod e outro pod será criado no novo replicaset, consegue fazer o processo de rollback com maior facilidade
- melhor gestão da aplicação
- deploy eficiente no kubernetes
Aplicar deployment
- kubectl apply -f meudeployment.yaml
Listar o deployment
- kubectl get deployment
Detalhes do deployment
- kubectl describe deployment
- cria o nome do replicaset e pod dinâmico
Consegue ver as versões
- kubectl rollout history deployment meudeployment
- atualizar a versão da imagem
- consegue voltar a versão do pod
Voltar versão
- kubectl rollout undo deployment meudeployment
- faz todo o processo de troca
- mantêm o replicaset antigo para voltar versão com eficiência
Detalhes do pod, ver eventos
- kubectl describe pod [NOME_POD]
- voltou para o replicaset antigo
- meio de comunicação com os pods
- balanciamento de carga, várias replicas do pod, precisa acessar eles e recebem carga iguais
- ClusterIP: gera comunicação internamente, ex.: API precisa acessar banco de dados, expõe internamente no kubernetes
- mais utilizado, vários microservice se comunicando entre si
- não consegue acessar externamente
- NodePort: cria um canal externo, consegue se comunicar com o pod
- utiliza uma porta do cluster kubernetes, abertura de porta para poder acessar externamente
- libera porta aleatória de 30000 até 30777, dá para definir no manifesto
- LoadBalancer: para services rodando na nuvem
- cria um load balance na frente do service
- cria um IP público, para acessar a service
Listar os services
- kubectl get services
- acessar os pods
Obter detalhes do container
- docker container ls
- docker container inspect [CONTAINER_ID]
- para pegar o IP do container
- e acessar com a porta liberada pelo NodePort
- balanceamento de carga entre os containers
- não é boa prática trabalhar com IP e containers
Obter detalhes de todo os objetos
- kubectl get all
Construir a imagem
- docker build -t poferrari/rotten-potatoes:v1 .
Login no dockerhub
- docker login
Subir para o repositório
- docker push poferrari/rotten-potatoes:v1
Criou a tag v1, precisa subir a tag latest também - Boa prática
- docker tag poferrari/rotten-potatoes:v1 poferrari/rotten-potatoes:latest
Subir para o repositório
- docker push poferrari/rotten-potatoes:latest
- imagem criada e disponível no docker registry
Aplicar deployment do Mongo
- kubectl apply -f deployment.yaml
- kubectl port-forward svc/mongodb 27017:27017
- watch 'kubectl get all'
Criar 20 replicas
- kubectl scale deployment web --replicas 20