IBM Cloud Blog

第23回 『ArgoCDで実現するGitOpsによるデプロイ管理』

記事をシェアする:

こんにちは。IBM Client EngineeringでTechnology Engineerしている米坂と申します。
今回はCI/CDの重要性とGitOpsがどのようにその問題を解決するのかをお話しさせて頂きます。

現代のクラウドネイティブなアプリケーションは、迅速なデプロイと運用管理が必要不可欠です。GitOpsはこの問題を解決するために登場した手法の一つであり、ArgoCDはGitOpsに適したツールです。
本記事では、ArgoCDを使用したGitOpsの基本的なフローを解説し、自動化されたデプロイメントのメリットや具体的な手順をお話しします。

私も以前はJenkinsによる運用を行なっていましたが、ArgoCDを導入することによりGitOpsの原則に従う必要がありました。これによりインフラやアプリケーションの管理において、Gitが中心となり変更の追跡や管理が容易になりました。
チーム内でもGitOpsの原則を理解し実践することで、より効果的な運用を実現できることに気づくことができました。

CI/CDを検討している方やGitOpsについて知りたい方のお役に立てますと幸いです。

CI/CDの重要性

CI/CDは、Continuous Integration(継続的インテグレーション)とContinuous Delivery(継続的デリバリー)の略であり、ソフトウェア開発プロセスの自動化を目的とした手法です。
何故このような手法が必要になってきたのかは以下のように考えられます。

  1. ソフトウェア開発プロセスの効率化
    CI/CDを導入することで、コード品質の担保や自動テスト、自動デプロイを行うことができます。
    これにより開発者はスピーディーかつ品質の高いコードを提供することができます。
  2. リスクの低減
    自動テストによりバグを早期発見し修正することができます。
    また、デプロイに必要な手順が自動化されているため、人為的なミスを低減することができます。
    これにより本番環境での障害発生リスクを低減することができます。
  3. ガバナンスの向上
    ビルド、テスト、デプロイの全てのプロセスが自動化されるため、開発プロセスが標準化されます。
    これにより開発の進捗や品質を管理することができます。
  4. システムの迅速な対応
    コード変更が即座に本番環境に反映されます。
    このため、システムの変更に迅速に対応することができます。
  5. 開発と運用の連携強化
    CI/CDは開発と運用の連携を強化するために開発されたプロセスです。
    運用チームは自動化されたビルドやテスト、デプロイ手順を確認することができ、開発チームとのコミュニケーションもよりスムーズになります。

これらの理由から、現代のソフトウェア開発においてCI/CDは必要不可欠なプロセスとなっています。

GitOpstとは?

CI/CDの重要性について理解したところで、まずはGitOpsについて説明したいと思います。
GitOpsとはWeaveworks社がブログで発表したCDの手法です。
参考:https://www.weave.works/blog/gitops-operations-by-pull-request

要約すると、Gitを信頼できる唯一の情報源として使用することで、バージョン管理、ペアレビューを行いデプロイやロールバックをCLIを利用する事なくGitを介して行う手法となっております。

もう少し噛み砕きますと「インフラとアプリケーションの両方を含めたシステム全体のコードをGitを使って管理する」この手法がGitOpsの本質と言えます。
ここで言っているインフラとはKubernetes上であることが前提とされています。

次の様なライフサイクルでアプリケーションと同様にインフラを管理していきます。

  1. Gitへの変更をコミット
  2. Pull Requestを作成
  3. レビュアーがPull Requestを承認
  4. 承認された変更を適用

また、GitOpsを採用することで以下の様なメリットがあります。

  1. 生産性の向上
    Gitの操作によってインフラを管理するため、アプリケーション開発と同様の変更プロセスが適用できます。
    手動実行が必要なくなるため、オペミスを排除することができます。
  2. 可視性の向上
    Gitを見るだけで現在のインフラの構成が確認できます。
    誰が・いつ・どの様な変更を加えたのかがGitの履歴によりわかりやすくなります。
  3. セキュリティリスクの低減
    CI/CDツールを用いたデプロイは基本的にデプロイするためクラスタの認証情報を外部に公開しなければならないため、セキュリティ上好ましくない場合もあります。CIとCDの機能が分離できていないのでこの様な仕組みにする必要がありました。(いわゆるCIOps)
    しかしGitOpsはCIとCDを分離して管理するため認証情報を外部に公開することなくデプロイが行えるため、セキュリティのリスクを低減することができると考えれています。

GitOpsのフロー

以下はGitOpsのフローになります。
この図からもわかる通り、CIもC DもGit上でコードの管理はしていますが、CIとCDの機能は分離されています。
この分離されていることが従来のCIOpsと大きく異なる点だと考えています。

なぜArgoCDなのか?

GitOpsのツールでよく挙げられるのが、ArgoCDとFluxになります。
この二つツールの特徴を元に比較していきます。

ArgoCDの特徴

  • CNCFのインキュベーションプロジェクト
  • マルチクラスターに対応
  • KustomizeやHelmといったパッケージングツールとの連携機能を標準で備えている
  • リッチなGUIが提供されおり、閲覧だけでなく、登録/変更などの操作が可能
  • クラスター内のリソースとGit上の設定ファイルの差分を検出し同期
  • ユーザー管理方式がローカルユーザーかSSO統合 (OIDC、OAuth2、LDAP、GitHub、Gitlab等)を選択可能

