ArgoCD v2.0のアプデ内容まとめ!自分のプロジェクトに導入しました

4 min read読了の目安(約4100字

ArgoCD v2.0がリリースされたので自分のプロジェクトのArgoCDをアップデートしました!
新機能のまとめと、実際アップデートしてみてどうだったということについて紹介します。

argoprojの公式ブログでも新機能が紹介されています。

https://blog.argoproj.io/argo-cd-v2-0-rc1-is-here-f7d21ff1aa64

導入でハマったところ

Kustomizeを使っていて、yamlファイル内に日本語でコメントアウトを書いてると発生するのですが、ArgoCDがmanifestが読み込めなくなります。
回避策は、日本語を使わないことです。

詳しくはこちらにまとめました。

https://qiita.com/nekoshita_yuki/items/ad9add351c8f2bccc904

新機能

通知機能

argocd-notificationsをインストールすると使えます。

大まかなインストール手順は以下になります。

  • argocd-notificationsのmanifestをapplyする
  • Slackのtokenをsecretに登録
  • ConfigMapでtriggerとtemplateを登録
  • ArgoCDのapplicationにannotationを追記する

詳しくはこちらの記事を参考にしてください。

https://zenn.dev/nekoshita/articles/d6f382e916768d

今まではkubernetesのjobとArgoCDのHookSucceededなどのフックを用いて通知していました。
それらを全て捨てることができたのでだいぶすっきりしました!
また、通知のタイミング、内容、通知に使うツールなど、かなり細かいカスタマイズができるようになっているので、多くの方のユースケースで使えるのではないかと思います。

イメージの自動更新機能

argocd-image-updaterをインストールすると使えます。

大まかなインストール手順は以下になります。

  • argocd-image-updaterのmanifestをapplyする
  • ContainerRegistryへのアクセス権限を付与する
  • ArgoCDのapplicationにannotationを追記する

詳しくはこちらの記事を参考にしてください。

https://zenn.dev/nekoshita/articles/02c1e59a487fb4

僕のプロジェクトでは、kubernetesのリソースは全てArgoCDのApplicationとして管理し、1つのリポジトリに集約しています。そして、各マイクロサービスごとに独立したリポジトリで開発を行います。

元々は、各マイクロサービスのリポジトリでコミットするとCIが起動し、CIの処理の中でArgoCDのApplicationを管理しているリポジトリに対して新しいイメージタグをコミットすることでデプロイしていました。
それが不要になり、イメージのビルドだけでデプロイされるようになったので、デプロイフローがかなりすっきりしました!

しかし、デメリットが2つあります。
1つは、ArgoCDのアプリケーションを管理しているGitリポジトリで、新しいイメージタグに変更するプルリクエストを作成し、それをマージすることでデプロイを管理するという方法はできなくなりました。
もう1つは、ロークバックがうまくできなくなりました。argocd-image-updaterが常に最新のイメージを勝手に更新してしまうからです😢ArgoCDのUI上から行うか、最新のイメージを消してしまうか、など古いバージョンをデプロイするのにし特殊な対応をする必要があるので、そこがネックです😅

ApplicationSet

ApplicationSet Controllerをインストールすると使えます。

ApplicationSetを使うと、Applicationをmanifestをいちいち用意せずに、Gitリポジトリ、ディレクトリ、templateを指定することでApplicationを自動で生成してくれるようになります。
また、複数のクラスタに対してのインストールを管理することもできます。

  • 大量のApplicationを管理している
  • 同じApplicationを複数のクラスタにインストールしたい

という場合に非常に便利な機能だと思います。

各クラスタのアドオンツールの管理に使うユースケースが公式ドキュメントで紹介されていました。
僕のプロジェクトだと、argocd,argo-workflow,ingress,cert-manager,external-sercretをインストールしています。それぞれのアドオンツールにApplicationの定義yamlを用意しているので、ApplicationSetを使えばApplicationの定義yamlを用意する必要がなくなります。

しかし、僕のプロジェクトではApplicationSetの導入はしませんでした。
理由は、シンプルに保ちたかったからです。

使っているクラスタが1つなので、ApplicationSetにより得られるメリットがApplicationの自動生成のみです。Applicationの定義yamlを用意しなくてもよくはなるのはメリットですが、自分以外の開発者がApplciationSetの挙動を理解しないといけないというデメリットがあります。それらを比較した時にデメリットの方が大きいと判断しました。

ArgoCD UIの向上

Pods View

新しくPods Viewという機能が追加されました。
画面右上にボタンが追加されています。

僕のサービスではノード台数とPod数が少なすぎて、全然効力を発揮できないので、argoprojの公式ブログの画像を引用しますが、ノードごとやリソースごとにグルーピングしてPodの状態を確認することができます。

  • リソース単位でグルーピングした場合のPodの状態

  • ノード単位でグルーピングした場合のPodの状態

Log Viewer

ログの表示機能が大幅にリッチになりました。

追加された機能は

  • ページネーション
  • 検索フィルター
  • ストリーミングのON/OFF
  • ダークモード

そして、今までPod1台ずつしか表示できませんでしたが、v2.0からはDeploymentなど親リソースでもLog Viewerがみれるようになり、複数台のPodのログをまとめてみることができるようになっています。

バナー機能

argocd-cm ConfigMapに値を設定することで、バナーを表示できるようになりました。
が、自分は使う予定なかったので試してません😅

その他

削除系のオプションやsync系のオプションが追加されたので、より細かいチューニングができるようになりました。
削除に関しては、子リソースを全て削除してから親リソースを削除しようとするけど、sync中なので子リソースを削除した側から作成しまくることにより、一生削除が完了しない、みたいなこともありましたが、PrunePropagationPolicy=backgroundを使うことでそういったことも発生しなくなりました。

サードパーティーのCRDのヘルスチェックにも追加で対応しました。sealed-secrets, kubernetes-external-secrets, strimzi

最後に

ArgoCDv2.0になり機能がいろいろ増えたのでより便利になったので非常に嬉しいです😊
ArgoCDにはイメージタグを更新する機能がにないからFluxを採用しました、という記事を見かけることがありましたが、その機能がArgoCDに追加されたのは結構インパクトが大きいのではないでしょうか!

自分はArgoCDしか使ったことがないので、Flux v2やPipeCDなど他のGitOps管理ツールと比べて実際のところどうなのか、というのはわからないので、今後機会があれば他のツールも触っていければなと思います。