はじめに
こんにちは、サイオステクノロジーの小野です。SIOS Tech Labアドベントカレンダー12日目の投稿です。
「SIOS社員が一年で学んだこと」がアドベントカレンダーのテーマですが、私はこの一年間〇〇Opsといった様々な開発・運用の効率を上げる仕組みを学んできました。
例えば、
OpenShift AIによってAIモデル開発の効率化を行うMLOps
GitLabのCI/CDパイプラインとGateKeeperを組み合わせてセキュリティが高い状態で自動デプロイを行うDevSecOps
そして現在はRancher FleetのHelmOpsについて学んでいます。
今回はKubernetesクラスター環境へのアプリケーション自動デプロイ(CD)手段として、HelmOpsについて解説します。
ちなみにDevOpsから派生したこれらの〇〇Opsという名前が付く仕組みをまとめてxOpsと呼ぶそうです。
GitOps
HelmOpsの説明をする前にアプリケーションの自動デプロイ手段として一般的なGitOpsについて解説します。
GitOpsとはGitリポジトリを唯一の信頼できる情報源(Single Source of Truth)として扱います。要するに、Gitリポジトリ内のソースコードの状態とデプロイされているアプリケーションの状態を自動的に同期する仕組みです。
したがって、Gitリポジトリの更新をするだけで、アプリケーションとそれがデプロイされているインフラ環境を自動的に更新することができます。
さらにGitでインフラ環境を管理できるので、インフラ環境のバージョン管理やロールバックがしやすいです。
例としてKubernetesクラスターにデプロイされているアプリケーションをGitOpsによって自動的に更新する流れについて解説します。
GitOpsフローの流れ(アプリケーションの更新の例)

CIプロセス
- アプリ開発者がソースコードを更新し、アプリ用リポジトリにPushして、ブランチをマージする。
- CIツールがアプリ用リポジトリの更新を検出すると、アプリケーションのコンテナイメージをビルドして、コンテナレジストリに保存する。
- CIツールが新しいコンテナイメージを参照するようにHelmチャートをパッケージ化する。その後、このHelmチャートをHelmレジストリに保存する。
CDプロセス
- アプリ開発者が新しいHelmチャートを利用するようにアプリケーションのマニフェストファイルを更新し、設定用リポジトリにPushして、ブランチをマージする。
- CDツールがGitリポジトリの更新を検出すると、設定用Gitリポジトリ内の設定ファイルを参照して、アプリケーションとそれがデプロイされているKubernetesクラスター環境を設定ファイルと同期させる
- Kubernetesクラスターが新しいHelmチャートと新しいコンテナイメージを利用してアプリケーションを更新する
この説明ではCIとCDの区別をわかりやすくするために、あえてCDプロセスの設定用リポジトリの更新を開発者が行うようにしましたが、CIツールがコンテナイメージとHelmチャートの更新をした後、自動的に設定用リポジトリを更新することで、CIからCDまで自動化する場合もあります。
HelmOps
HelmOpsとはHelmレジストリを唯一の信頼できる情報源(Single Source of Truth)として扱います。要するに、Helmレジストリ内のチャートファイルの状態とデプロイされているアプリケーションの状態を自動的に同期する仕組みです。
GitOpsとの差異はGitレジストリと同期するかHelmレジストリと同期するかの違いです。
HelmOpsも同様に、例としてKubernetesクラスターにデプロイされているアプリケーションをHelmOpsによって自動的に更新する流れについて解説します。
HelmOpsフローの流れ(アプリケーションの更新の例)

CIプロセス
- アプリ開発者がソースコードを更新し、アプリ用リポジトリにPushして、ブランチをマージする。
- CIツールがアプリ用リポジトリの更新を検出すると、アプリケーションのコンテナイメージをビルドして、コンテナレジストリに保存する。
- CIツールが新しいコンテナイメージを参照するようにHelmチャートをパッケージ化する。その後、このHelmチャートをHelmレジストリに保存する。
CDプロセス
- HelmOpsツールがHelmレジストリの更新を検出すると、Helmレジストリ内のHelmチャートを参照してアプリケーションとそれがデプロイされているKubernetesクラスター環境を設定ファイルとHelmチャートと同期させる
- Kubernetesクラスターが新しいHelmチャートと新しいコンテナイメージを利用してアプリケーションを更新する
HelmOpsはCDプロセスでGitを介さずにアプリケーションの更新を行うことができるので、シンプルな構成にできます。ただし、設定用Gitリポジトリを利用しない都合上、環境ごとにカスタマイズしてデプロイすることが難しくなります。
終わりに
HelmOpsの仕組みについて解説しました。カスタマイズとその管理がしやすいGitOpsとシンプルな構成のHelmOpsについてはうまく使い分けることで、さらなる運用効率を上げることができるのではないかと思います。

