Kubernetes pra iniciantes: conceitos essenciais sem complicação

Kubernetes pra iniciantes: conceitos essenciais sem complicação

A adoção do Kubernetes tem crescido exponencialmente nos últimos anos, e não é para menos. Ao lidar com aplicações que precisam ser escaláveis e gerenciáveis de forma eficiente, o Kubernetes se destaca como uma solução poderosa. No entanto, para quem está começando, o ambiente pode parecer complexo e intimidador. Este artigo visa desmistificar os conceitos básicos do Kubernetes, tornando-os acessíveis e compreensíveis.

Pods e Deployments

No coração do Kubernetes, temos os pods, que são as menores unidades de implantação. Um pod pode conter um ou mais containers que compartilham o mesmo espaço de rede e armazenamento. Vamos considerar um exemplo simples de um pod que executa uma aplicação Node.js.

apiVersion: v1
kind: Pod
metadata:
  name: meu-app
spec:
  containers:
    - name: meu-container
      image: node:14
      ports:
        - containerPort: 3000

No exemplo acima, criamos um pod chamado meu-app que roda um container com a imagem do Node.js. Agora, para gerenciar a criação e a atualização de pods, utilizamos os deployments. Um deployment garante que o número desejado de pods esteja sempre em execução.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: meu-app-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: meu-app
  template:
    metadata:
      labels:
        app: meu-app
    spec:
      containers:
        - name: meu-container
          image: node:14
          ports:
            - containerPort: 3000

Aqui, definimos um deployment que cria três réplicas do nosso pod meu-app. Caso um dos pods falhe, o Kubernetes o reiniciará automaticamente, garantindo alta disponibilidade.

Services

Com os pods em funcionamento, precisamos de uma maneira de acessá-los. É aí que entram os services. Um service é uma abstração que define uma forma de acessar um ou mais pods.

apiVersion: v1
kind: Service
metadata:
  name: meu-app-service
spec:
  type: NodePort
  selector:
    app: meu-app
  ports:
    - port: 3000
      targetPort: 3000
      nodePort: 30001

Neste exemplo, criamos um service chamado meu-app-service, que expõe nosso pod na porta 30001. Assim, podemos acessar nossa aplicação através do endereço http://<endereço-do-nó>:30001.

Ingress

Para uma gestão mais avançada do tráfego, utilizamos o ingress. Um ingress permite o controle sobre o acesso aos serviços, geralmente através de um balanceador de carga. Ele é especialmente útil quando precisamos gerenciar múltiplos serviços sob um único domínio.

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: meu-app-ingress
spec:
  rules:
    - host: meu-app.exemplo.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: meu-app-service
                port:
                  number: 3000

Com essa configuração, podemos acessar nosso serviço meu-app-service através do domínio meu-app.exemplo.com.

ConfigMaps e Secrets

Em aplicações reais, frequentemente temos configurações que precisam ser mantidas separadas do código. Para isso, utilizamos ConfigMaps e Secrets. Um ConfigMap é usado para armazenar dados de configuração não sensíveis, enquanto um Secret é destinado a informações sensíveis, como senhas.

Exemplo de um ConfigMap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: meu-app-config
data:
  DATABASE_URL: "mongodb://localhost:27017/meuapp"

E um exemplo de Secret:

apiVersion: v1
kind: Secret
metadata:
  name: meu-app-secret
type: Opaque
data:
  PASSWORD: bXlwYXNzd29yZA==

No exemplo do Secret, o valor bXlwYXNzd29yZA== é a string "mypassword" codificada em base64.

Scaling

Uma das grandes vantagens do Kubernetes é a capacidade de escalar aplicações. Podemos aumentar ou diminuir o número de réplicas de um pod com um simples comando. Para escalar nosso deployment, utilizamos:

kubectl scale deployment meu-app-deployment --replicas=5

Esse comando mudará o número de réplicas do deployment para cinco, permitindo que a aplicação suporte mais usuários ou cargas de trabalho.

Minikube pra dev

Para quem está começando e quer experimentar o Kubernetes localmente, Minikube é uma excelente ferramenta. Ele permite que você crie um cluster Kubernetes em sua máquina local, facilitando o desenvolvimento e testes.

Para instalar o Minikube, você pode seguir os passos da documentação oficial. Após a instalação, basta iniciar o cluster com:

minikube start

Depois, você pode aplicar suas configurações YAML diretamente no seu cluster local.

Conclusão

Aqui, exploramos os conceitos essenciais do Kubernetes de forma acessível. Ao entender como funcionam os pods, deployments, services, ingress, ConfigMaps, secrets e a capacidade de escalar aplicações, você estará mais preparado para enfrentar os desafios de gerenciar aplicações em contêineres.

Takeaways práticos:

  • Pods são a menor unidade de execução no Kubernetes, podendo conter um ou mais containers.
  • Deployments gerenciam a criação e manutenção de pods, garantindo alta disponibilidade.
  • Services expõem pods para acesso externo, facilitando a comunicação.
  • Ingress permite o gerenciamento avançado de tráfego e roteamento.
  • ConfigMaps e Secrets ajudam a gerenciar configurações e informações sensíveis.
  • O Minikube é uma ferramenta ideal para desenvolvedores que desejam experimentar Kubernetes localmente.

Glossário do post

node
Node.js: runtime JavaScript fora do navegador, baseado no motor V8, usado principalmente para construir servidores e ferramentas de linha de comando.
service
Unidade de software com responsabilidade bem definida, exposta por uma interface e reutilizável por outras partes do sistema.
http
Hypertext Transfer Protocol: o protocolo de comunicação usado entre navegadores e servidores web.
Ismael Douglas

Sobre o autor

Ismael Douglas

Desenvolvedor Full Stack apaixonado por construir produtos web rápidos e bem projetados. Escrevo sobre o que aprendo no caminho — código, infra e boas práticas.

Veja meus projetos no portfólio →