Fluxの特徴

  • CNCFのインキュベーションプロジェクト
  • マルチクラスターに対応
  • KustomizeやHelmといったパッケージングツールとの連携機能を標準で備えている
  • シンプルで軽量(GUIすらない)
  • Gitのハッシュ値の差分を検出し同期
  • ユーザー管理機能を有していないので管理対象のnamespace毎にサービスアカウントを作成し権限を付与 する方式

上記の事から大きな機能差がないもののWeb UIによりGitとクラスタの同期状況を視覚的に把握が可能で、リリース履歴や差分チェックなどの多彩な機能が搭載されておりkubectlコマンドを理解していなくてもクラスタ運用できる点がArgoCDの大きなメリットと言えるのではないでしょうか。

参考:ArgoCDのダッシュボード

参考:クラスタのリソース状態

ArgoCDのコアコンセプト

ArgoCDはGitOpsを実現するための概念、リソース、コンポーネントで実現されています。

上図を参考に解説していきます。

概念

  • Live State
    • 実際のクラスターの状態
  • Target State
    • Git上に定義されている設定ファイルの状態

リソース

  • AppProject
    • Applicationを管理するためのCRD
    • 複数のApplicationを論理的にグループ化
    • 所属するApplicationに対し、対象となるGitリポジトリ、デプロイ先、操作可能なKubernetesリソースなどの制御
    • GUIまたはYAMLファイルを作成しCLIを使用して、作成・更新・削除が可能
  • Application
    • デプロイ設定を制御するためのCRD
    • 必ずいずれかのAppProjectに所属
    • デプロイするために参照するGitリポジトリ、デプロイ先のクラスター及びnamespace、自動同期の有効化などを設定
    • GUIまたはYAMLファイルを作成しCLIを使用して、作成・更新・削除が可能

コンポーネント

  • API Server
    • gRPC/REST APIを受信
    • Applicationのステータス管理
    • Application操作の呼び出し
    • Git / Kubernetesクラスターの認証情報の管理
  • Repository Server
    • /tmp配下にGitリポジトリをクローン
    • ローカルキャッシュを維持
    • Gitリポジトリ、リビジョン、設定ファイルのパスから設定ファイルをApplication Controllerに返却
  • Application Controller
    • Kubernetes Controllerとして動作
    • Live StateとTarget Stateの比較
    • Repository Serverから設定ファイルを受け取りクラスターに反映
    • Repository Serverから設定ファイルを受け取りクラスターに反映

CI/CDの重要性

GitOpsによるデプロイ管理の自動化はアプリケーション開発や運用において効率化と信頼性の向上をもたらします。ArgoCDを利用したGitOpsの手法は、開発者や運用チームがより効率的に作業を行い、アプリケーションの品質やスピードを向上させます。
GitOpsは比較的新しい開発手法であり、普及率はまだ低いと言えますが、最近ではより多くの企業や組織がGitOpsを採用し始め情報も増えてきています。
特にコンテナ技術やマイクロサービスアーキテクチャが普及する中でGitOpsの需要は増加している事から、今後ますます普及することが期待できます。
今回の記事がGitOpsやArgoCDの導入を検討している方々にとって、少しでも参考になれば幸いです。

米坂 武士
日本IBM株式会社 IBM Client Engineering

複数企業でアプリ開発に従事しながら、インフラのコード化に興味を持ちインフラエンジニアとして経験を積んできました。
昨今はアプリケーションのコンテナ化やCI/CDの構築に携わり2021年にIBMにジョインしました。

More IBM Cloud Blog stories

【NTTコミュニケーションズ様との共同実証報告】AI時代のネットワーク運用高度化に向けた取り組み

IBM Cloud Blog, オートメーション

システム障害と聞くだけで緊張してしまうのは私だけでしょうか?心理的にも体力的にも負荷が高いこの仕事をAIによって、なんとか楽にならないのか、と誰しもが思っています。そこで、IBMのAIによる運用支援ソリューションであるA ...続きを読む


IBMテクノロジーをフル活用しサービス競争力を大幅に向上させた、証券会社向けサービス「KICSクラウド」とは?

IBM Cloud Blog, IBM Partner Ecosystem

光世証券株式会社(以下、光世証券)は、証券業務を行う事業者向けに、証券基幹業務システムをクラウドで利用できる“KICS クラウド”の提供を開始することを発表しました。KICSクラウドはIBM Cloud環境で稼働している ...続きを読む


700社が効果を実感!コンテンツマネジメントシステム(CMS)を用いたWebサイト運用における課題への最適なアプローチ

IBM Cloud Blog, IBM Partner Ecosystem, デジタル変革(DX)

近年、PC、スマートフォン、タブレット、スマートウォッチなど、デバイスの多様化により、それぞれのデバイスに適した形で情報を配信することや、ユーザー毎に最適な情報を出し分けた配信というものが求められ、Webサイトの管理や更 ...続きを読む