Middle+
Por que fatores é alcançada a conclusão de pods a uma velocidade determinada e de acordo com os gerenciamentos de tempo estabelecidos?
sobes.tech IA
Resposta da IA
A finalização dos pods no Kubernetes é regulada pelos seguintes fatores:
- terminationGracePeriodSeconds: Define o tempo que é dado às aplicações num pod para terminar corretamente (processar pedidos atuais, fechar conexões, etc.) após receber o sinal
SIGTERM. Se a aplicação não terminar nesse tempo, é enviado umSIGKILL.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: app
image: my-image
terminationGracePeriodSeconds: 30 # Valor padrão - 30 segundos
- PreStop Hook: Permite realizar ações específicas antes de enviar
SIGTERM. Por exemplo, parar de aceitar novas conexões.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: app
image: my-image
lifecycle:
preStop:
exec:
command: ["/bin/sh", "-c", "nginx -s quit"] # Exemplo: encerramento correto do Nginx
- Testes de readiness e liveness: Determinam o estado de prontidão e "vida" do pod. Se os pods deixam de estar "vivos" (livenessProbe falha) ou "prontos" (readinessProbe falha e o controlador vê que o pod já não é necessário), podem ser terminados.
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: app
image: my-image
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 3
livenessProbe:
httpGet:
path: /live
port: 8080
initialDelaySeconds: 15
periodSeconds: 5
- Estado Desejado: Os controladores do Kubernetes (por exemplo, Deployment, ReplicaSet) tentam manter o número desejado de réplicas. Quando há uma alteração no Estado Desejado (redução do número de réplicas) ou durante uma atualização, os pods que já não são necessários começam a terminar. A velocidade deste processo depende da estratégia de atualização (por exemplo,
RollingUpdate) e dos parâmetrosmaxUnavailable.
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1 # Define quantos pods podem estar indisponíveis durante a atualização
maxSurge: 1
-
Drenagem do Nó: Quando um nó é colocado em modo de manutenção (
kubectl drain), o Kubernetes termina os pods nesse nó. A velocidade também depende determinationGracePeriodSecondse da configuração—ignore-daemonsets. -
Aplicação que responde a SIGTERM: A própria aplicação dentro do pod deve lidar corretamente com o sinal
SIGTERMe ter tempo para terminar seu trabalho dentro doterminationGracePeriodSeconds.
| Fator | Impacto na finalização |
|---|---|
terminationGracePeriodSeconds |
Tempo para uma finalização correta após SIGTERM |
preStop Hook |
Ações antes de SIGTERM |
| Testes de readiness/liveness | Disparadores para iniciar o processo de finalização |
| Estado Desejado / Estratégia | Quantidade e velocidade de finalização ao alterar réplicas/atualizações |
| Drenagem do Nó | Finalização de todos os pods no nó para manutenção |
Tratamento de SIGTERM na aplicação |
Capacidade da aplicação de terminar por si própria |