運用自動化を実現するKeptnの最新バージョン0.8で導入されたカスタムシーケンスとは
CI/CDやテスト、さらに障害時の対応までの自動化をオーケストレーションするツールKeptnの最新バージョン、0.8がリリースされた。KeptnはCNCFにホストされているオープンソースプロジェクトであり、2020年6月26日にSIG App Deliveryで検討され、TOCの承認を経てサンドボックスプロジェクトとなっている。今回はKeptnのユーザーグループの動画配信を素材に、0.8での変更点などを紹介する。
Keptnとは
動画:Keptn 0.8 feature highlights and important changes - Keptn User Group
プレゼンターはRawkodeの動画にも登場したKeptnのコミュニティリードJürgen Etzlstorfer氏と、DynatraceのエンジニアでKeptnのDeveloper RelationsであるAndreas Grabner氏だ。
KeptnはCI/CDからテストの自動化、運用の自動化、品質管理、さらに障害時の対応についても自動化を行うハイレベルのツールという位置付けで、CI/CD、テストツール、ライフサイクルマネージメント、クオリティゲーティングなどのソフトウェアを上位からコントロールするツール、というのが大雑把な表現方法と言えるだろう。
このスライドでは「データドリブンデリバリー&オペレーションオートメーション」と書かれているが、ポイントはJenkinsやArgoCD、Helm、GitLab、CircleCI、Tektonなどのツールをコントロールするツールという部分だろう。それらのツールを組み合わせて自動化を行うことで、さまざまなユースケースに利用できるというのがKeptnの特徴だ。
このことを、3つの異なる事例で表したのが次のスライドだ。
会計ソフトを提供するIntuitは、ArgoCD、Gatling、Jenkinsを組み合わせてSLO(Service Level Objectives)をベースにしたクオリティゲートの自動化を実現した。パフォーマンスモニタリング、性能テストをサービスとして提供するドイツのベンチャーTrisconは、NeoLoad、Jenkinsを組み合わせてパフォーマンステストの自動化を実現した。そして臨床試験向けのITサービスを提供するERT、はGitLab、Helm、JMeterと組み合わせてデリバリーの自動化を実現しているという。
Keptn 0.8の紹介
ここからはKeptnの最新バージョン0.8を紹介する内容となった。
0.8での最大の変更点はShipyardという構成管理を行うモジュール(実際にはYAMLファイルによる設定)が0.1.xから0.2.0にバージョンアップしたことで、従来のデベロップメント、ステージング、プロダクションという3つの固定的な段階設定ではなく、カスタマイズできるようになったことだろう。このスライドでは「Very opinionatedからCustomize our opinion」と記載されている。これは、3つの段階を固定的に設定したやり方からユーザー自身がそれぞれの段階を自由に設定できるようになったことを表している。
このスライドの右側の例にあるように、それぞれの段階においてシーケンスという順番を指定できるようになっている。これにより、もっと詳細にそれぞれの段階で必要となる処理やデリバリーの方法を設定可能となっている。opinionatedは日本語では独断と訳される単語だが、Keptnの場合はデベロップメント、ステージング、プロダクションという3つのステージによってアプリケーションのデリバリーが行われるという固定的な設定を、ユーザーが自由にカスタマイズできようになったことで自由度が増したと解釈するべきだろう。
それぞれの段階が実際に起動される部分を詳細に解説したのが次のスライドだ。ここではシーケンスに含まれるタスク、そしてタスクを起動するトリガーを解説している。
ここでは「Trigger sequence delivery in stage Dev」と記述されているが、内容としては「Dev段階におけるデリバリーというシーケンスを起動する」流れが解説されている。デプロイメント、テスト、評価、リリース、承認という開発段階における細かなステップがシーケンスによって記述され、SLI(Service Level Indicator)によって評価され最終的に承認されるという状況を解説している。
ここではStagingという段階において「パフォーマンステストを実施し、結果がOKであればリリースする」という流れだが、最終的にSLIにおいて望む結果が得られなかった場合(例:性能が低い)、デプロイメントをロールバックするという記述がされている。ここのロールバックはKeptnの機能ではなく、Jenkinsなどの下位のツールの仕事となる。またMonacoという記述があるが、これはDynatraceが公開しているオープンソースソフトウェアで「Monitoring as code」の略であるという。
モニタリングを運用側の要件ではなくデベロッパーがコードに組み込むことでシフトレフトする発想を実装したツールと言えるだろう。
ここではトリガーを実行するCLIをコマンドのパラメータとJSONデータを比較して紹介しているが、単に次の段階に進むだけではなく、クオリティゲートを行うためにも使えることが2つのタイプとして紹介されている。
クオリティゲートについてはSLI、SLO(Service Level Objective)の関係を理解する必要があるだろう。以下の図はKeptnのドキュメントサイトのスライドからの引用だが、KPIとなる項目をSLI、それが定量的にどのレベルになったら合格とするか? を設定するのがSLOとなる。KeptnはSLIとSLOを用いて各段階を評価し、次の段階に進むかどうかを決定する。この例ではPrometheusのメトリクスを使ってエラーレートを評価している。
参考:Slides & Logos | keptn | Cloud-native application life-cycle orchestration
ここでのデモはKeptnをCLIから実行し、UIを使い各段階の状況を可視化するという流れだ。
シーケンスとタスク、そしてそれを起動するトリガーに関して細かい解説を行ったスライドが次のスライドになる。
Keptn 0.8では固定的な段階設定からは進化したものの、まだ制限があるとしている。具体的にはステージの追加/削除ができない点だ。一方でシーケンスとタスクの追加/削除は可能であることなども紹介された。これは3つの段階はまだ固定だが、その中を自由に設定できるという意味だ。
またデリバリーの際にDirect、Blue/Green、Canaryなどの方法があるが、それをKeptnではどのように実装しているかを解説した。ただ実際のデプロイメントはKeptnがコントロールするソフトウェア(この例ではHelm)に依存するため、どのツールを用いるのか? は慎重に検討する必要があるだろう。
また最近、多くのツールが指向するマルチクラウド/マルチクラスターにも対応しているという。例として、Kubernetes上に実装されたKeptnからAWS(EKS)、GCP(GKE)、オンプレミスのKeptnとの協調も紹介された。ここではKeptnのコントロールプレーンの他にエグゼキューションプレーンとして各クラスターの上でKeptnを実行する部分を定義していることが特徴的だ。コントロールプレーンの他にデータプレーンが存在するストレージなどとは異なり、自動化のためのコントローラーとしての制御はコントロールプレーン、実行するプロセスをエグゼキューションプレーンと命名したということだろう。
Keptn自体は多くのオープンソースソフトウェアで構成されるツールである。しかし開発元であるDynatraceのサービスと深く連携している点は、ベンダーニュートラルを気にするデベロッパー、運用担当者には気になるところかもしれない。CNCFのサンドボックスプロジェクトとして、今後のガバナンスがどのような方向に向かうのかは、要注目かもしれない。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- CI/CDから障害の復旧までハイレベルの運用自動化を実現するKeptnとは
- CNDT 2022、ChatworkのSREがSLO策定にカオスエンジニアリングを使った経験を解説
- Kubernetesで安全にアプリケーションをデプロイするCDツール“Spinnaker”とは
- CNDO 2021、CI/CDのTektonのロードマップをNTTComのエンジニアが振り返る
- CNDT 2022、SLOの自動化についてGoogleのエンジニアが解説
- Observability Conference 2022、オブザーバビリティから組織、ルールを見直した事例を紹介
- CNCFのサンドボックスプロジェクト、カオスエンジニアリングのLitmus Chaosを紹介
- Observability Conference 2022、利用者目線のオブザーバビリティ実装をドコモのSREが解説
- アライドテレシスがテスト環境をサンドボックス化するTokalabsを発表
- Cloud Operator Days Tokyo 2021開催、New Relicとドコモのセッションを振り返る