No começo deste capítulo, nós discutimos labels e labels selectors de todos os ângulos(command line e manifesto yaml). Fizemos isto por uma boa razão, pois o Deployment é uma das primitivas do Kubernetes que utiliza os labels como conceito fundamental e vamos entende-lo.

Executar uma aplicação em um Pod é algo poderoso, mas a escalabilidade e confiabilidade podem se tornar um problema rapidamente. Supondo que o workload da sua aplicação aumente durante picos de uso ou devido ao aumento na quantidade de usuários e você continue com apenas uma instância do Pod para servir as funcionalidades da aplicação para seus clientes. Com o aumento do tráfego ocorre um maior consumo de recursos e dependendo dos requisitos do container a aplicação pode ser “estrangulada” e até ser terminada.

É aí que entra o Deployment. Em um Deployment, você pode especificar o numero de Pods que executam sua aplicação com as mesmas configurações. Precisa escalar? simplesmente aumente o número de replicas e o Kubernetes tomara providencias para criar novos Pods. Além disso, o Deployment garante que os Pods com falha serão reiniciados para que o estado real corresponda ao estado desejado. Por baixo dos panos o Deployment utiliza a primitiva ReplicaSet. O único propósito do ReplicaSet é garantir uma quantidade de réplicas de um Pod com a mesma configuração. É importante entender que o Deployment é um conceito de alto nível que gerencia um ReplicaSet internamente sem o envolvimento do usuário final.

Figure 6-4. Replication of Pods with a Deployment

Figure 6-4. Replication of Pods with a Deployment

Documentação Kubernetes

Deployment

Referência de campos para o Deployment.