Início
Health Checks do container usando Probes
Health Checks de aplicações de alto nível
Início
Em sistemas de softwares, componentes podem se tornar instáveis devido a problemas transitórios (como perda de conexão temporária), erros de configuração, ou problemas com dependências externas. As aplicações no OpenShift tem um número de opções para detectar e tratar containers instáveis.
Health Checks do container usando Probes
Um probe é uma ação do Kubernetes que faz diagnósticos periodicamente em um container em execução. Atualmente, existem dois tipos de probes, cada um com um proposito diferente.
Liveness Probe |
Um liveness probe checa se o container que esta configurado continua em execução. Se o liveness probe falhar, o kubelet vai matar o container, que vai ser submetido a sua política de reinício. O check liveness é setado ao configurar template.spec.containers.livenessprobe na configuração do POD. |
Readiness Probe | Um readiness probe checa se um container esta pronto para receber requisições de serviços. Se o readiness probe falhar, o controlador de endpoint garante que o endereço IP foi removido de todos os endpoints de serviços. Um readiness probe pode ser usado para mandar um sinal ao controlador de endpoint, que mesmo que o container esteja em execução, ele não deve receber qualquer tráfego a partir de um proxy. O check readiness pode ser setado ao configurar template.spec.containers.readinessprobe na configuração do POD. |
O tempo exato de um probe é controlado por dois campos, ambos são expressos em segundos:
Campo | Descrição |
initialDelaySeconds | Quanto tempo vai esperar depois do container iniciar para iniciar o probe. |
timeoutSeconds | Quanto tempo vai esperar o probe finalizar (default: 1). Se este tempo for excedido, o OpenShift vai considerar que o probe falhou. |
Ambos os probes pode ser configurados de três formas:
HTTP Checks
O kubelet usa um web hook para determinar a saúde do container. O check é considerado bem sucedido se o hook retorna com código 200 ou 399. O exemplo a seguir mostra uma verificação de disponibilidade usando o método de Checks HTTP:
Exemplo 1. Readiness HTTP check
...
readinessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 15
timeoutSeconds: 1
...
Um check HTTP é ideal para aplicações complexas que podem retornar status 200 quando completamente inicializadas.
Execução de checks em Container
O kubelet executa um comando dentro do container. Se o status final do check for 0, então é considerado como sucesso. A seguir um exemplo de um liveness check usando o método de execução de container.
Exemplo 2. Execução de check liveness em container
...
livenessProbe:
exec:
command:
- cat
- /tmp/health
initialDelaySeconds: 15
timeoutSeconds: 1
...
TCP Socket Checks
O kubelet tenta abrir um socket para o container. O container é considerado saudável se o check conseguir estabelecer uma conexão. A seguir um exemplo de um liveness check usando o método TCP socket check.
Exemplo 3. Liveness TCP Socket Check
... livenessProbe: tcpSocket: port: 8080 initialDelaySeconds: 15 timeoutSeconds: 1 ...
Um TCP socket check é ideal para aplicações que não são iniciadas ouvindo até que a inicialização se complete.
Para mais informações sobre health checks, veja a documentação do Kubernetes.
Health Checks de aplicações de alto nível
Noções de health check de aplicações através de múltiplos componentes não podem ser tratadas com check liveness de containers. Ter componentes do sistema saudável e responsivo em uma aplicação distribuída mas em um sistema com comportamento instável é possível. Os administradores de sistemas distribuídos podem usar health checks para testar o comportamento geral de um sistema.
Um exemplo é um script que executa uma operação de teste, testando os componentes do sistema em conjunto e verificando se o comportamento do sistema é o mesmo esperado do comportamento do health check.
Usuários do OpenShift podem especificar health checks de alto nível e controlar o método do health check ao especificar um script para executar e a ação a ser tomada quando o check receber um resultado negativo, criando um evento.
Comentários
0 comentário
Por favor, entre para comentar.