O Kubernetes é um orquestrador para os containers.
Quando você coloca um container para rodar manulmente, se o container parar de funcionar você precisará manualmente subir outro, se a demanda aumentar, você também precisará manualmente intervir. O Kubernetes permite automatizar essas tarefas.
O Kubernetes agrega o seguinte na gestão de containers:
Kubenetes
Linuxtips
Fabrício Veronez KubeDev
Temos três elementos que fazem parte de um deployment do kubernetes:
Para rodar executar os comandos no kubernetes utilizamos o kubectl
Siga as instruções de instalação na página: https://kubernetes.io/docs/tasks/tools/install-kubectl/
Para instalar no Windows utilizando o Chocolatey. Abra um prompt do PowerShell como administrador e execute:
choco install kubernetes-cli
Para verificar a instalação:
kubectl version --client
Depois, crie um arquivo “config” em uma pasta “.kube” dentro da pasta do seu usuário:
cd ~
mkdir .kube
New-Item config -type file
Para rodar localmente o Kuybernetes, você pode utilizar uma das opções abaixo:
Para testar o kubernetes localmente (não em ambiente de produção) podemos utilizar o minikube
Você pode obter instruções de instalação na página: https://minikube.sigs.k8s.io/docs/start/
E aqui tem um vídeo com o processo de instalação: #1- O que é o Kubernetes e como instalar o Minikube| Série - Descomplicando o Kubernetes
Para instalar no windows, utilizando o chocolatey, basta utilizar:
choco install minikube
Então, temos os seguintes comandos:
minikube status # status do cluster
minikube start # inicia o cluster
minikube stop # para o cluster
minikube dashboard # exibe no browser um dashboard com as informações do cluster
minikube addons list # lista os complementos suportados, por exemplo: metrics server
Então para iniciar o cluster e abrir o dashboard, execute:
minikube start
minikube dashboard
Para verificar os pods rodando, executar:
kubectl get pods
Vídeo mostrando a utilização: https://www.youtube.com/watch?v=pT5myDki4oU&t=1392s
Vídeo mostrando a utilização: https://www.youtube.com/watch?v=pT5myDki4oU&t=2923s
Vídeo mostrando a utilização: https://www.youtube.com/watch?v=pT5myDki4oU&t=5178s
Site oficial: https://k3d.io/
Vídeo mostrando a utilização: https://www.youtube.com/watch?v=pT5myDki4oU&t=6493s
Instalação no windows:
choco install k3d
Criando o cluster:
k3d cluster create mycluster
kubectl get nodes
//TODO: Complementar
kubectl get pods = Verificar os pods rodando
//TODO: Complementar
Primeiramente, pegue uma aplicação node que você já tenha aí. No meu caso, estou utilizando uma aplicação node que depende do mongodb.
Para rodar a aplicação node, você vai precisar:
Para rodar a aplicação localmente, utilize:
npm install
node .\app.js
Você pode encontrar as tags da imagem do node em: https://hub.docker.com/_/node
Por exemplo: 15.10.0-alpine3.10
# criação da imagem
FROM node:15.10.0-alpine3.10
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
# executar a imagem
CMD ["node", "app"]
Para não copiar para a imagem do Docker que você está gerando a pasta node_modules (ela será recriada com o comando “npm install”) adicione no projeto um arquivo .dockerignore com o conteúdo:
node_modules
docker build -t [namespace]/[repositorio]/[versao] [path]
Utilizar como namespace o seu nome de usuário criado no Docker Hub: Por exemplo:
docker build -t educoutinho/api-produto-teste:v1 .
docker image ls
Primeiro fazer o login, usando seu usuário:
docker login
Enviar a imagem para o docker hub
docker push [conta dockerhub]/[imagem]:versão
docker push educoutinho/api-produto-teste:v1
Depois, você pode acessar sua conta do Docker Hub e verificar, a imagem está lá
Criar um arquivo \k8s\mongodb\deployment.yaml com o código:
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb
spec:
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo:4.2.8
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
value: mongouser
- name: MONGO_INITDB_ROOT_PASSWORD
value: mongopwd
Nesse arquivo
Para subir o deployment, executar:
kubectl apply -f .\k8s\mongodb\deployment.yaml
Criar um arquivo \k8s\mongodb\service.yaml com o código:
apiVersion: v1
kind: Service
metadata:
name: mongodb-service
spec:
selector:
app: mongodb
ports:
- port: 27017
targetPort: 27017
type: ClusterIP
Para subir o service, executar:
kubectl apply -f .\k8s\mongodb\service.yaml
Criar um arquivo: k8s\api\deployment.yaml com o código:
apiVersion: apps/v1
kind: Deployment
metadata:
name: api
spec:
selector:
matchLabels:
app: api
template:
metadata:
labels:
app: api
spec:
containers:
- name: api
image: educoutinho/api-produto-teste:v1
ports:
- containerPort: 8080
env:
- name: MONGODB_URI
value: mongodb://mongouser:mongopwd@mongodb-service:27017/api-produto-teste
Nesse arquivo:
Para subir o deployment da api, executar:
kubectl apply -f .\k8s\api\deployment.yaml
Criar um arquivo k8s\api\service.yaml com o seguinte conteúdo:
apiVersion: v1
kind: Service
metadata:
name: api-service
spec:
selector:
app: api
ports:
- port: 80
targetPort: 8080
nodePort: 30000
type: NodePort
Nesse arquivo:
Para subir o service da api, executar:
kubectl apply -f .\k8s\api\service.yaml
Executando o comando:
kubectl get all
é possível verificar todos os pods, services, deployments e replicaset rodando.
Para testar, acessar a url: http://localhost:8080/api-docs
NOTA: Falta configurar o loadbalancer no minikube, é o equivalente a usar: k3d cluster create meucluster -p “8080:30000@loadbalancer –server 1 agents 2”
Se você precisar que uma aplicação seja executada de forma recorrente, por exemplo, todo dia 1:00 AM, é possível executar isso utilizando um Job.
Documentação oficial do Job: https://kubernetes.io/docs/concepts/workloads/controllers/job/
Documentação oficial do CronJob: https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/
Vídeo explicando como utilizar Job: https://www.youtube.com/watch?v=FzVVdKgFJNA