Liveness, Readiness and Startup Probes
Startup Probe
o startup probe verifica se o aplicativo dentro do pod terminou a inicialização. Isso é útil para aplicativos que têm um tempo de inicialização mais longo e podem precisar de um tempo adicional para ficarem prontos para receber tráfego.
O Kubelet usa o startup probe para saber quando um aplicativo contêiner foi iniciado. Se startup probe estiver configurada, os readiness probe e liveness probe e não serão iniciadas até o startup probe seja atendido garantindo que essas sondagens não interfiram na inicialização do aplicativo. Isso pode ser usado para adotar verificações de atividade em contêineres de inicialização lenta, evitando que sejam mortos pelo Kubelet antes de estarem em funcionamento.
Readiness Probe
A readiness probe é usada para indicar quando um pod está pronto para servir o tráfego. Ela é usada para garantir que o pod está pronto para receber conexões e tráfego de rede. Um load balancer somente deve enviar o tráfego para um pod que estiver pronto para processar, ou seja, já inicializou completamente.
Um padrão comum para sondagens de atividade é usar um endpoint HTTP de baixo custo (healthcheck), mas com um failThreshold mais alto. Isso garante que o pod seja observado como não pronto por algum período de tempo antes de ser eliminado forçadamente.
O Kubelet usa testes de readiness probe para saber quando um contêiner está pronto para começar a aceitar tráfego. Um pod é considerado pronto quando todos os seus contêineres estão prontos. Um uso desse sinal é controlar quais pods são usados como back-ends para serviços. Quando um pod não está pronto, ele é removido dos balanceadores de carga de serviço.
Liveness Probe
Já a liveness probe é responsável por verificar se o pod está vivo e saudável. Se a liveness probe falhar, o Kubernetes reinicia o pod para restaurar o estado saudável.
O Kubelet usa o liveness probe para saber quando reiniciar um contêiner. Por exemplo, os liveness probe podem detectar um impasse, onde um aplicativo está em execução, mas não consegue progredir. Reiniciar um contêiner nesse estado pode ajudar a tornar o aplicativo mais disponível, apesar dos bugs.
Resumindo, a readiness probe verifica se o pod está pronto para aceitar tráfego, enquanto a liveness probe verifica se o pod está vivo e funcional, mas somente são usados depois do startup probe.
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
labels:
test: liveness
name: liveness-exec
spec:
containers:
- name: liveness
image: registry.k8s.io/busybox
args:
- /bin/sh
- -c
- touch /tmp/healthy; sleep 30; rm -f /tmp/healthy; sleep 600
livenessProbe:
exec:
command:
- cat
- /tmp/healthy
initialDelaySeconds: 5
periodSeconds: 5
failureThreshold: 1 # Numero de tentativas antes de matar o pod. O default é 3.
EOF
````bash