Referência de uso de Kubernetes


Índice

Sobre

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:

Recursos oficiais

Kubenetes

Vídeos que introduzem Docker e Kubernetes

Linuxtips

Fabrício Veronez KubeDev

Componentes do Kubernetes

Temos três elementos que fazem parte de um deployment do kubernetes:


Instalação

Instalação

Instalar o kubectl

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

Instalar uma distribuição do Kubernetes

Para rodar localmente o Kuybernetes, você pode utilizar uma das opções abaixo:

Minikube

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

MicroK8s

Vídeo mostrando a utilização: https://www.youtube.com/watch?v=pT5myDki4oU&t=1392s

Kind

Vídeo mostrando a utilização: https://www.youtube.com/watch?v=pT5myDki4oU&t=2923s

K3S

Vídeo mostrando a utilização: https://www.youtube.com/watch?v=pT5myDki4oU&t=5178s

K3D

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


Comandos do Kubernetes

kubectl get pods  = Verificar os pods rodando

//TODO: Complementar


Colocando uma aplicação node para rodar no Docker

Aplicação exemplo

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

Pesquisar a imagem para utilizar

Você pode encontrar as tags da imagem do node em: https://hub.docker.com/_/node

Por exemplo: 15.10.0-alpine3.10

Criar arquivo Dockerfile

# 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"]

Criar o arquivo .dockerignore

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

Criar a imagem

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 .

Para listar a imagem criada

docker image ls

Para subir a imagem criada para o docker hub

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á

Para criar o deployment do mongo

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”


Criando um job

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



Comentários