二つのメカニズムKubernetesヘルスチェック:生体検知と準備の検出、および健康診断の実用化は、スケールアップとローリングアップデートシーン。
コンテナアプリケーションを起動する際に知っておくプローブを使用して起動kubelet。このようなプローブ構成した場合、それはプローブがアプリケーションを起動すると、彼らは干渉しないことを確実にするために、成功するまで活動や準備状況のチェックを無効にします。これは、遅い血管検査活動を開始kubelet起動して実行する前に殺されてからそれらを防ぐために使用することができます。
アクティブコマンドのexecの定義
この演習では、あなたがポッドを作成し、ポッドに基づくことができるk8s.gcr.io/busybox
画像コンテナランニング 。これは、ポッドプロファイルです:
ポッド/プローブ/ exec- liveness.yaml apiVersion:v1の 種類:ポッドの メタデータ: ラベル: テスト:ライブネス 名:ライブネス - execの 仕様: コンテナ: - 名前:ライブネス 画像:k8s.gcr.io / busyboxのの 引数: - / binに/ SH - - C - タッチを/ tmp /健康。睡眠 30 ; RM -rf / tmpに/健康。眠る 600 :livenessProbe EXEC: :コマンド - 猫 -を/ tmp /を健康を initialDelaySeconds:5 periodSeconds:5
コンフィギュレーション・ファイルでは、ポッドは、単一のコンテナを持って見ることができます。このperiodSeconds
フィールドはkubeletがアクティビティを検出するために、5秒ごとに1回実行する必要があります指定します。このinitialDelaySeconds
フィールドには、5秒間待つべきプローブの実装前にkubelet伝えます。検出を実行するには、kubelet cat /tmp/healthy
コンテナで実行コマンド。コマンドが成功した場合、それは0を返し、コンテナがアクティブで健康的と考えていkubelet。コマンドがゼロ以外の値を返す場合、kubeletは、コンテナを殺して、それを再起動します。
コンテナの生活の中で最初の30秒で、そこにある/tmp/healthy
文書。このように、以前の30秒、コマンドはcat /tmp/healthy
成功コードを返します。30秒後、cat /tmp/healthy
故障コードを返します。
30秒以内に、ポッドのイベントを参照してください。
FirstSeen LastSeenはSubobjectPathタイプの理由メッセージからのカウント --------- -------- ----- ---- ------------- --- ----- ------ ------- 24Sと24S 1 {デフォルトスケジューラ}通常のスケジュール成功liveness-割り当てworker0するExecの 23S 23S 1 引っ張る正常{kubelet worker0} spec.containers {ライブネスを}画像引っ張る" k8s.gcr.io/busybox " 23Sと23Sを 1 {kubelet worker0} spec.containers {ライブネス}通常は正常に引っ張ら画像プル" k8s.gcr.io/busyboxを" 23Sと23S 1 {kubelet worker0} spec.containers {ライブネス}通常は、ドッカーで作成したコンテナを作成したID 86849c15382e。セキュリティ:[seccomp = 閉じ込め] 23Sと23S 1 {kubelet worker0} spec.containers {ライブネス}通常は、ドッカーで開始容器開始のID 86849c15382eを
35秒後、再度ポッドイベントを表示:出力の下部に、メッセージは、アクティブプローブが失敗したことを示し、そして容器は殺され、再作成されています。
FirstSeen LastSeenはSubobjectPathタイプの理由メッセージからのカウント --------- -------- ----- ---- ------------- --- ----- ------ ------- 37Sと37S 1 {デフォルトスケジューラ}通常のスケジュール成功liveness-割り当てworker0するExecの 36S 36S 1 引っ張る正常{kubelet worker0} spec.containers {ライブネスを}画像引っ張る" k8s.gcr.io/busybox " 36Sと36Sを 1 {kubelet worker0} spec.containers {ライブネス}通常は正常に引っ張ら画像プル" k8s.gcr.io/busyboxを" 36S 36S 1 {kubelet worker0} spec.containers {ライブネス}ノーマルドッカーで作成されたコンテナ作成ID 86849c15382eと、セキュリティ:[seccomp = 閉じ込め] 36Sと36S 1 {kubelet worker0} spec.containers {ライブネス}ノーマルドッカースタート容器スタートID 86849c15382e 2S 2S 1 :不健康ライブネスプローブ警告{kubelet worker0} spec.containers {ライブネス}は失敗猫:CAN 「はtが開く」を/ tmp /健康" :そのようなファイルまたはディレクトリ
30秒待ってから、容器が再起動されたことを確認します。
liveness-ポッド取得kubectl 幹部 NAME READY STATUSがAGEの再起動 生存性を -exec 1 / 1 実行 1つの 1メートルを
アクティブなHTTPリクエストの定義
別のアクティビティプローブHTTP GETリクエスト。これは、コンテナを実行するためにk8s.gcr.io/livenessポッドのプロフィール画像に基づいています。
ポッド/プローブ/ HTTP- liveness.yaml apiVersion:v1の 種類:ポッドの メタデータ: ラベル: テスト:ライブネス 名前:生存性 - HTTP 仕様: コンテナ: - 名前:ライブネス 画像:k8s.gcr.io / ライブネス 引数: - / サーバー livenessProbe : HTTPGET: パス: / healthzの ポート:8080 httpHeaders: -名前:Rカスタムヘッダ 値:素晴らしい initialDelaySeconds:3 periodSeconds:3
コンフィギュレーション・ファイルでは、ポッドは、単一のコンテナを持って見ることができます。このperiodSeconds
フィールドはkubeletが活性を検出するために3秒に1回実行する必要があります指定します。このinitialDelaySeconds
フィールドには、3秒間待つべきプローブの実装前にkubelet伝えます。検出を実行するには、サーバーコンテナを実行し、ポート8080でリッスンにHTTP GETリクエストをkubelet。サーバーの場合は/healthz
パスハンドラが成功コードを返し、コンテナがアクティブで、良好な状態で実行されていると信じていkubelet。ハンドラは、失敗コードを返した場合、kubeletは、コンテナを殺して、それを再起動します。
以上200に等しく、400未満である任意のコードが正常に発現されました。他のコードの両方が失敗したことを示しています。
あなたは可能でserver.go ビューサーバーのソースコードを 。
コンテナ /healthz
アクティブ最初の10秒で、処理手順は200の状態に戻ります。その後、処理手順は、500の状態に戻ります。
http.HandleFunc(" / healthz "、FUNC(W http.ResponseWriter、R * http.Request){ 期間: = 時間。.Now()サブ(開始) 場合 duration.Seconds()> 10 { W .WriteHeader(500 ) W .WRITE([] バイト(FMT .Sprintf(" エラー:%V " 、duration.Seconds()))) } 他{ W .WriteHeader(200 ) W .WRITE([] バイト("OK " )) } })
3秒コンテナが開始した後、kubeletは、ヘルスチェックの実行を開始します。そのため、以前のヘルスチェックは成功します。しかし、10秒後に、ヘルスチェックが失敗し、kubeletは、コンテナを終了して再起動します。
定義されたTCP生存性プローブ
https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
準備プローブの定義
時々 、アプリケーションは、サービストラフィックに一時的にできません。たとえば、アプリケーションが起動時に大きなデータファイルや設定をロードする必要がある、または外部サービスに依存して起動した後ことがあります。このケースでは、アプリケーションを強制終了する必要はありませんが、リクエストを送信する必要はありません。Kubernetesは、これらの状況は検出と緩和を調査する準備ができています。その報告書のコンテナ船とコンテナの準備ができていませんし、Kubernetesサービス上のトラフィックを受信できません。
同様の準備の構成および生存性。唯一の違いは、あなたが使用していることであるreadinessProbe
のではなく、フィールドをlivenessProbe
フィールド。
readinessProbe: EXEC: コマンド: - 猫 -を/ tmp / 健康 initialDelaySeconds:5 periodSeconds:5
HTTPおよびTCPプローブの構成も同じ即応し、プローブの活動です。
準備およびライブネスは同じ容器のため並行して使用することができます。どちらも、コンテナに到達していないトラフィックの準備ができていないことを確認するために同時に使用することができ、かつコンテナが故障した場合に再起動されていることを確認することができます。