Primeiros passos com Kubernetes
Iniciando localmente com Docker e Minikube
Docker
Docker é uma plataforma de contêinerização que permite gerenciar e executar containers. Com ele, você pode criar, implantar e executar seus aplicativos localmente.
Para instalar o Docker, siga as instruções na documentação oficial.
Minikube
Minikube é uma ferramenta que facilita a execução do Kubernetes localmente.
Por padrão ele cria um cluster Kubernetes de nó único em sua máquina local via docker. E ajusta a config do kubectl para apontar para esse cluster.
Veja como instalar o Minikube na documentação oficial.
Kubectl
Kubectl é a ferramenta de linha de comando para interagir com clusters Kubernetes.
Veja como instalar o kubectl na documentação oficial.
Veja nossos exemplos de comandos kubectl na seção de Comandos kubectl.
Testando primeiro container
Após instalar o docker e o minikube, você pode testar criando um container simples.
Este container executa um servidor web simples que responde com “Hello, World!” para qualquer requisição HTTP.
Estamos especificando a porta 8080, que é a porta padrão usada pelo servidor web no container.
Executando o pod
kubectl run hello-minikube --image=k8s.gcr.io/echoserver:1.10 --port=8080
Resultado esperado do comando:
pod/hello-minikube created
Expondo o pod com service
kubectl expose pod hello-minikube --type=NodePort --port=8080
Resultado esperado do comando:
service/hello-minikube exposed
Acessando o serviço
minikube service hello-minikube
Resultado esperado do comando:
|-----------|----------------|-------------|---------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|----------------|-------------|---------------------------|
| default | hello-minikube | 8080 | http://192.168.49.2:30175 |
|-----------|----------------|-------------|---------------------------|
* Abrindo serviço default/hello-minikube no navegador padrão...
O navegador será aberto e você verá a seguinte resposta:
Hostname: hello-minikube
Pod Information:
-no pod information available-
Server values:
server_version=nginx: 1.13.3 - lua: 10008
Request Information:
client_address=172.17.0.1
method=GET
real path=/
query=
request_version=1.1
request_scheme=http
request_uri=http://192.168.49.2:8080/
Request Headers:
accept=*/*
host=192.168.49.2:30175
user-agent=curl/7.68.0
Request Body:
-no body in request-
Comandos Imperativos vs. Arquivos de Configuração Declarativos
Existem duas maneiras de criar e gerenciar recursos no Kubernetes:
- Comandos Imperativos: Como os que usamos acima (
kubectl run,kubectl expose), onde dizemos ao Kubernetes o que fazer. - Arquivos de Configuração Declarativos: Onde descrevemos o estado desejado do sistema em um arquivo YAML, e o Kubernetes descobre como chegar lá.
Arquivos de configuração declarativos são a abordagem recomendada para gerenciar aplicações em produção, pois permitem:
- Controle de versão: Os arquivos YAML podem ser armazenados em um sistema de controle de versão como o Git.
- Repetibilidade: É fácil recriar o mesmo ambiente em diferentes clusters ou namespaces.
- Colaboração: As equipes podem revisar as alterações antes de serem aplicadas.
Exemplo de Deployment com YAML
Abaixo está um exemplo de um arquivo de configuração YAML para um Deployment que cria 3 réplicas de um servidor Nginx e um Service para expor o Deployment.
nginx-deployment.yaml
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
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
type: NodePort
Neste arquivo, temos dois objetos, separados por ---:
- Deployment: O objeto
Deploymentgerencia a criação e a escalabilidade dosPods. No exemplo, ele garante que 3 réplicas do containernginxestejam sempre em execução. - Service: O objeto
Serviceexpõe osPodsdoDeploymentcomo um serviço de rede. No exemplo, ele cria um serviço do tipoNodePortque expõe a porta 80 dosPodsem uma porta no nó do cluster.
Para aplicar este arquivo de configuração, use o comando kubectl apply:
kubectl apply -f nginx-deployment.yaml
Para verificar o status do deployment, use o comando kubectl get deployments:
kubectl get deployments
E para ver os pods criados pelo deployment, use o comando kubectl get pods:
kubectl get pods
Para acessar o serviço, você pode usar o comando minikube service:
minikube service nginx-service