Referência de uso de Kubernetes


Introdução ao Kubernetes

Vídeos que introduzem Docker e Kubernetes

Linuxtips

Fabrício Veronez KubeDev

Recursos oficiais

Kubenetes


Kubernetes

O Kubernetes é um orquestrador para os containers, então ao invés de você ter somente alguns containers que foram publicados manualmente, é possível instruir o Kubernetes a subir automaticamente os containers. O Kubernetes entre outras coisas trás:

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

Minikube (para rodar localmente)

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/

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

Verificar os pods rodando

kubectl get pods

Deployment usando Kubernetes

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

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”



Comentários