
コンテクスト
ポッドはクラスターで実行されていますが、応答していません。
タスク
望ましい動作は、エンドポイントがサーバー上で HTTP 500 を返したときに、Kubemetes がポッドを再起動するようにすることです。
/healthz エンドポイント。サービス、probe-pod は、障害が発生している間、ポッドにトラフィックを送信してはなりません。以下を完了してください。
* アプリケーションにはエンドポイント /started があり、HTTP 200 を返すことでトラフィックを受け入れることができるかどうかを示します。
エンドポイントが HTTP 500 を返す場合、アプリケーションはまだ初期化を完了していません。
* アプリケーションには別のエンドポイント /healthz があり、HTTP 200 を返すことによって、アプリケーションがまだ期待どおりに動作しているかどうかを示します。エンドポイントが HTTP 500 を返す場合、アプリケーションは応答しなくなります。
* これらのエンドポイントを使用するために、提供されたプローブ ポッド ポッドを構成します。
* プローブはポート 8080 を使用する必要があります
正解:
以下の解決策を参照してください。
説明
解決:
apiバージョン: v1
種類:ポッド
メタデータ:
ラベル:
テスト: 活性
名前: liveness-exec
仕様:
コンテナ:
- 名前: 活力
画像: k8s.gcr.io/busybox
引数:
- /bin/sh
- -c
- /tmp/healthy に触れます。30 睡眠; rm -rf /tmp/healthy; 睡眠 600
livenessProbe:
実行:
指図:
- 猫
- /tmp/健康
initialDelaySeconds: 5
periodSeconds: 5
構成ファイルでは、Pod に 1 つのコンテナーがあることがわかります。periodSeconds フィールドは、kubelet が 5 秒ごとに liveness プローブを実行する必要があることを指定します。initialDelaySeconds フィールドは、最初のプローブを実行する前に 5 秒間待機する必要があることを kubelet に伝えます。プローブを実行するために、kubelet はターゲット コンテナーでコマンド cat /tmp/healthy を実行します。コマンドが成功すると 0 が返され、kubelet はコンテナーが有効で正常であると見なします。コマンドがゼロ以外の値を返す場合、kubelet はコンテナーを強制終了して再起動します。
コンテナーが起動すると、次のコマンドが実行されます。
/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600" コンテナーの寿命の最初の 30 秒間は、/tmp/healthy ファイルがあります。したがって、最初の 30 秒間、コマンド cat /tmp/healthy は成功コードを返します。30 秒後、cat /tmp/healthy が失敗コードを返します。
ポッドを作成します。
kubectl apply -f https://k8s.io/examples/pods/probe/exec-liveness.yaml
30 秒以内に、Pod イベントを表示します。
kubectl describe pod liveness-exec
出力は、liveness プローブがまだ失敗していないことを示しています。
FirstSeen LastSeen カウント From SubobjectPath タイプ 理由 メッセージ
--------- -------- ----- ---- ------------- -------- --- --- -------
24s 24s 1 {default-scheduler } 通常 スケジュール済み liveness-exec が worker0 に正常に割り当てられました
23s 23s 1 {kubelet worker0} spec.containers{liveness} ノーマル 引っ張る 引っ張る イメージ "k8s.gcr.io/busybox"
23s 23s 1 {kubelet worker0} spec.containers{liveness} ノーマル Pulled 正常にプルされたイメージ
"k8s.gcr.io/busybox"
23 秒 23 秒 1 {kubelet worker0} spec.containers{liveness} 通常 作成済み Docker ID を持つ作成済みコンテナー
86849c15382e; セキュリティ:[seccomp=無制限]
23s 23s 1 {kubelet worker0} spec.containers{liveness} 通常 開始済み docker id でコンテナを開始しました
86849c15382e
35 秒後、Pod イベントを再度表示します。
kubectl describe pod liveness-exec
出力の下部に、liveness プローブが失敗したこと、およびコンテナーが強制終了されて再作成されたことを示すメッセージがあります。
FirstSeen LastSeen カウント From SubobjectPath タイプ 理由 メッセージ
--------- -------- ----- ---- ------------- -------- --- --- -------
37s 37s 1 {default-scheduler } 通常 スケジュール済み liveness-exec が worker0 に正常に割り当てられました
36s 36s 1 {kubelet worker0} spec.containers{liveness} ノーマル Pulling Pulling image 「k8s.gcr.io/busybox」
36s 36s 1 {kubelet worker0} spec.containers{liveness} Normal Pulled 正常にプルされたイメージ
"k8s.gcr.io/busybox"
36s 36s 1 {kubelet worker0} spec.containers{liveness} 通常 作成済み Docker ID を持つ作成済みコンテナー
86849c15382e; セキュリティ:[seccomp=無制限]
36s 36s 1 {kubelet worker0} spec.containers{liveness} 通常 開始済み docker id でコンテナを開始しました
86849c15382e
2s 2s 1 {kubelet worker0} spec.containers{liveness} 警告 異常な Liveness プローブが失敗しました: 猫: 開けません
'/tmp/healthy': そのようなファイルまたはディレクトリはありません
さらに 30 秒待って、コンテナーが再起動されたことを確認します。
kubectl get pod liveness-exec
出力は、RESTARTS がインクリメントされたことを示しています。
NAME READY STATUS RESTARTS AGE
liveness-exec 1/1 実行中 1 1m