1
resposta

[Bug] Aplicação não carrega com liveness

Prezados, bom dia,

Executando o curso de "Kubernetes: prática, Helm e Cloud", entrei na mesma situação da colega acima. Creio que a aplicação não tenha sido testada ou validada recentemente.

Segui as mitigações do tópico anterior (verificar pods, mysql) e a princípio, em nível de "conectividade" está de acordo com a sequência do curso. Estou na etapa 4, "Garantindo a Aplicação", segui o passo a passo, e até mesmo copiei os arquivos do instrutor, mas com o liveness nada funciona como desejado.

Utilizando o liveness probe tenho o erro disparado:

Liveness probe failed: Get "http://10.244.0.59:3000/paciente": dial tcp http://10.244.0.59:3000: connect: connection refused

E a criação dos pods fica em loop.

Ao tentar pegar um log de um pod, aumentando o tempo do liveness para não matá-lo, pego esta msg aqui:


npm notice 
npm notice New major version of npm available! 9.6.3 -> 10.4.0
npm notice Changelog: <https://github.com/npm/cli/releases/tag/v10.4.0>
npm notice Run `npm install -g npm@10.4.0` to update!
npm notice 
npm ERR! path /app
npm ERR! command failed
npm ERR! signal SIGTERM
npm ERR! command sh -c tsc-watch --onSuccess "node ./build/server.js"

npm ERR! A complete log of this run can be found in: /root/.npm/_logs/2024-02-01T14_10_16_112Z-debug-0.log

Não consegui copiar a tempo o log citado do debug.

E o interessante, ao desativar o Liveness, tudo funciona perfeitamente.

O que vocês recomendam?

Segue minha config da aplicação, idêntica ao do instrutor:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: vollmed
  labels:
    app: vollmed
spec:
  replicas: 3
  selector:
    matchLabels:
      app: vollmed
  template:
    metadata:
      labels:
        app: vollmed
    spec:
      containers:
      - name: vollmed-api
        image: leonardosartorello/vollmed:v8
        ports:
        - containerPort: 3000
        env:
        # Define the environment variable
        - name: DB_HOST # Notice that the case is different here
                                     # from the key name in the ConfigMap.
          valueFrom:
            configMapKeyRef:
              name: dados           # The ConfigMap this value comes from.
              key: DB_HOST # The key to fetch.
        - name: DB_DATABASE # Notice that the case is different here
                                     # from the key name in the ConfigMap.
          valueFrom:
            configMapKeyRef:
              name: dados           # The ConfigMap this value comes from.
              key: DB_DATABASE # The key to fetch.
        - name: DB_PASSWORD # Notice that the case is different here
                                     # from the key name in the ConfigMap.
          valueFrom:
            secretKeyRef:
              name: senhas           # The ConfigMap this value comes from.
              key: DB_PASSWORD # The key to fetch.
        # livenessProbe:
        #   httpGet:
        #     path: /paciente
        #     port: 3000
        #   initialDelaySeconds: 10
        #   periodSeconds: 3

No aguardo, obrigado!

1 resposta

Oii, Diego! Tudo bem?

Bom, no seu caso, se o liveness está tentando acessar o endereço http://10.244.0.59:3000/paciente, mas recebeu a resposta de connection refused, pode ser porque o seu aplicativo não está pronto para aceitar conexões quando o liveness probe é executado.

A mensagem de erro que você recebeu do npm diz que o comando tsc-watch --onSuccess "node ./build/server.js" está falhando e isso pode estar acontecendo porque o aplicativo demora mais para iniciar do que o liveness probe espera. Se o liveness é executado e já "fecha", o aplicativo não consegue conectar dentro do timing.

Uma coisa que pode te ajudar é aumentar o valor do initialDelaySeconds no liveness. Assim você tem mais tempo para iniciar antes que o liveness probe seja executado. Você pode tentar para 30 ou 60 segundos.

É só ir no YAML e alterar na partezinha em baixo:

livenessProbe:
  httpGet:
    path: /paciente
    port: 3000
  initialDelaySeconds: 60
  periodSeconds: 3

Se a dúvida persistir, estamos aqui. :)

Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.