「Robusta」でKubernetesクラスタの監視と管理自動化を行う
- 1 はじめに
- 2 Robustaの概要
- 3 Robustaの仕組み
- 4 Robustaを動かす
- 5 アラート
- 6 カスタムアラート
- 7 変更検知
- 8 Robusta UI
- 8.1 Apps: アプリケーションの情報表示
- 8.2 Timeline: イベントの表示
- 8.3 Jobs: Jobの情報表示
- 8.4 Nodes: Nodeの情報表示
- 8.5 Comparison: 各種リソースの比較
- 8.6 Clusters: クラスタの情報表示
- 8.7 Alerting: アラート情報の表示、設定
- 8.8 Efficiency: リソースの利用情報
- 8.9 Best Practices: 設定の推奨事項の表示
- 8.10 Plan & Usage: Planの情報表示
- 9 有料版と無料版の違い
- 10 おわりに
はじめに
こんにちは。3-shakeの桜井佑介です。今回は、Kubernetesクラスタの監視と管理自動化を行える「Robusta」について紹介します。
Robustaの概要
Robustaは、Robusta社が提供しているKubernetesクラスタを監視するためのPrometheusをベースとしたオープンソースの可観測性ツールです。自動化ルールに従い、調査に必要な様々な情報を自動で取得して通知してくれます。
例えば、
- Podがエラー終了したときログ収集して通知する
- Jobが失敗したとき最後の実行状態を通知する
- OOMが発生したときにmemory使用量のグラフを添付して通知する
Robustaでは「プレイブック」という通知のルールを作ります。プレイブックはトリガー(Podのクラッシュ、Prometheusアラートなど)とアクションからなります。アクションでは通知にログなどの情報を付与して充実させたり、通知を沈黙させたりできます。
RobustaはSaaSとして有料で提供されていますが、無料でも利用できます。
Robustaの仕組み
Robustaをインストールすると、Robustaのコンポーネント・プロセスがデプロイされます。Robustaでデプロイされるコンポーネントの主な役割は以下です。
- robusta-forwarder
- KubernetesのAPI Serverにアクセスし、リソースの変更を監視する。取得した情報をrobusta-runnerに送る
- robusta-runner
- イベントを受け取り、評価して通知を送る
オプションとして、以下のコンポーネントも用意されています。
- Prometheus
- Robustaのインストールと同時にkube-prometheus-stackとPrometheus Operatorをインストールできます。既存のPrometheusと統合することも可能
- Web UI
- アラートやクラスタを一目で見ることができるダッシュボードが用意されている
- CLI
- Robustaをインストールするための補助やalertを発生させるデモのために利用できる
$ robusta --help Usage: robusta [OPTIONS] COMMAND [ARGS]... Options: --help Show this message and exit. Commands: auth Authentication commands menu demo Deliberately deploy a crashing pod to kubernetes so you... demo-alert Create a demo alert on AlertManager. gen-config Create runtime configuration file integrations Integrations commands menu logs Fetch Robusta runner logs playbooks Playbooks commands menu self-host Self-host commands menu update-config Update an existing values.yaml file. version Show the version of the local robusta-cli
Robustaを動かす
Robustaは公式の手順に従って、Helm chartでインストールします。robusta gen-configコマンドでHelmのvaluesファイルを生成します。コマンドを実行すると、SlackやWeb UIの設定などをインタラクティブに行うことができます。
robusta gen-config --enable-prometheus-stack
入力が完了すると、generated_values.yamlファイルが生成されます。生成した設定ファイルを使用してhelmでrobustaをインストールします。helmでインストールすると、Robustaのコンポーネント(robusta-forwarderとrobusta-runner)とkube-prometheus-stackのリソースがデプロイされます。
UIにはこちらのURLからアクセスできます。インストール時に指定したGmail等でログインします。ここでは、Robustaによって収集されたPodの情報を確認できます。
左にあるメニューから「App」を指定することでPodなどの情報を確認できます。
アラート
Robustaをインストールすると、事前に定義されたアラートがデプロイされます。実際のトラブルシューティングのシナリオのためのPodが用意されているので、それを試します。
下記のコマンドを実行すると、CrashLoopBackOffするPodをデプロイできます。このコマンドは公式ドキュメントに記載されています。
kubectl apply -f https://gist.githubusercontent.com/robusta-lab/283609047306dc1f05cf59806ade30b6/raw
Podがクラッシュしていることを確認できます。
$ kubectl get pods -l app=crashpod crashpod-5794b8d86c-72zvt 0/1 CrashLoopBackOff 3 (17s ago) 65s
今回のアラートルールでは、2回Restartが発生するとSlackに通知が送られるようになっています。通知には、どのPodでエラーが発生したかやログメッセージなども付与されています。
UIからもPodの状態を確認できます。
CrashLoopBackOffするPod以外にも、GitHubのリポジトリに様々なデモ用のyamlが用意されています。
カスタムアラート
事前に定義されたアラート以外にも、自分でアラートを定義できます。ここではJobの失敗に対するアラートを設定しましょう。カスタムアラートを設定するには、最初に生成したgenerated_values.yamlにcustomPlaybooksという項目を作ります。設定項目は、おおよそ以下のようになっています。詳細は公式ドキュメントを参照してください。
- triggers: ここでJobの失敗の時にアラートするように設定する
- actions: アラート時のアクション
- create_finding:
- title: アラートのタイトル
- aggregation_key: この値によりアラートをひとまとめにする
- enricher
- enricherの設定で通知に付与する情報を決める。例えばjob_events_enricherならばkubectl get eventsで得られる情報を通知する情報に付与する
customPlaybooks: - triggers: - on_job_failure: {} actions: - create_finding: title: "Job Failed" aggregation_key: "job_failure" - job_info_enricher: {} - job_events_enricher: {} - job_pod_enricher: {}
上記の設定を追加して、helmを更新します。
helm upgrade robusta robusta/robusta -f ./generated_values.yaml --set clusterName=robusta-cluster
失敗するJobをデプロイします。
kubectl apply -f https://raw.githubusercontent.com/robusta-dev/kubernetes-demos/main/job_failure/job_crash.yaml
下図のように、失敗したJobに関するアラートが発報されています。また、txtファイルで以下の情報が添付されていることが分かります。
- test-job-lmwn9.log: Jobのアプリケーションのログ
- Job events.txt: JobのEventの情報
- Job pod events.txt: JobのpodのEventの情報
変更検知
robustaはKubernetesリソースの変更を検知し、通知する機能があります。これは、以下の様々な場面で有効な機能です。
- アプリケーションの新しいバージョンがロールアウトされたとき
- 機密性の高いリソースが変更されたとき
- ClusterRolesまたはServiceAccountsなどが変更されたとき
公式ドキュメントに実施方法が記載されているので試してみましょう。以下の設定をgenerated_values.yamlに追加することで、deploymentリソースのimageの変更を検知できます。
customPlaybooks: - triggers: - on_deployment_update: {} actions: - resource_babysitter: omitted_fields: [] fields_to_monitor: ["image"]
デモ用のPodが用意されているので、デプロイします。
kubectl apply -f https://raw.githubusercontent.com/robusta-dev/kubernetes-demos/main/deployment_image_change/before_image_change.yaml
imageが変更されたyamlで更新します。
kubectl apply -f https://raw.githubusercontent.com/robusta-dev/kubernetes-demos/main/deployment_image_change/after_image_change.yaml
すると、以下のようにimageが更新されたことに対するSlack通知が来ることを確認できます。
なお、変更はUIからも確認できます。
Robusta UI
RobustaのUIには、上記で紹介したようなPodの状態を確認する以外にも様々な機能があります。
Apps: アプリケーションの情報表示
Deployments、StatefulSets、DaemonSets、Podsを一覧にして表示できます。一覧画面では各クラスタにデプロイされているリソースを統合して確認できます。また、各リソースの詳細画面ではログやyamlなどの情報を確認できます。
Timeline: イベントの表示
クラスタ上で発生したイベントを表示します。各イベントに対して、設定した優先度、設定したアラート、発生時刻等を確認できます。アラート名からアラートの設定情報やアラートが発生したPodのログなども確認できます。
Jobs: Jobの情報表示
クラスタ上のJobを一覧表示します。JobのPodのログやyamlなどの詳細情報を確認できます。
Nodes: Nodeの情報表示
クラスタのNodeの状態を表示します。NodeのステータスやCPUとメモリの使用状況など、様々な情報を確認できます。Node上に割り当てられているPodも確認できます。
Comparison: 各種リソースの比較
クラスタ上にデプロイされているリソースのyaml情報をCluster単位、namespace単位、resource単位などで比較できます。下図ではリソース単位で2つのDeploymentのyamlファイルを比較したときの表示です。異なる部分が一目で分かるようになっています。リソース単位で比較する場合はDeploymentだけでなく、2つのConfigMapの比較などさまざまなリソースを比較でき、設定を確認するのに便利です。
Clusters: クラスタの情報表示
Robustaがインストールされているクラスタの情報を表示します。クラスタにデプロイされているアプリケーションなどがいくつあるか、その中で正常ではないものがいくつあるかなどを簡単に確認できます。また、クラスタのKubernetesのバージョンやrobustaのバージョンなども確認できます。
Alerting: アラート情報の表示、設定
各アラートの設定情報を一覧で確認できます。AlertやSilence状態にしたAlertの状態などが確認できます。各アラートの設定情報を確認できるほか、UI上で設定情報を修正したり、新規にアラートを作成することもできます。
Efficiency: リソースの利用情報
リソースを最適化するための分析情報が表示されます。Podの使用状況データを収集し、MemoryとCPUのLimitやRequestの推奨値を提示してくれます。こちらは第1回で紹介した「KRR」をJobで実行し、情報をスキャンして結果を表示します。
Best Practices: 設定の推奨事項の表示
Kubernetesのリソースと構成に関して、潜在的な問題を提示してくれます。popyeというJobを実行し、情報をスキャンして結果を表示します。Podのリソースリミットに関する指摘など、各Podで設定した方が良い項目などを表示します。UIからでもpopyeのJobを実行できるようになっています。
Plan & Usage: Planの情報表示
現状のRobustaのSaaSで契約した際のPlanを表示します。契約していない場合はFreeと表示されます。また、有料版にアップグレードした際にどの程度の料金がかかりそうかを確認できます。下図では有料版の1Podあたりの金額は0.0008$/1hで、そこから月にかかる予想料金が試算されています。
有料版と無料版の違い
最後に、有料版と無料版の違いを簡単にまとめます。有料版にはPro版とEnterprise版があります。詳細はRobustaの公式サイトを確認してください。
無料版ではRobustaの基本的な機能が提供されます。基本的な機能とは上記で紹介した監視機能やアラート機能、クラスタの状態を確認できるダッシュボード、SlackやTeamsとのインテグレーションがあります。Robustaで保存されているデータの保存期間は12時間となっています。
有料のPro版では無料版で利用できる機能に加えて、データの保存期間が3ヶ月間になります。また、EメールやZoomでサポートを受けられます。料金は1Podあたり0.0008$/1hです。
もう1つのEnterprise版では、Pro版の機能に加えて、セルフホストでの利用やSSOといった機能が提供されます。データの保存期間は2年間です。サポートは専用のSlackチャンネルで受けることができます。料金はカスタマイズに基づいて決定されます。
おわりに
今回は、Kubernetesクラスタの監視と管理自動化を行えるRobustaについて紹介しました。Robustaをインストールすると、豊富な機能を備えた監視基盤を簡単に構築できます。今回で紹介した以外にも様々な機能があるので、ぜひ試してみてください。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- RancherのCatalog機能を詳細に見てみる
- Kubernetesアプリケーションのモニタリングことはじめ
- Kubernetesアプリケーションの快適リリースとGitOps
- HelmfileでKubernetesマニフェストやKustomization、Helm Chartなどで構成されるアプリケーションを効率的に管理する
- Rancherのカスタムカタログの作成
- 認定Kubernetesアプリケーション開発者を目指そう!
- Oracle Cloud Hangout Cafe Season5 #3「Kubernetes のセキュリティ」(2022年3月9日開催)
- CNCFで開発の進むFinOps関連ツールの動向紹介
- Podのリソース割り当ての推奨値を提案するKRR(Kubernetes Resource Recommender)
- Oracle Cloud Hangout Cafe Season7 #1「Kubnernetes 超入門」(2023年6月7日開催)