Índice
- Introdução
- Kubernetes
- Como testar arquivos do kubernetes
- Mostrando na prática
- Instalando o kind
- Instalando o kind no MAC usando o brew
- Criando Cluster
- Obtendo informações do cluster
- Deletando o cluster
- Configurando Ingress Controller
- Publicando recursos no kubernetes local
- Outros recursos
- Conclusão
- Referência
Introdução
Com a crescente migração das empresas para o ambiente cloud, a necessidade de utilização de containers se tornou cada vez maior. Sistemas com arquiteturas mais complexas se tornam mais facies de manter e integrar através de ferramentas de contêineres como Docker. Contêineres trazem simplicidade quando pensamos em unidades, mas o que acontece quando temos que gerenciar o ciclo de vida de vários contêineres ao mesmo tempo? Nesse caso, precisamos de um orquestrador de contêineres e há diversas opções (AWS EKS, Open Shift, Nomad, Docker Swarm), porém vamos falar do mais popular de todos, Kubernetes.
Kubernetes
O Kubernetes é uma plataforma para gerenciamento de cargas de trabalho e serviços distribuídos em contêineres, que facilita tanto a configuração declarativa quanto a automação.
Para publicar um contêiner no kubernetes podemos utilizar a ferramenta kubectl que é a ferramenta oficial de linha de comando. Você pode encontrar mais detalhes neste link.
kubectl apply -f ./aplicacao.yaml
Os recursos que queremos publicar no kubernetes podem ser descritos em arquivos YAML como no exemplo abaixo
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
ports:
- containerPort: 80
Não vamos aprofundar muito no kubernetes pois não é o objetivo deste artigo.
Como testar arquivos do kubernetes?
Uma parte importante do ciclo de desenvolvimento são os testes. É muito importante que a gente consiga testar inclusive os arquivos que descrevem os recursos que vamos publicar no kuberntes.
O que é o Kind?
kind é uma ferramenta para executar clusters locais do Kubernetes usando “nós” em contêiner do Docker.
Isso significa que podemos iniciar um cluster kubernetes no docker instalado na máquina e assim conseguir testar nossos arquivos.
Como Funciona?
De maneira simples, o kind cria um container docker que irá representar o cluster kubernetes.
Mostrando na prática
Instalando o kind
Há diversas formas de instalar o kind e os detalhes podem ser vistos aqui.
Exemplo utilizando o brew para instalar no MAC:
brew install kind
Criando cluster
A forma mais simples é indo direto no comando create
kind create cluster
Também é possível criar a partir de um arquivo de configuração:
kind: Cluster
apiVersion: kind.x-k8s.io/v1
name: cluster-kind
kind create cluster --config cluster.yaml
Obtendo informações do cluster
O comando abaixo lista os clusteres que foram criados.
kind get clusters
O comando abaixo detalha um cluster específico
kubectl cluster-info --context cluster-kind
Deletando o cluster
Para deletar o cluster é tão simples quanto cirar:
kind delete cluster --name cluster-kind
Configurando ingress controller
Esse exemplo mostra como criar um Ingress Controller que será responsável por estabelecer uma conexão entre o ambiente local o cluster kubernetes.
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
name: cluster-kind
nodes:
- role: control-plane
kubeadmConfigPatches:
- |
kind: InitConfiguration
nodeRegistration:
kubeletExtraArgs:
node-labels: "ingress-ready=true"
extraPortMappings:
- containerPort: 80
hostPort: 80
protocol: TCP
- containerPort: 443
hostPort: 443
protocol: TCP
Agora basta criar o cluster
kind create cluster --config cluster.yaml
Publicando recursos no kubernetes local
Os comandos abaixo dependem da instalação do kubectl e como não é escopo detalhar o kubernetes, vou coloca-los apenas para fins de exemplo.
kind: Pod
apiVersion: v1
metadata:
name: kind-app
labels:
app: kind-app
spec:
containers:
- name: kind-app
image: hashicorp/http-echo:0.2.3
args:
- "-text=Hello World! This is a Kubernetes with kind App"
---
kind: Service
apiVersion: v1
metadata:
name: kind-service
spec:
selector:
app: kind-app
ports:
# Default port used by the image
- port: 5678
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kind-ingress
spec:
rules:
- http:
paths:
- pathType: Prefix
path: "/kind"
backend:
service:
name: kind-service
port:
number: 5678
---
kubectl apply -f kind-app.yml
Agora é só acessar o link http://localhost:5678/kind para ver o resultado
Outros recursos
Para aplicar outros recursos como config-map, secrets, deployments, cron-job, etc basta seguir a mesma ideia.
Conclusão
Isso foi uma introdução bem superficial ao kind, apenas para sentir o gostinho. Há muito mais para explorar. O mais importante é entender que o kind permite a realização de testes locais de todos os artefatos antes mesmo de executa-los no ambiente real.