docker容器の健康状態監視機能healthcheck


ブログは学習ノートとして記録されており、理解、表現ミスがあれば、指摘を歓迎します.
healthcheckはdocker 1です.12リリースで導入された新しい機能は、容器の健康状態のモニタリングに使用されます.
一時的にk 8 sはdockerのhealthcheck機能をサポートせず、k 8 sはそれ以前から提供されていたlivenesとreadiness機能によってhealthcheckを実現し、dockerはhealthcheck機能を導入し、k 8 sにも学習されていると推定される.
 
dockerのhealthcheck
オプションの設定:
  • --interval=DURATION(default:30s)、間隔
  • --timeout=DURATION(default:30s)、タイムアウト
  • --start-period=DURATION(default:0s)、初期化時間
  • 説明:この期間のプローブに失敗した場合、最大再試行回数は計上されません.ただし、健康診断が起動中に成功した場合、容器が起動したとみなされ、連続した失敗はすべて最大再試行回数に計上されます.
  • --retries=N(default:3)は、連続して所定回数失敗すると容器状態がunhealthy
  • になる.
    書式:HEALTHCHECK[オプション]CMD(shell形式とexec形式に分かれます).
    複数のコマンドがある場合は、最後のコマンドが有効になります.
    出力:healthcheckコマンドの実行結果は次のとおりです.
  • 0:success-the container is healthy and ready for use、容器の正常な運行、状態の健康
  • 1:unhealthy-the container is not working correctly,コンテナ起動異常
  • :reserved-do not use this exit code、
  • 未使用
     
    栗を挙げます.
    curlでwebサービスが正常かどうかを判断し、dockerfileでhealthcheckを定義します.
    FROM nginx
    RUN apt-get update && apt-get
    install -y curl && rm -rf /var/lib/apt/lists/*
    HEALTHCHECK --interval=5s --timeout=3s \
      CMD curl -fs http://localhost/ || exit 1

    コンテナを運転したばかりの場合、コンテナ状態はhealth:starting
    $ docker container ls
    CONTAINER ID        IMAGE               COMMAND                  CREATED           STATUS                            PORTS               NAMES
    03e28eb00bd0        myweb:v1            "nginx -g 'daemon off"  3 seconds ago       Up 2 seconds (health: starting)  80/tcp, 443/tcp     web

    数秒後には状態がhealthyになります
    $ docker container ls
    CONTAINER ID        IMAGE               COMMAND                  CREATED            STATUS                    PORTS               NAMES
    03e28eb00bd0        myweb:v1            "nginx -g 'daemon off"  18 seconds ago      Up 16 seconds (healthy)   80/tcp, 443/tcp     web

    健康命令の出力結果は健康状態に格納され、docker inspectで表示できます.eg:
    $ docker inspect --format '{{json .State.Health}}' web | python -m json.tool
    # :
    {
        "FailingStreak": 0,
        "Log": [
            {
                "End": "2016-11-25T14:35:37.940957051Z",
                "ExitCode": 0,
                "Output": "


    Welcome to nginx!



    Welcome to nginx!


    If you see this page, the nginx web server is successfully installed and
    working. Further configuration is required.



    For online documentation and support please refer to
    nginx.org.

    Commercial support is available at
    nginx.com.



    Thank you for using nginx.




    ",             "Start": "2016-11-25T14:35:37.780192565Z"         }     ],     "Status": "healthy" }

      
    REF:
    https://docker_practice.gitee.io/image/dockerfile/healthcheck.html
    https://docs.docker.com/engine/reference/builder/