Sobes.tech
Middle

Por que usamos deployment para gerenciar os ReplicaSets em vez de gerenciá-los diretamente?

sobes.tech IA

Resposta da IA

Deployment fornece uma abordagem declarativa para gerir ReplicaSet e Pods. Permite descrever o estado desejado da aplicação (quantas réplicas, qual a imagem do contêiner, etc.), e o controlador Deployment trabalha continuamente para alcançar esse estado.

As principais vantagens de usar Deployment:

  • Gestão de atualizações e retrocessos: Deployment suporta estratégias de atualização (por exemplo, RollingUpdate) e permite regressar facilmente a versões anteriores em caso de problemas.
  • RollingUpdate automático: Ao alterar a imagem do contêiner, Deployment cria automaticamente novos Pods com a nova versão, removendo gradualmente os Pods com a versão antiga, garantindo tempo de inatividade zero.
  • Gestão de ReplicaSets: Deployment cria e gere ReplicaSets, que por sua vez mantêm o número desejado de réplicas de Pods.
  • Histórico de revisões: Deployment rastreia o histórico de alterações, permitindo retroceder a versões anteriores.
  • Facilidade de gestão: Em vez de interagir diretamente com ReplicaSets e Pods, trabalhamos com um objeto Deployment que abstrai os detalhes de baixo nível.

Gerir diretamente um ReplicaSet ou Pods complica significativamente as tarefas de atualização, escalonamento e retrocesso, exigindo operações manuais ou scripts de automação mais complexos. Deployment oferece um mecanismo pronto e estável para resolver essas tarefas.

Exemplo de manifesto Deployment:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  labels:
    app: nginx
spec:
  replicas: 3 # Número desejado de réplicas
  selector:
    matchLabels:
      app: nginx
  strategy:
    type: RollingUpdate # Estratégia de atualização
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.14.2 # Imagem do contêiner
        ports:
        - containerPort: 80

Este manifesto descreve um Deployment que deve manter 3 réplicas de Pods com a imagem nginx:1.14.2. Deployment irá gerir a criação e escalonamento do ReplicaSet para garantir esse estado.