Repositório dos artefatos utilizados em um workshop que apresentei sobre "Introdução ao Kubernetes". Constitui-se de dois projetos em Spring Boot, chamados "microservice-helloworld" e "microservice-welcome" São microserviços que expõem endpoints rest. Projetos do tipo "exemplos" apenas com os insumos necessários para entender como o Kubernetes gerencia aplicações.
Projeto que será a porta de entrada para requisições externas. Durante o processamento da requisição externa, irá invocar o "microservice-welcome", realizar um processamento e devolver a resposta ao cliente.
Projeto que ficará disponível apenas para receber requisições de serviços de dentro do cluster. Ou seja, irá receber requisições do "microservice-helloworld" mas não será capaz de receber requisições externas ao cluster.
- JDK 8 ou superior
- Docker
- Minikube ou cluster K8s
- Excluir instalações anteriores e criar uma nova
minikube delete --all
minikube start
minikube status
- Utilizar Minikube como repositório Docker (elimina necessidade de fazer "push" das imagens para um repositório externo, como o Dockerhub)
minikube docker-env
eval $(minikube -p minikube docker-env)
- Build dos projetos
docker build -t microservice-welcome:v1 .
docker build -t microservice-helloworld:v1 .
Observação: alguns comandos abaixo utilizam-se das flags:
--dry-run: valida se o comando é válido, porém não efetua a alteração no cluster.
-o yaml: exibe o resultado do comando no formato yaml. Útil para atender necessidades de "Infra as Code"
Ou seja, caso queira efetuar a alteração no cluster, retire estas flags.
- Criar deployments
kubectl run microservice-welcome --image=microservice-welcome:v1 --port=80 # --dry-run -o yaml
kubectl run microservice-helloworld --image=microservice-helloworld:v1 --port=80 # --dry-run -o yaml
- Criar/expor deployments como serviços
kubectl expose deploy microservice-welcome --name=microservice-welcome --port=80 --type=ClusterIP # --dry-run -o yaml
kubectl expose deploy microservice-helloworld --name=microservice-helloworld --port=80 --type=NodePort # --dry-run -o yaml
- Logs e informações
kubectl describe <recurso>
kubectl logs <pod>