手作業によるシステム運用を自動化するトレンド

近年、クラウドやコンテナなどの技術が進展したことでインフラをコード化して扱うことも可能となり、IaC(Infrastructure as Code)と呼ばれています。

これを活用し、システム運用を自動化する動きが活発になってきました。システムの監視や運用保守作業を行う「システム運用者(Operator)」は、環境構築手順書などを基にさまざまな作業を実施する職種として知られていますが、今IT転職市場では、これをさらに発展させた仕事として、システム運用作業をコード化する「SRE(Site Reliability Engineer)」が人気職種の一つとなっています。

Kubernetesにおけるシステム運用(標準機能)

Kubernetesは、システム運用として実現したい内容をマニフェストで宣言的に記述し、以下のようなシステム運用作業はKubernetesの標準機能により自動実行されます。

  • 障害時の復旧作業:ReplicaSetで指定されたPod数を維持するセルフヒーリング
  • アプリケーションの入替作業:Deploymentで指定されたソフトウェアのバージョンにシステム無停止で差し替えるローリングアップデート
  • 負荷量に応じた増設作業:HorizontalPodAutoscalerで定義された監視条件に基づくスケールアウト

上記を下支えしている自動実行の仕組みである「Reconciliation Loop」は、「Observve」→「Analyze」→「Act」の3ステップを回すことにより、システムの状態に応じた運用処理を自動実行します。詳細については本連載の第10回をご参照ください。

イメージ

Kubernetes Operatorとは

前述のような、Kubernetes標準機能だけでは、本番運用に求められるシステム要件を全て満たせるとは限りません。

「Kubernetes Operator」は、Kubernetesの高い拡張性を活かし、システム固有の運用作業を自動化するものです。実はこれまでの連載で紹介した「Tekton」などもKubernetes Operatorの一つです。

Kubernetes OperatorはカスタムコントローラーとCRD(Custom Resource Definition)の組み合わせで実現されます。ちなみに、CRDはKubernetesのv1.16でGA(v1.0)となりました。

        
  コントローラ リソース リソース定義
Kubernetes標準 Kubernetes標準のコントローラー:Deployment Controllerなど 標準リソース:Pod/ReplicaSet/Deploymentなど 標準リソースの定義
Kubernetes Operator カスタム コントローラー CR(Custom Resource):個別のプロジェクト用にカスタマイズされたリソース CRD(Custom Resource Definition):CRを定義するリソース

Kubernetes界隈のコミュニティでは、Kubernetes Operatorを活用した先進的な事例が多く見られます。

OperatorHub.io

Kubernetes Operatorを使ってみたい方は、「OperatorHub.io」と呼ばれるKubernetes Operatorのパブリックレジストリを活用すると良いでしょう。2021年7月4日時点で192件のKubernetes Operatorが登録されており、5つの成熟度(Capability Level)別で見ると以下の登録件数(括弧内の数字)となっています。成熟度の高いものを試してみると良いでしょう。

  • Basic Install(89)
  • Seamless Upgrade(44)
  • Full Lifecycle(31)
  • Deep Insights(19)
  • Auto Pilot(9)

Kubernetes Operatorの開発

Kubernetes Operatorは具体的にどうやって開発すれば良いのでしょうか? Webアプリケーション開発用にGin(Go言語)やSpring(Java)などのフレームワークがあるのと同様に、Kubernetes Operator開発用には「Operator Framework」や「Kubebuilder」といったフレームワークがあります。

Operator Frameworkの構成要素は以下の3点です。

  • Operator SDK:Operator開発のツールキットで、ベース(scaffold)となるKubernetes Operatorのコードを自動生成できます。
  • Operator Lifecycle Manager:開発したKubernetes OperatorのK8sクラスタへのデプロイや管理を行います。
  • Operator Metering:アプリケーションの使用状況を測定します。

2020年7月10日に、Operator SDKのv0.19.0がリリースされ、Kubebuilderのインタフェースに揃えられました。利用方法が大きく異なるので、リリース日より古い記事を参照すると動作しないケースがあるため注意しましょう(例:operator-sdkコマンドのnewオプションが無くなり、代わりにinitオプションを利用するように変更)。

なお、もしOperator Frameworkなどのフレームワークを使わず、自由度の高い機能実装がしたい場合は、やや学習コストは高いですが、「Client-go」と「code-generator」の活用を検討してみても良いでしょう。

* * *

パプリッククラウドの各種マネージドサービス、DevOpsやSREやIaCなど、昨今のシステム運用の自動化はIT業界の一つのトレンドとなっています。Kubernetes Operatorを活用することで、システム運用の自動化は更に加速していくことでしょう。さすがに、システム運用者が一切不要になるところまではまだ来ていませんが、基盤人材やシステム運用人材の在り方が少しずつ変わっていくことは間違いないのではないでしょうか。

著者紹介


正野 勇嗣 (SHONO Yuji ) - NTTデータ 部長

2011年まで開発自動化技術のR&Dに従事。その後、開発プロジェクト支援やトラブルシューティング等に主戦場を移す。「ソースコード自動生成」に加えて、JenkinsやMaven等の「ビルド自動化」、JsTestDriverやSelenium等の「テスト自動化」を扱うようになり、多様化する開発自動化技術動向に興味。

最近は第四の自動化であるInfrastructure as Code等の「基盤自動化」の魅力に惹かれている。開発自動化技術に関する雑誌・記事執筆も行う。3児のパパ。