Comcastが開発したKuberhealthyは、Kubernetesクラスタ内で模擬テストを実行することによって、Kubernetesの問題を検出するオープンソースソリューションだ。JSONステータスページとPrometheusメトリックエンドポイントを通じてテスト結果が報告されるため、Kuberhealthyのメトリックをアラートするための柔軟な選択が可能になる。
Kuberhealthyは、実際のKubernetesワークフローを複製することで、他の方法では検出できない可能性のある運用上の問題の識別を試みる。検出可能な潜在的問題には、CNI通信障害によって"Terminating"の状態で動作停止するPod、ディスクのプロビジョンエラー時に"ContainerCreating"状態で動作停止するPod、再起動が速すぎるPodなどがある。これらの問題を検出するために、Kuberhealthyは、いくつかのチェックを並行して実行する。
- デーモンセット(Daemonset)の配備と終了: このテストでは、デーモンセットをKuberhealthyネームスペースにデプロイして、すべてのPodが"Ready"状態になるのを待ってPodを終了し、終了が成功したすることを保証する。
- コンポーネントの正常性: クラスタコンポーネントの状態を確認し、5分以上停留している場合は警告する。
- Podの過剰な再起動: 指定されたネームスペース(省略時は"kube-system")内で、Podが1時間に5回以上再起動していないかを監視する。
- Podのステータス: 10分以上経過しても"Ready"状態にないPodをチェックする。
- DNS: クラスタ内外のDNS障害を確認する。
将来のバージョンでは、サービスプロビジョニング、DNS解決、ディスクプロビジョニングなどのテストが追加される予定である。
いずれかのKuberhealthyテストでエラーや失敗が発生すると、その詳細がhttp://kuberhealthy.kuberhealthyにあるJSONステータスページにレポートされる。ステータスページには、Kuberhealthyのステータスを示すブール値の"OK"フィールドと、Kuberhealthyチェック毎のすべての潜在的エラーに関する説明を、エラー配列としてリストアップした、チェック詳細JSONオブジェクトが含まれている。最後のチェックがいつ実行されたかなど、チェックに関する追加的な情報も見ることができる。
{
"OK": true,
"Errors": [],
"CheckDetails": {
"ComponentStatusChecker": {
"OK": true,
"Errors": [],
"LastRun": "2018-06-21T17:32:16.921733843Z",
"AuthoritativePod": "kuberhealthy-7cf79bdc86-m78qr"
},
"DaemonSetChecker": {
"OK": true,
"Errors": [],
"LastRun": "2018-06-21T17:31:33.845218901Z",
"AuthoritativePod": "kuberhealthy-7cf79bdc86-m78qr"
},
"PodRestartChecker namespace kube-system": {
"OK": true,
"Errors": [],
"LastRun": "2018-06-21T17:31:16.45395092Z",
"AuthoritativePod": "kuberhealthy-7cf79bdc86-m78qr"
},
"PodStatusChecker namespace kube-system": {
"OK": true,
"Errors": [],
"LastRun": "2018-06-21T17:32:16.453911089Z",
"AuthoritativePod": "kuberhealthy-7cf79bdc86-m78qr"
}
},
"CurrentMaster": "kuberhealthy-7cf79bdc86-m78qr"
}
ステータスページの例 — KuberhealthyのREADME.mdより引用
KuberhealthyはHelmまたはyamlで記述したspecファイルと合わせてインストールが可能で、クラスタ内でのみ使用できる。インストールが完了すると、Kuberhealthyは、Pod中断予算(pod disruption budget)とローリングアップデート戦略を使用して2つのインスタンスを実行することで、高い可用性を確保する。Prometheusアラートと統合するためのPrometheus Service Monitorコンフィギュレーション、 Grafanaダッシュボードをインストールするためのテンプレートなども提供されている。
Comcastでは、Kubernetesクラスタの健全性と安定性を監視し、Prometheusなど既存の監視ツールと統合する必要性から、Kuberhealthyを開発した。実際のワークロードを模倣することによって、Kuberhealthyは、Kubernetes用のより堅牢な監視ソリューションをComcastに提供する。
Kubernetesクラスタの健全性監視のためのアプローチとしては、この他にも、Podリソース使用統計を集約するKubernetesツールであるkubelet 、CPU、メモリ、ファイルシステム、ネットワーク使用統計を収集するcAdvisorなどがある。Grafanaでは、Prometheusを通じてこれら測定基準を収集し、視覚化するプラグインを提供している。Kubernetes用ツール以外では、 kube state metricsが、Kubernetes APIサーバを監視し、展開、ノード、Podといったさまざまなオブジェクトの状態に関するメトリックを収集する。Kuberhealthyと同様、これらのメトリクスも、メトリクスエンドポイントのプレーンテキストとして報告されるので、Prometheusとの統合が可能である。
Kuberhealthyの導入には、インストールガイドに従うか、Kubernetes Slackの"kuberhealthy"チャンネルで詳細を学ぶとよいだろう。