batupaksoy
batupaksoy

Reputation: 31

Kubernetes readiness probe fails

I wrote a readiness_probe for my pod by using a bash script. Readiness probe failed with Reason: Unhealthy but when I manually get in to the pod and run this command /bin/bash -c health=$(curl -s -o /dev/null --write-out "%{http_code}" http://localhost:8080/api/v2/ping); if [[ $health -ne 401 ]]; then exit 1; fi bash script exits with code 0. What could be the reason? I am attaching the code and the error below.

Edit: Found out that the health variable is set to 000 which means timeout in for bash script.

readinessProbe:
  exec:
    command:
    - /bin/bash
    - '-c'
    - |-
      health=$(curl -s -o /dev/null --write-out "%{http_code}" http://localhost:8080/api/v2/ping);
      if [[ $health -ne 401 ]]; then exit 1; fi

"kubectl describe pod {pod_name}" result:

Name:         rustici-engine-54cbc97c88-5tg8s
Namespace:    default
Priority:     0
Node:         minikube/192.168.49.2
Start Time:   Tue, 12 Jul 2022 18:39:08 +0200
Labels:       app.kubernetes.io/name=rustici-engine
              pod-template-hash=54cbc97c88
Annotations:  <none>
Status:       Running
IP:           172.17.0.5
IPs:
  IP:           172.17.0.5
Controlled By:  ReplicaSet/rustici-engine-54cbc97c88
Containers:
  rustici-engine:
    Container ID:   docker://f7efffe6fc167e52f913ec117a4d78e62b326d8f5b24bfabc1916b5f20ed887c
    Image:          batupaksoy/rustici-engine:singletenant
    Image ID:       docker-pullable://batupaksoy/rustici-engine@sha256:d3cf985c400c0351f5b5b10c4d294d48fedfd2bb2ddc7c06a20c1a85d5d1ae11
    Port:           8080/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Tue, 12 Jul 2022 18:39:12 +0200
    Ready:          False
    Restart Count:  0
    Limits:
      memory:  350Mi
    Requests:
      memory:  350Mi
    Liveness:  exec [/bin/bash -c health=$(curl -s -o /dev/null --write-out "%{http_code}" http://localhost:8080/api/v2/ping);
if [[ $health -ne 401 ]]; then exit 1; else exit 0; echo $health; fi] delay=10s timeout=5s period=10s #success=1 #failure=20
    Readiness:  exec [/bin/bash -c health=$(curl -s -o /dev/null --write-out "%{http_code}" http://localhost:8080/api/v2/ping);
if [[ $health -ne 401 ]]; then exit 1; else exit 0; echo $health; fi] delay=10s timeout=5s period=10s #success=1 #failure=10
    Environment:  <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-whb8d (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  kube-api-access-whb8d:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   Burstable
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age   From               Message
  ----     ------     ----  ----               -------
  Normal   Scheduled  24s   default-scheduler  Successfully assigned default/rustici-engine-54cbc97c88-5tg8s to minikube
  Normal   Pulling    23s   kubelet            Pulling image "batupaksoy/rustici-engine:singletenant"
  Normal   Pulled     21s   kubelet            Successfully pulled image "batupaksoy/rustici-engine:singletenant" in 1.775919851s
  Normal   Created    21s   kubelet            Created container rustici-engine
  Normal   Started    20s   kubelet            Started container rustici-engine
  Warning  Unhealthy  4s    kubelet            Readiness probe failed:
  Warning  Unhealthy  4s    kubelet            Liveness probe failed:

Upvotes: 2

Views: 4740

Answers (1)

Leo
Leo

Reputation: 961

The probe could be failing because it is facing performance issues or slow startup. To troubleshoot this issue, you will need to check that the probe doesn’t start until the app is up and running in your pod. Perhaps you will need to increase the Timeout of the Readiness Probe, as well as the Timeout of the Liveness Probe, like in the following example:

readinessProbe:
          initialDelaySeconds: 10
          periodSeconds: 2
          timeoutSeconds: 10

You can find more details about how to configure the Readlines Probe and Liveness Probe in this link.

Upvotes: 2

Related Questions