O processo para escalar uma aplicação é completamente abstraído do usuário final. Você precisa apenas dizer para o Deployment que deseja escalar para um determinado número de réplicas. O Kubernetes cuidará do resto. Na imagem abaixo escalamos a aplicação de 1 para 5 réplicas.
Figure 6-6. Scaling a Deployment
Existem opções: utilizar o comando scale
ou alterar o valor do atributo replicas no live object. Os comandos a seguir demonstram o efeito de escalar um Deployment com o comando scale
.
# Exibindo os recursos antes de aplicar o scaling
$ kubectl get deployments,replicasets,pods
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-deploy 1/1 1 1 21m
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-deploy-79fbb965cd 1 1 1 21m
NAME READY STATUS RESTARTS AGE
pod/my-deploy-79fbb965cd-7kd72 1/1 Running 0 11m
# Realizando scaling para 5 replicas via comando scale
$ kubectl scale deployment my-deploy --replicas=5
deployment.apps/my-deploy scaled
# Exibindo os recursos depois de aplicar o scaling
$ kubectl get deployments,replicasets,pods
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-deploy 5/5 5 5 23m
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-deploy-79fbb965cd 5 5 5 23m
NAME READY STATUS RESTARTS AGE
pod/my-deploy-79fbb965cd-4nj4d 1/1 Running 0 15s
pod/my-deploy-79fbb965cd-7kd72 1/1 Running 0 13m
pod/my-deploy-79fbb965cd-ghnqk 1/1 Running 0 15s
pod/my-deploy-79fbb965cd-rdlw9 1/1 Running 0 15s
pod/my-deploy-79fbb965cd-vkpsz 1/1 Running 0 15s
# Exibindo eventos de scaling no Deployment
$ kubectl describe deployments.apps my-deploy
(...)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 99s deployment-controller Scaled up replica set my-deploy-79fbb965cd to 5
Editando a quantidade de replicas em um live object.
# Cenário Inicial, apenas uma replica
$ kubectl get deployments,replicasets,pods
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-deploy 1/1 1 1 17m
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-deploy-58ddd7b585 1 1 1 11m
NAME READY STATUS RESTARTS AGE
pod/my-deploy-58ddd7b585-28skw 1/1 Running 0 11m
$ kubectl edit deployments.apps my-deploy
# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this
# reopened with the relevant failures.
#
apiVersion: apps/v1
kind: Deployment
metadata:
generation: 3
labels:
app: my-deploy
section: 06-pod-design
name: my-deploy
namespace: develop
spec:
progressDeadlineSeconds: 600
**replicas: 1 ## Alterar a quantidade de replicas para 5 e salvar ##**
revisionHistoryLimit: 10
**deployment.apps/my-deploy edited**
# Resultado logo após salvar a alteração no LiveObject
$ kubectl get deployments,replicasets,pods
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-deploy 3/5 5 3 18m
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-deploy-58ddd7b585 5 5 3 12m
NAME READY STATUS RESTARTS AGE
pod/my-deploy-58ddd7b585-28skw 1/1 Running 0 12m
pod/my-deploy-58ddd7b585-584zx 0/1 ContainerCreating 0 3s
pod/my-deploy-58ddd7b585-8w782 0/1 ContainerCreating 0 3s
pod/my-deploy-58ddd7b585-gx4d9 1/1 Running 0 3s
pod/my-deploy-58ddd7b585-nqvj4 1/1 Running 0 3s
# Resultado final
$ kubectl get deployments,replicasets,pods
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/my-deploy 5/5 5 5 21m
NAME DESIRED CURRENT READY AGE
replicaset.apps/my-deploy-58ddd7b585 5 5 5 16m
NAME READY STATUS RESTARTS AGE
pod/my-deploy-58ddd7b585-28skw 1/1 Running 0 16m
pod/my-deploy-58ddd7b585-584zx 1/1 Running 0 3m25s
pod/my-deploy-58ddd7b585-8w782 1/1 Running 0 3m25s
pod/my-deploy-58ddd7b585-gx4d9 1/1 Running 0 3m25s
pod/my-deploy-58ddd7b585-nqvj4 1/1 Running 0 3m25s