Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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 Deployment gerencia a criação e a escalabilidade dos Pods. No exemplo, ele garante que 3 réplicas do container nginx estejam sempre em execução.
  • Service: O objeto Service expõe os Pods do Deployment como um serviço de rede. No exemplo, ele cria um serviço do tipo NodePort que expõe a porta 80 dos Pods em 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