CI/CDから障害の復旧までハイレベルの運用自動化を実現するKeptnとは
CI/CDをオーケストレーションするツールKeptnは、2020年6月26日にSIG App Deliveryでの検討の上、TOCのスポンサーを得てCNCFのサンドボックスプロジェクトとして認定されたオープンソースソフトウェアだ。今回は、2020年12月にオーストリアのDynatraceが公開した「Introduction to Keptn」という動画から概要を紹介する。
セッションを担当したのは、Rawkodeというサイトを運営するEquinixのエンジニアDavid McKay氏と、DynatraceのエンジニアJurgen Etzlstorfer氏だ。動画そのものもRawkodeのチャネルで公開されているもので、CNCFのWebinarでもなければDynatraceの公式チャネルでもないが、Keptnの概要と公式サイトに記載されているチュートリアルを2回に渡って詳細に解説するもので、合計3時間弱という長い時間でKeptnの機能を一通り紹介する内容となっている。
動画:Introduction to Keptn, Part 1
動画:Introduction to Keptn, Part 2
ちなみにKeptnはそのまま読めば「ケプトン」という発音になると思われるが、動画の中では「キャプテン」という発音で紹介されていた。Kubernetesがギリシャ語の航海長を意味していることから、Kubernetesのエコシステムには海や航海にまつわる名前のものが多く、Keptnもさまざまな船員を束ねるキャプテン(船長)という意味もあることをコメントで紹介している。またKで始まるのもKubernetes関連のソフトウェアに多い特徴だ。
デモはAWSなどのメガサービスプロバイダーではなくEquinixのサービスを使って行われており、それぞれお互い所属する企業のプラットフォーム、サービスを交えて紹介することも可能だったと思われるが、極力、ベンダーニュートラルな解説になっているのは好感が持てる。
クラウドネイティブなアプリケーションライフサイクルを管理運用するツールというのがKeptnのキャッチコピーだ。
このスライドでは「Keptnとは何か?」を解説しているが、「Automates configuration and provides self-service for Monitoring, Delivery, Reliability, Remediation」という右側に書かれている単語が大体の概要を表している。つまり「構成を自動化し、モニタリング、アプリケーションデリバリー、信頼性、修復を提供」するのがKeptnとなる。
これらの機能をさまざまなユースケースに対して選択的にアプリケーションデリバリー、SLO(Service Level Objective、評価基準)に対応したゲーティングサービス、SREの自動化、自動修復などとして実現できるのが、Keptnの特徴である。
ここでは選択的というキーワードがポイントだろう。これらの単語の並びを見ているだけだと、Keptnは新しいCI/CDのツールか運用管理のヘルプデスク、さらにはモニタリングツールであるように認識されてしまいがちだ。
しかしKeptnは、GitHubやJenkins、Argo CD、Concourse、Helm、JMeter、Grafana、Prometheus、Slackなどのツールの上位に位置して、それらをオーケストレーションするコントロールプレーンであると認識するのが正しいだろう。
次のスライドではKeptnを開発した理由として、2020年に実施された調査の結果、「CI/CDのパイプラインのメンテナンスに時間が掛かっていること」「マニュアルによる作業が多いこと」「障害回復のマニュアル工数が多い」ことなどを挙げている。なおこの調査結果の分析では、運用の自動化の尺度として、デベロッパーと運用担当者の数の比率を調べている。ここでは運用担当者1名に対してデベロッパー15名以上の組織を、高度に運用が自動化されている@<b>{エリートユーザー」と呼んでいる。
ちなみにCloud Foundryを開発しているPivotalによれば、Cloud Foundryのユーザーでは「200名のデベロッパーに対して1名の運用担当者」というのがPivotalにおけるエリートユーザーの基準であるという。
参考:ACM Survey, Part 1: How your peers use cloud automation to innovate faster
ここでDynatraceがCloud Foundryをベストプラクティスとして挙げているのは、PaaSにおいて運用担当者が不要になることが理想的であるという発想の現れだろう。
続いては「構成を自動化し、モニタリング、アプリケーションデリバリー、信頼性、修復を提供」するKeptnの機能がどのように使われるか? についての解説で、3枚のスライドに分けられて説明が行われた。
最初は監視の自動化だ。監視とダッシュボードの実装はわかりやすいが、最後の「SLO(Service Level Objective)によるシステムに対するアラートの設定」という部分が目新しい。これは「アプリケーションに設定されたKPIに対して目標を設定して、それが達成されない場合はアクションを起こす」という発想だ。具体例を挙げると「ショッピングカートにアイテムを追加したら○○ms以内にレスポンスを返す」「検索結果を○○ms以内に表示する」などのビジネスサイドの要求に対して、システムが応えられない場合にアラートを出すというものだ。
このスライドではショッピングカートに対するルールを設定し、Prometheus、Grafanaなどを使って管理する例が示されている。
次のユースケースは、Keptnが提供するマルチステージのデプロイメントに関するものだ。Keptnでは、開発環境、ステージング環境、本番環境という3つのステージがデフォルトで設定される。また各ステージにおいて新しいバージョンがどうやってデプロイされるのかも選択できる。現状ではダイレクトかブルーグリーンのどちらかを選択するしかないが、今後はカナリアデプロイメントなどもサポートされるという。Keptnのドキュメントでは「Progressive Delivery」と称されているが、各ステージにクオリティゲート(要求された仕様に適格しているかを判断するゲート)を設定して、それに合格したものだけが次のステージに進めるという仕組みを解説している。
この図はKeptnのドキュメントサイトからの引用だが、開発環境においては機能テストを、ステージング環境ではパフォーマンステストを達成して本番環境に進むという内容を示している。
参考:Declarative Multi-Stage Delivery
サービスの評価のためにSLO(Service Level Objective)とSLI(Service Level Indicator)を使うというのがKeptnの発想だ。SLIで何を評価するのかを設定し、SLOでSLIに対する目標値とそれを超えた時の対応を決めることで、単に観測するだけではなく、アクションを設定することで自動化を進めようという意図を感じる。
3つ目のユースケースは運用の自動化のために修復を行う機能だ。動画のコメントにもあったが、この場合の修復はあくまでも運用でカバーできる修復を意味しており、「ルールを適用したからと言ってソースコードのバグがなくなるわけではない」。つまり性能が劣化したらアプリケーションのPodを複数起動して性能を上げる、不具合を起こした機能をフィーチャーフラグを使ってオフにするという対応を意味している。
この例ではPrometheusのクエリーの結果、性能劣化が発見されたらPodを追加、機能をオフにするという修復のためのアクションが示されている。
ここまでで理解できたのは、Keptnがコントロールプレーンとしてさまざまなツールを連携しマルチステージのデプロイメントを実現し、観測と評価によって自動運転を目指していることだ。
最後にKeptnのエコシステムとして紹介されたのが、次のスライドだ。
デフォルトで連携のベースとなっているのはKubernetes、アプリケーションのライフサイクルはHelm、テストはJMeter、CI/CDはJenkinsとArgoCD、モニタリングにはPrometheusとDynatraceの商用ツール、通知にはSlackなどの外部ツールが利用されている。Keptnのイベント処理にはCloudEvents、ブルーグリーンデプロイメントにはIstio、メッセージ処理にはNATS、データストアはMongoDBというのが現状のKeptnの中身だ。Knativeもサーバーレスとして利用されていると謳われていたが、リソースの要求が高過ぎるということで、現在は外されていると言う。
動画の後半はそれぞれKeptnのチュートリアルを実際に実行してみるという内容となっている。このチュートリアルでは、多くのYAMLファイルを使ってKubernetesの環境にKeptnのモジュールを追加、変更、設定していくようすが紹介されている。GitOpsとして、すべての変更をコマンドラインではなくGitリポジトリーに存在するYAMLファイルを更新するだけでも可能であるという。
またカオスエンジニアリングにLitmus Chaosとの連携も可能であることが解説されていることからもわかるように、クラウドネイティブを強く意識しているのが見てとれる。ただKeptn自体のPodを本番環境などと別に分離して実装できない、Keptn自体のヘルスチェックを行うメトリクスが不十分、マルチクラスターには未対応など、未完成の部分も多いと感じられた。これからの進歩に期待するべきだろう。
CNCFのサンドボックスにあるソフトウェアは、LinkerdやEnvoyのようにシンプルにパーツとしての機能に徹するものが多いが、Keptnのように他のソフトウェアを連携させるハイレベルのコントロールプレーンというコンセプトが受け入れられるのか? 今後注目していきたい。
後半のチュートリアルは以下を参照して欲しい。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- 運用自動化を実現するKeptnの最新バージョン0.8で導入されたカスタムシーケンスとは
- CNCFのサンドボックスプロジェクト、カオスエンジニアリングのLitmus Chaosを紹介
- CloudNative Days Tokyo 2023から、Yahoo! JAPANを支えるKaaS運用の安定化やトイル削減の取り組みを紹介
- CNDT 2022、SLOの自動化についてGoogleのエンジニアが解説
- CNDT 2022、ChatworkのSREがSLO策定にカオスエンジニアリングを使った経験を解説
- Observability Conference 2022、オブザーバビリティから組織、ルールを見直した事例を紹介
- Observability Conference 2022、利用者目線のオブザーバビリティ実装をドコモのSREが解説
- システム障害の検知と原因特定を、予測・因果・生成の3つのAIで自動化─Dynatraceが説くAIOpsの最先端
- サービスメッシュのLinkerd 2.9を紹介。EWMA実装のロードバランサー機能とは
- Cloud Operator Days Tokyo 2021開催、New Relicとドコモのセッションを振り返る