参考にさせてもらったもの
Kubernetes完全ガイドをそのままやらせていただきました!
Kubernetesのヘルスチェック
- Liveness Probe⇨Podが動作しているか確認し、NGであればPodの再起動をする
- Readiness Probe⇨Podが動作しているか確認し、NGであっても再起動しない
- LoadBarancerサービスのヘルスチェックはICMPのみ
- チェック方法は3種類で、exce(コマンドでのリターンコード)、httpGet(ステータスコード)、tcpSocket(TCPセッション)
マニュフェストファイル作成
sample-healthcheck.yaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<span class="na">apiVersion </span><span class="pi">:</span> <span class="s">V1の</span> <span class="na">種類</span><span class="pi">:</span> <span class="s">ポッド</span> <span class="na">メタデータ</span><span class="pi">:</span> <span class="na">名</span><span class="pi">:</span> <span class="s">サンプルヘルス・</span> <span class="na">ラベル</span><span class="pi">:</span> <span class="na">アプリ</span><span class="pi">:</span> <span class="s">サンプルアプリの</span> <span class="na">仕様</span><span class="pi">:</span> <span class="na">コンテナ</span><span class="pi">:</span> <span class="pi">- </span> <span class="na">名前</span><span class="pi">:</span> <span class="s">nginxの容器の</span> <span class="na">イメージ</span><span class="pi">:</span> <span class="s">nginxの:1.12 </span> <span class="na">ポート</span><span class="pi">:</span> <span class="pi">- </span> <span class="na">containerPort </span><span class="pi">:</span> <span class="m">80 </span> <span class="na">livenessProbe </span><span class="pi">:</span> <span class="na">HTTPGET </span><span class="pi">:</span> <span class="na">パス</span><span class="pi">:</span> <span class="s">/インデックス。 html </span> <span class="na">ポート</span><span class="pi">:</span> <span class="m">80 </span> <span class="na">スキーム</span><span class="pi">:</span> <span class="s">HTTP </span> <span class="na">タイムアウト秒</span><span class="pi">:</span> <span class="m">1</span> <span class="na">successThreshold </span><span class="pi">:</span> <span class="m">1 </span> <span class="na">failureThreshold </span><span class="pi">:</span> <span class="m">2 </span> <span class="na">initialDelaySeconds </span><span class="pi">:</span> <span class="m">5 </span> <span class="na">periodSeconds </span><span class="pi">:</span> <span class="m">3 </span> <span class="na">readinessProbe </span><span class="pi">:</span> <span class="na">exec </span><span class="pi">:</span> <span class="na">command </span><span class="pi">:</span> <span class="pi">[ </span><span class="s2">" </span><span class="s">ls" </span><span class="pi">、</span> <span class="s2">" </span><span class="s">/usr/share/nginx/html/50x.html" </span><span class="pi">] </span> <span class="na">timeoutSeconds </span><span class="pi">:</span> <span class="m">1 </span> <span class="na">successThreshold </span><span class="pi">:</span> <span class="m">2 </span> <span class="na">failureThreshold </span><span class="pi">:</span> <span class="m">1 </span> <span class="na">initialDelaySeconds </span><span class="pi">:</span> <span class="m">5 </span> <span class="na">periodSeconds </span><span class="pi">:</span> <span class="m">3</span> |
展開(Readiness Probeも一緒にされる見たい)
1 |
k apply -f sample-healthcheck.yaml |
ポッドに設定されたProbeの確認
1 2 3 4 5 |
〜/ Desktop❯❯❯kはポッドのサンプル-ヘルスチェックを記述します| egrep「Liveness | Readness」 活性:http-get http://:80 / index.html delay = 5s timeout = 1s period = 3s#success = 1#failure = 2 〜/デスクトップ❯❯❯ |
インデックスファイルを削除してわざとヘルスチェックを失敗させる
1 |
k exec -it sample-liveness rm /usr/share/nginx/html/index.html |
別窓で見てみるとRESTARTが読み込まされている
1 2 3 4 5 6 |
〜/ Desktop❯❯❯k get pods sample-liveness --watch 名前READYステータス再起動年齢 サンプルの生存度1/1ランニング1 4分14秒 名前READYステータス再起動年齢 サンプルの生存度1/1ランニング2 4分26秒 サンプルの生存度1/1ランニング3 5分15秒 |
ヘルスチェックの履歴はdescribeで見れる
1 |
kは、ポッドのサンプルの活性を説明します |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
名前:sample-liveness 名前空間:デフォルト 優先度:0 ノード:ip-172-16-139-45.us-east-1.compute.internal / 172.16.139.45 開始時間:2019年11月18日月曜日17:09:46 +0900 ラベル:app = sample-app アノテーション:kubectl.kubernetes.io/last-applied-configuration: {"apiVersion": "v1"、 "kind": "Pod"、 "metadata":{"annotations":{}、 "labels":{"app": "sample-app"}、 "name": " sample-liveness "、" namespace ":" default "} ... kubernetes.io/psp:eks.privileged ステータス:実行中 IP:172.16.143.102 コンテナ: nginx-container: コンテナID:docker:// 3ef5c4f01ce5913e474af0c67d8d38added4f436f98a3a9cb60c1b2341796994 画像:nginx:1.12 イメージID:docker-pullable:// nginx @ sha256 :72daaf46f11cc753c4eab981cbf869919bd1fee3d2170a2adeac12400f494728 ポート:80 / TCP ホストポート:0 / TCP 状態:実行中 開始:月、2019年11月18日17:16:39 +0900 最終状態:終了 理由:完了 終了コード:0 開始:月、2019年11月18日17:15:33 +0900 終了:2019年11月18日月曜日17:15:48 +0900 準備完了:真 再起動カウント:5 活性:http-get http://:80 / index.html delay = 5s timeout = 1s period = 3s#success = 1#failure = 2 環境:<なし> マウント: /var/run/secrets/kubernetes.io/serviceaccount from default-token-hb7gs(ro) 条件: タイプステータス 初期化されたTrue レディトゥルー ContainersReady True PodScheduled True ボリューム: default-token-hb7gs: タイプ:シークレット(シークレットによって作成されたボリューム) SecretName:default-token-hb7gs オプション:false QoSクラス:BestEffort ノードセレクター:<なし> 許容値:node.kubernetes.io/not-ready:NoExecute for 300s node.kubernetes.io/unreachable:NoExecute for 300s イベント: タイプ理由メッセージからの年齢 ---- ------ ---- ---- ------- 通常のスケジュール7m36s default-schedulerは、デフォルト/サンプルライブネスを ip-172-16-139-45.us-east-1.compute.internalに正常に割り当てました 通常開始2分22秒(x4は7分35秒)kubelet、 ip-172-16-139-45.us-east-1.compute.internal開始コンテナーnginx-container 通常プル109s(x5 over 7m35s)kubelet、 ip-172-16-139-45.us-east-1.compute.internal コンテナイメージ「nginx:1.12」はすでにマシンに存在します 通常作成109秒(x5 over 7m35s)kubelet、 ip-172-16-139-45.us-east-1.compute.internal 作成されたコンテナーnginx-container 警告異常な109秒(x8 over 4m22s)kubelet、 ip-172-16-139-45.us-east-1.compute.internal活性プローブが失敗しました :HTTPプローブがステータスコードで失敗しました:404 Normal Killing 109s(x4 over 4m19s)kubelet、 ip-172-16-139-45.us-east-1.compute.internal Container nginx-container failed liveness probe、will be restarted |