O Knative usa sondagens mais frequentes e ativas que o Kubernetes padrão para reduzir o tempo de inicialização a frio dos pods e acelerar a transição do estado de inicialização para execução. Adicione liveness probes e readiness probes a um Knative Service para manter sua aplicação íntegra e pronta para receber tráfego.
Como funciona
As liveness probes monitoram a integridade do contêiner. Se um contêiner entrar no estado Failed ou se o serviço falhar ao iniciar, a liveness probe reinicia o contêiner.
As readiness probes gerenciam o dimensionamento automático ao garantir que apenas pods no estado Ready recebam tráfego, melhorando a estabilidade do serviço e a velocidade de resposta.
As sondagens no Knative seguem uma sequência de quatro etapas:
Defina readiness probes ou liveness probes em um CustomResource (CR) do Knative Service.
O kubelet envia liveness probes para os contêineres especificados.
O Knative reescreve as readiness probes e as envia para o contêiner queue-proxy. A sondagem parte do componente Activator ou do próprio contêiner queue-proxy para verificar se todo o link de rede está configurado e pronto.
O Knative define readiness probes para o contêiner queue-proxy. O queue-proxy agrega os resultados das readiness probes de todos os contêineres (o principal e quaisquer sidecars). Quando o queue-proxy retorna respostas bem-sucedidas e a camada de rede do Knative está configurada, o Knative considera os pods íntegros e prontos para aceitar tráfego.
Se nenhuma sonda for definida, o Knative cria readiness probes padrão para o contêiner principal. Essas sondagens verificam os sockets TCP nas portas dos Knative Services.
Pré-requisitos
Antes de começar, verifique se você tem:
Knative implantado em seu cluster. Para mais informações, consulte Implantar o Knative.
Configure sondas
Adicione o campo readinessProbe ou livenessProbe a um Knative Service. A configuração segue o mesmo formato das sondas padrão do Kubernetes. Para a referência completa de parâmetros, consulte Configurar liveness, readiness e startup probes.
O exemplo a seguir configura dois contêineres, cada um com uma readiness probe HTTP GET e uma liveness probe de socket TCP:
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
name: runtime
namespace: default
spec:
template:
spec:
containers:
- name: first-container
image: <YOUR-IMAGE> # Replace with the actual image name.
ports:
- containerPort: 8080
readinessProbe: # Checks when the container is ready to receive traffic.
httpGet:
port: 8080 # Can differ from containerPort.
path: "/health"
livenessProbe: # Checks whether the container is alive.
tcpSocket:
port: 8080
- name: second-container
image: <YOUR-IMAGE> # Replace with the actual image name.
readinessProbe:
httpGet:
port: 8089
path: "/health"
livenessProbe:
tcpSocket:
port: 8089
Tipos de sonda compatíveis
|
Tipo de sonda |
Descrição |
|
|
Envia uma requisição HTTP GET e verifica o código de status retornado. |
|
|
Tenta abrir uma conexão TCP na porta especificada. |
|
|
Executa um comando no contêiner e verifica o código de saída. |
|
|
Chama um método definido pelo gRPC Health Checking Protocol. |
Limitações
Não há suporte para sondas PreStop personalizadas. O Knative fornece um hook PreStop integrado para lidar com o encerramento graceful.