Kubernetes: Configurando probes de Liveness (disponibilidade) e Readiness (prontidão) para Containers
Para que o Kubernetes saiba com esta a saude dos Containers podemos criar 2 tipos de probes:
- Liveness Probes
- Este probe pode detectar um deadlock, quando uma aplicação está em execução, ou se está falhando.
- Readiness Probes
- Este probe sabe quando um Container está pronto para começar a receber tráfego.
Exemplos do site do Kubernetes Configure liveness e readiness probes.
Vale a pena conferir o probe Define a liveness HTTP request e Define a TCP liveness probe.
Probes
Exemplo Liveness Probes
apiVersion: v1 kind: Pod metadata: labels: test: liveness name: liveness-exec spec: containers: - name: liveness image: k8s.gcr.io/busybox args: - /bin/sh - -c - touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600 livenessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5
Ao iniciar o container o arquivo /tmp/healthy é criado, após 30 segundos o mesmo é apagado. Assim o container é destruído e um novo é criado. Reiniciando o ciclo.
Para testar vamos criar o Pod com o comando
kubectl create -f https://k8s.io/examples/pods/probe/exec-liveness.yaml
Após 30 segundo você confere o resultado com o comando:
kubectl describe pod liveness-exec Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 49s default-scheduler Successfully assigned default/liveness-exec to minikube Normal Pulling 48s kubelet, minikube pulling image "k8s.gcr.io/busybox" Normal Pulled 41s kubelet, minikube Successfully pulled image "k8s.gcr.io/busybox" Normal Created 40s kubelet, minikube Created container Normal Started 40s kubelet, minikube Started container Warning Unhealthy 4s (x2 over 9s) kubelet, minikube Liveness probe failed: cat: can't open '/tmp/healthy': No such file or directory
Remova o pod com o comando
kubectl delete pod liveness-exec
Exemplo Readiness Probes
Configuramos o probe Readines da mesma maneira que o Liveness.
readinessProbe: exec: command: - cat - /tmp/healthy initialDelaySeconds: 5 periodSeconds: 5