はじめに
「ArgoCDって結局なんのためのツールなんだろう?」
自分が初めてArgoCDの名前を聞いてさっくりネットで調べた時に思ったことは上の疑問でした。自分にとってはCDツールならGithub Actionsでいいじゃないかと思っていたからです。
実際にGithub Actionsでコードをビルドしてテストを実行、Kubernetesにデプロイすることは可能です。だからこそなんで専用ツールが必要なのかわからなかった自分なりに調べたことをここにまとめていこうと思います。
Github Actionsでできること
前述したようにGithub Actionsはコードのビルドからテスト、デプロイまでを自動化できるCI/CDプラットフォームです。具体的には以下のようなことができます。
- 柔軟なワークフロー定義
- Github Actionsではyamlファイルでワークフローを定義でき、pushやpull requestをトリガーにイベントを実行できる
- 簡単に組み込める豊富なアクション
- github marketplaceに既存のアクションがあり、それを参考にして簡単に処理を組み込める
- 環境変数やシークレットを使って開発と本番など環境分岐したデプロイアクションなども可能
これだけ聞くと単純なデプロイ程度はGithub Actionsで事足りそうな気がしてきます。
しかし、実際の業務でGithub Actionsのみを使用すると色々足りない部分が生じてくるのです。
- 環境の状態把握
Github Actionsではデプロイの実行結果等は分かりますが、実際にアプリケーションが動いているか、今どうなっているかをモニタリングできません。これではプロダクトの監視に支障が出てしまいます。また、Github Actionsを介さずクラスタに変更を加えたことを検知できず、これはアプリケーションの動作だけではなくセキュリティ上の問題にもつながってしまいます。 - クラスタ間の一元管理
実際の業務上では一つではなく複数のクラスタを管理することもあります。Github Actionsではそれぞれのクラスタに関して個別にワークフローを実行する必要があり、管理が難しくなります。
Argo CDでできること
Argo CDは上記の問題点を補えます。Argo CDはGithub Actionsでは対応が難しい継続的な状態管理、環境の一貫性という課題に特化したソリューションを提供できます。
-
環境の一貫性
単一のArgo CDインスタンスから複数のクラスタを一元的に管理できます。クラスタごとの設定はGit上でディレクトリを分けることで管理することができます。 -
継続的な状態管理
Argo CDは継続的にクラスタの状態を監視し、Gitで定義された最新状態との差分を検知します。また、例えばkubectl edit
等で無理やり書き換える変更があった場合にも検知を行います。そしてその内容がWeb上で視覚的に表示されるため、アプリケーションの動作確認のコストが軽くなります。
また、デプロイの進行状況をリアルタイムで確認することができ、問題が発生した場合の自動ロールバック機能も存在します。
ただ、Argo CDはあくまでCDに特化したツールであり、CIプロセスに関してはGithub Actionsで行うしかありません。
結論
正直個人開発レベルならGithub Actionsで事足りるのかなと自分は思っています。しかし、企業規模になり保守運用等を行う場合にはArgo CDを導入することで運用の効率化とプロダクトの質の向上に貢献できるのです。運用上の安全性を担保するにはGithub Actionsだけでは役不足です。
あくまでどちらか一つではなく、Github ActionsとArgo CDは得意分野が異なる補完的なツールと言えるのではないかと思います。これらを組み合わせて安全なCI/CDパイプラインを作るのが今のクラウドネイティブ環境に向いているのではないかと自分は思っています。