liveness プローブと readiness プローブは、コンテナの状態をチェックするメカニズムです。liveness プローブはコンテナが正常に実行されているかどうかを判断し、readiness プローブはリクエストを処理する準備ができているかどうかを判断します。このトピックでは、Elastic Container Instance (ECI) のコンテナに対して liveness プローブと readiness プローブを設定する方法について説明します。これらのプローブは、ECI がコンテナの状態を監視および管理するのに役立ち、高いサービス可用性と安定性を確保します。
概要
ECI は liveness プローブと readiness プローブをサポートし、コンテナのヘルス状態とステータスをチェックします。
|
プローブ |
説明 |
ユースケース |
|
liveness プローブ |
コンテナが正常に実行されているかどうかをチェックします。
|
|
|
readiness プローブ |
コンテナがリクエストを受け付けて処理する準備ができているかどうかをチェックします。
|
アプリケーションが起動時に大量のデータや設定ファイルを読み込んでいるなど、一時的にトラフィックを処理できない場合は、readiness プローブを使用します。このような場合、アプリケーションを終了させるのではなく、一時的にリクエストの送信を停止することが望まれます。 |
API 設定
CreateContainerGroup 操作で ECI インスタンスを作成する際に、LivenessProbe および ReadinessProbe パラメーターを使用してプローブを設定できます。詳細については、「CreateContainerGroup」をご参照ください。
LivenessProbe パラメーター
LivenessProbe パラメーターを設定する際は、HttpGet、Exec、または TcpSocket のいずれか 1 つのチェックメソッドのみを指定できます。
|
パラメーター |
タイプ |
例 |
説明 |
|
Container.N.LivenessProbe.HttpGet.Path |
string |
/healthyz |
HTTP GET ヘルスチェックリクエストのパス。 |
|
Container.N.LivenessProbe.HttpGet.Port |
integer |
8888 |
HTTP GET ヘルスチェックリクエストのポート。 |
|
Container.N.LivenessProbe.HttpGet.Scheme |
string |
HTTP |
HTTP GET リクエストのプロトコル。有効値:
|
|
Container.N.LivenessProbe.Exec.Command.N |
array |
cat /tmp/healthy |
ヘルスチェックのためにコンテナ内で実行するコマンド。 |
|
Container.N.LivenessProbe.TcpSocket.Port |
integer |
8000 |
TCP ソケットヘルスチェックで確認するポート。 |
|
Container.N.LivenessProbe.InitialDelaySeconds |
integer |
5 |
コンテナが起動してから最初のプローブが実行されるまでの遅延時間 (秒)。 |
|
Container.N.LivenessProbe.PeriodSeconds |
integer |
1 |
プローブが実行される間隔。デフォルト値:10。最小値:1。単位:秒。 |
|
Container.N.LivenessProbe.SuccessThreshold |
integer |
1 |
失敗後にプローブが成功したと見なされるために必要な連続成功回数。liveness プローブの場合、この値は 1 である必要があります。デフォルト:1。 |
|
Container.N.LivenessProbe.FailureThreshold |
integer |
3 |
プローブが失敗したと見なされるために必要な連続失敗回数。デフォルト値:3。 |
|
Container.N.LivenessProbe.TimeoutSeconds |
integer |
1 |
プローブがタイムアウトするまでの秒数。デフォルト値:1。最小値:1。単位:秒。 |
ReadinessProbe パラメーター
ReadinessProbe パラメーターを設定する際は、HttpGet、Exec、または TcpSocket のいずれか 1 つのチェックメソッドのみを指定できます。
|
パラメーター |
タイプ |
例 |
説明 |
|
Container.N.ReadinessProbe.HttpGet.Path |
string |
/healthyz |
HTTP GET ヘルスチェックリクエストのパス。 |
|
Container.N.ReadinessProbe.HttpGet.Port |
integer |
8888 |
HTTP GET ヘルスチェックリクエストのポート。 |
|
Container.N.ReadinessProbe.HttpGet.Scheme |
string |
HTTP |
HTTP GET リクエストのプロトコル。有効値:
|
|
Container.N.ReadinessProbe.Exec.Command.N |
array |
cat /tmp/healthy |
ヘルスチェックのためにコンテナ内で実行するコマンド。 |
|
Container.N.ReadinessProbe.TcpSocket.Port |
integer |
8000 |
TCP ソケットヘルスチェックで確認するポート。 |
|
Container.N.ReadinessProbe.InitialDelaySeconds |
integer |
5 |
コンテナが起動してから最初のプローブが実行されるまでの遅延時間 (秒)。 |
|
Container.N.ReadinessProbe.PeriodSeconds |
integer |
1 |
プローブが実行される間隔。デフォルト値:10。最小値:1。単位:秒。 |
|
Container.N.ReadinessProbe.SuccessThreshold |
integer |
1 |
失敗後にプローブが成功したと見なされるために必要な最小連続成功回数。デフォルト:1。最小値:1。 |
|
Container.N.ReadinessProbe.FailureThreshold |
integer |
3 |
プローブが失敗したと見なされるために必要な連続失敗回数。デフォルト値:3。 |
|
Container.N.ReadinessProbe.TimeoutSeconds |
integer |
1 |
プローブがタイムアウトするまでの秒数。デフォルト値:1。最小値:1。単位:秒。 |
コンソールでの設定
Elastic Container Instance コンソールで ECI インスタンスを作成する際、コンテナー設定 セクションでコンテナを選択し、コンテナの詳細設定を展開してヘルスチェックを有効にし、プローブを設定できます。
コンソールでプローブを設定する場合、コマンドラインと HTTP リクエストメソッドのみがサポートされます。TCP ソケットメソッドはサポートされていません。
|
パラメーター |
説明 |
|
時間設定 |
|
|
検査方法 |
チェックメソッドを選択します。
|
|
コマンドラインスクリプト |
チェックメソッドとして コマンドラインスクリプト を選択した場合は、コンテナで実行するコマンドを指定する必要があります。 |
|
Httpリクエストメソッド |
チェックメソッドとして Httpリクエストメソッド を選択した場合は、HTTP GET リクエストのパス、ポート、およびプロトコルを指定する必要があります。 |
例
この例では、liveness プローブと readiness プローブを使用して ECI インスタンスを作成し、サービスの障害をシミュレートしてプローブの動作を確認する方法を示します。
-
CreateContainerGroup 操作を呼び出して ECI インスタンスを作成します。
次の例では、ヘルスチェックに TCP ソケットメソッドを使用します:
ContainerGroupName=test-probe # nginx イメージを使用し、EIP を自動的に作成して関連付けます。 Container.1.Name=container-1 Container.1.Image=nginx AutoCreateEip=true # Liveness プローブ:起動後 5 秒で開始し、3 秒ごとにポート 80 をチェックします。成功のしきい値:1、失敗のしきい値:3、タイムアウト:10 秒。 Container.1.LivenessProbe.TcpSocket.Port=80 Container.1.LivenessProbe.InitialDelaySeconds=5 Container.1.LivenessProbe.PeriodSeconds=3 Container.1.LivenessProbe.SuccessThreshold=1 Container.1.LivenessProbe.FailureThreshold=3 Container.1.LivenessProbe.TimeoutSeconds=10 # Readiness プローブ:起動後 5 秒で開始し、3 秒ごとにポート 80 をチェックします。成功のしきい値:1、失敗のしきい値:3、タイムアウト:10 秒。 Container.1.ReadinessProbe.TcpSocket.Port=80 Container.1.ReadinessProbe.InitialDelaySeconds=5 Container.1.ReadinessProbe.PeriodSeconds=3 Container.1.ReadinessProbe.SuccessThreshold=1 Container.1.ReadinessProbe.FailureThreshold=3 Container.1.ReadinessProbe.TimeoutSeconds=10 -
Elastic Container Instance コンソールで ECI インスタンスのイベントを表示します。
ECI インスタンスが作成されたら、インスタンス ID をクリックして詳細ページを開きます。イベント タブで、コンテナが正常に起動したことを確認できます。
イベントリストには、「Pulling image "nginx"」、「Successfully pulled image "nginx"」、「Created container container-1」、「Started container container-1」の 4 つの Normal イベントが順番に表示されます。
-
コンテナに接続します。詳細については、「ワークベンチを使用して ECI インスタンスに接続」をご参照ください。
-
Nginx のリッスンポートを変更して、サービスの障害をシミュレートします。
-
Nginx のリッスンポートを変更します。
説明この例で使用されている Nginx イメージには
vimがインストールされていません。viコマンドを実行する前に、apt-get updateとapt-get install vimを実行して vim をインストールしてください。vi /etc/nginx/conf.d/default.conf次の例に示すように、リッスンポートを 80 から 8080 に変更します:
server { listen 8080; listen [::]:8080; server_name localhost; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } -
Nginx の設定を再読み込みします。
nginx -s reload
-
-
プローブの効果を確認します。
Nginx を再読み込みしてから数秒後、コンテナは自動的に再起動します。インスタンスのイベントを表示して、liveness プローブと readiness プローブが失敗した後にコンテナが再起動することを確認できます。
イベントリストには、プローブがメッセージ
dial tcp 172.x.x.x:80: connect: connection refusedとともに失敗したことが示されます。これは、コンテナポートへの接続が拒否されたことを意味します。その結果、ECI は自動的にcontainer-1コンテナを再起動しました。