Skip to content

Latest commit

 

History

History
136 lines (126 loc) · 5.96 KB

application-health-configuring.adoc

File metadata and controls

136 lines (126 loc) · 5.96 KB

Configuring health checks using the CLI

To configure readiness, liveness, and startup probes, add one or more probes to the specification for the pod that contains the container which you want to perform the health checks

Note

If you want to add or edit health checks in an existing pod, you must edit the pod DeploymentConfig object or use the Developer perspective in the web console. You cannot use the CLI to add or edit health checks for an existing pod.

Procedure

To add probes for a container:

  1. Create a Pod object to add one or more probes:

    apiVersion: v1
    kind: Pod
    metadata:
      labels:
        test: health-check
      name: my-application
    spec:
      containers:
      - name: my-container (1)
        args:
        image: registry.k8s.io/goproxy:0.1 (2)
        livenessProbe: (3)
          tcpSocket:  (4)
            port: 8080 (5)
          initialDelaySeconds: 15 (6)
          periodSeconds: 20 (7)
          timeoutSeconds: 10 (8)
        readinessProbe: (9)
          httpGet: (10)
            host: my-host (11)
            scheme: HTTPS (12)
            path: /healthz
            port: 8080 (13)
        startupProbe: (14)
          exec: (15)
            command: (16)
            - cat
            - /tmp/healthy
          failureThreshold: 30 (17)
          periodSeconds: 20 (18)
          timeoutSeconds: 10 (19)
    1. Specify the container name.

    2. Specify the container image to deploy.

    3. Optional: Create a Liveness probe.

    4. Specify a test to perform, here a TCP Socket test.

    5. Specify the port on which the container is listening.

    6. Specify the time, in seconds, after the container starts before the probe can be scheduled.

    7. Specify the number of seconds to perform the probe. The default is 10. This value must be greater than timeoutSeconds.

    8. Specify the number of seconds of inactivity after which the probe is assumed to have failed. The default is 1. This value must be lower than periodSeconds.

    9. Optional: Create a Readiness probe.

    10. Specify the type of test to perform, here an HTTP test.

    11. Specify a host IP address. When host is not defined, the PodIP is used.

    12. Specify HTTP or HTTPS. When scheme is not defined, the HTTP scheme is used.

    13. Specify the port on which the container is listening.

    14. Optional: Create a Startup probe.

    15. Specify the type of test to perform, here an Container Execution probe.

    16. Specify the commands to execute on the container.

    17. Specify the number of times to try the probe after a failure.

    18. Specify the number of seconds to perform the probe. The default is 10. This value must be greater than timeoutSeconds.

    19. Specify the number of seconds of inactivity after which the probe is assumed to have failed. The default is 1. This value must be lower than periodSeconds.

      Note

      If the initialDelaySeconds value is lower than the periodSeconds value, the first Readiness probe occurs at some point between the two periods due to an issue with timers.

      The timeoutSeconds value must be lower than the periodSeconds value.

  2. Create the Pod object:

    $ oc create -f <file-name>.yaml
  3. Verify the state of the health check pod:

    $ oc describe pod my-application
    Example output
    Events:
      Type    Reason     Age   From                                  Message
      ----    ------     ----  ----                                  -------
      Normal  Scheduled  9s    default-scheduler                     Successfully assigned openshift-logging/liveness-exec to ip-10-0-143-40.ec2.internal
      Normal  Pulling    2s    kubelet, ip-10-0-143-40.ec2.internal  pulling image "registry.k8s.io/liveness"
      Normal  Pulled     1s    kubelet, ip-10-0-143-40.ec2.internal  Successfully pulled image "registry.k8s.io/liveness"
      Normal  Created    1s    kubelet, ip-10-0-143-40.ec2.internal  Created container
      Normal  Started    1s    kubelet, ip-10-0-143-40.ec2.internal  Started container

    The following is the output of a failed probe that restarted a container:

    Sample Liveness check output with unhealthy container
    $ oc describe pod pod1
    Example output
    ....
    
    Events:
      Type     Reason          Age                From                                               Message
      ----     ------          ----               ----                                               -------
      Normal   Scheduled       <unknown>                                                             Successfully assigned aaa/liveness-http to ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj
      Normal   AddedInterface  47s                multus                                             Add eth0 [10.129.2.11/23]
      Normal   Pulled          46s                kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Successfully pulled image "registry.k8s.io/liveness" in 773.406244ms
      Normal   Pulled          28s                kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Successfully pulled image "registry.k8s.io/liveness" in 233.328564ms
      Normal   Created         10s (x3 over 46s)  kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Created container liveness
      Normal   Started         10s (x3 over 46s)  kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Started container liveness
      Warning  Unhealthy       10s (x6 over 34s)  kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Liveness probe failed: HTTP probe failed with statuscode: 500
      Normal   Killing         10s (x2 over 28s)  kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Container liveness failed liveness probe, will be restarted
      Normal   Pulling         10s (x3 over 47s)  kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Pulling image "registry.k8s.io/liveness"
      Normal   Pulled          10s                kubelet, ci-ln-37hz77b-f76d1-wdpjv-worker-b-snzrj  Successfully pulled image "registry.k8s.io/liveness" in 244.116568ms