Entendendo o Deployment no Kubernetes: Conceitos fundamentais

Por Gaspar Barancelli Junior em 04 de abril de 2024

O Kubernetes é uma plataforma de orquestração de contêineres que permite aos desenvolvedores gerenciar e automatizar o deployment de seus aplicativos. Para entender o que é um deployment no Kubernetes, é importante compreender alguns conceitos fundamentais dessa plataforma.

Em resumo, um deployment é uma maneira de definir o estado desejado de um pod (conjunto de contêineres) em execução em um cluster Kubernetes. O deployment gerencia a implantação e a atualização de um pod, garantindo que o estado desejado seja alcançado e mantido.

O deployment no Kubernetes é responsável por criar e gerenciar um replicaset que, por sua vez, é responsável por garantir que o número desejado de pods esteja em execução em um determinado momento. Ou seja, o deployment é uma abstração de alto nível que gerencia a implantação e atualização de aplicativos, enquanto o replicaset é uma abstração de nível inferior que garante que o número correto de pods esteja em execução.

Para criar um deployment no Kubernetes, você precisa definir um arquivo YAML que descreva o estado desejado do seu aplicativo. Neste arquivo YAML, você especifica o nome do seu deployment, o número de réplicas que deseja implantar e o contêiner que deseja executar. Além disso, você pode especificar informações sobre volumes, portas e outros detalhes do seu aplicativo.

Quando um deployment é aplicado, o Kubernetes cria um replicaset correspondente com as especificações fornecidas pelo arquivo YAML do deployment. O replicaset, então, inicia o número desejado de pods para atender à especificação do deployment. Cada pod criado pelo replicaset é uma instância do contêiner especificado no arquivo YAML do deployment.

O deployment monitora continuamente o estado dos pods por meio do replicaset e executa ações para garantir que o estado desejado seja mantido. Se algum pod falhar, o deployment iniciará um novo pod em seu lugar para manter o número desejado de réplicas. Se uma atualização for solicitada no deployment, o deployment criará uma nova versão do replicaset e dos pods correspondentes e, em seguida, atualizará os pods antigos para a nova versão por meio de uma atualização rolling.

Ao usar o Kubernetes, é importante entender que o deployment é a principal forma de gerenciar e atualizar aplicativos sem estado em um cluster. O replicaset e os pods são criados automaticamente com base nas especificações fornecidas pelo arquivo YAML do deployment, permitindo que os desenvolvedores se concentrem na definição do estado desejado do aplicativo, em vez de se preocupar com a criação e gerenciamento manual de pods e replicaset.

Exemplo

Aqui está um exemplo de YAML de um deployment simples para um pod contendo o contêiner do Nginx:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80

Nesse exemplo, estamos criando um deployment chamado nginx-deployment com 3 réplicas do contêiner Nginx. O seletor matchLabels é usado para vincular o deployment aos pods correspondentes. Na seção template, especificamos os detalhes do pod que o deployment deve criar, incluindo o nome e a imagem do contêiner, bem como as portas que o contêiner deve expor.

Para aplicar o deployment, você pode usar o comando kubectl apply e passar o arquivo YAML que você criou. Isso instrui o Kubernetes a criar os recursos necessários para atingir o estado desejado.

kubectl apply -f nginx-deployment.yaml

Se você precisar atualizar o seu deployment, pode simplesmente editar o arquivo YAML e aplicar as mudanças novamente com o comando kubectl apply. O Kubernetes cuidará da atualização, garantindo que o estado desejado seja alcançado novamente.

Uma vez que o deployment esteja em execução, você pode verificar seu status usando o comando kubectl get deployments. Isso mostrará o número de réplicas em execução, o status atual e outras informações relevantes.

kubectl get deployments

Utilizando o comando kubectl get rs você visualiza as informações referentes ao replicaSet criado pelo deployment.

kubectl get rs

Além disso, você pode usar o comando kubectl get pods para visualizar os pods em execução. Isso permitirá que você verifique se o número correto de pods está em execução e se eles estão funcionando corretamente.

kubectl get pods

Conclusão

Ao usar o Kubernetes, é importante entender que o deployment é uma ferramenta poderosa para gerenciar aplicativos sem estado, permitindo que você defina o estado desejado do seu aplicativo e deixe o Kubernetes cuidar da criação e gerenciamento dos recursos necessários para atingir esse estado. Com o deployment, você pode atualizar e escalar seu aplicativo com facilidade e confiança, garantindo que ele esteja sempre em execução e disponível para seus usuários.

// Compartilhe esse Post