【Argo CD】迅速容易にデリバリーしたい!
こんにちは、Magic Moment の suganuma です。
最近、SRE 活動の一環として、トイルの撲滅に力を入れている Magic Moment Tech チームですが、今回は、その活動の一つとして、“誰でも迅速容易にデリバリーできる“ をテーマに、Argo CD を使った継続的デリバリーを実現したので紹介します。
想定読者
- Kubernetes、CI/CD について多少の理解がある人
- 継続的デリバリーに興味がある人
取り組みの背景
デプロイ作業の属人化を排除したかった。
Cloud Build を活用し、継続的インテグレーションのパイプラインは構成されていたものの、デプロイは kubectl を使って手動で行っていた。
デプロイ作業に当たる部分は、Kubernetes の知識が必要になるので、作業者が限定されていた。
Argo CD って何?
Argo CD は、デプロイメントに特化した Kubernetes 用の継続的デリバリーツールです。
クラスタ上のリソースの状態と Git リポジトリ上のマニフェストを監視し、差分を検出すると、自動(もしくは手動)で同期できます。
Web UI 機能も搭載しているため、GUI でアプリケーションの登録や環境への同期であったり、アプリケーションの状態も可視化できます。
インストール手順については、公式を参考にしていただければと思います。
アーキテクチャ
※ 公式から引用
Application Controller がクラスタ上のリソースを監視し、Repository Server が保持するマニフェストと比較することで、差分を検出しているようです。
クラスタ上のリソースやアプリケーションマニフェストの指定は、カスタムリソース(Application)を作成する事で実現します。
Application はマイクロサービスにおけるアプリケーション単位で作成します。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: app-01
spec:
destination:
namespace: production
server: https://kubernetes.default.svc
project: default
source:
path: kubernetes/app-01/overlay/production
repoURL: https://github.com/magic-moment/manifest-repo
targetRevision: develop
syncPolicy:
automated:
prune: true
selfHeal: true
Web UI
一覧のイメージ
緑色が同期済、黄色が同期していない状態(クラスタ上のリソースと Git リポジトリ上のマニフェストに差分がある状態)です。直感的で分かりやすいです。
同期する場合は、「Sync」ボタンをポチッと押して完了です。
詳細のイメージ
各リソースの状態やマニフェスト、ログも確認できます。
GUI も分かりやすく、操作も簡単なので、インフラ周りが苦手な方や普段、CLI を使わない方にとっても使いやすいツールだと思います。
Magic Moment での活用
ワークフロー
マニフェストの更新
イメージタグの書き換えとして、Cloud Build のステップに yq tag update
を入れています。
これにより、Argo CD が監視するクラスタ上のリソースと Git リポジトリ上のマニフェストに差分が生じ、OutOfSync(手動での同期待ち)になります。
リリースの時間になったら、「Sync」ボタンをポチッと押して環境への反映完了です。
auto PR
Magic Moment では GitOps を採用しています。リリースのトレーサビリティやロールバックの用途として、意図的にプルリクエストを作成しています。
Argo CD 自体が GitOps ツールでもあります。
Argo CD の同期ポリシー
環境によって、自動/手動を使い分けています。
検証環境は自動、ステージング・本番環境は手動での同期。
ステージング・本番環境については、アプリケーションの過不足等を確認した上で、意図的に手動で同期しています。
成果
- 属人化の排除。Tech チーム全員がリリース作業に携われるようになった
- 隔週リリース → 毎週リリース。顧客へ迅速な価値提供ができるようになった
最後に
「Argo CD を使った継続的デリバリーの実現」について紹介しました。
価値を継続的に迅速にデリバリーするために、自動化による日々の運用コストを減らすことは大事だと思います。
もちろん、何でもかんでも自動化すれば良いという訳ではありません。本質的な部分を見極め、その本質的な部分に集中するための自動化であるべきなのかなと思っています。
これからも、本質的な部分に集中できる環境を作っていきたいと思います!
最後に、弊社 Magic Moment では、フロントエンド・バックエンドにかかわらず全方位的にエンジニアを募集中です!Magic Momentに少しでも興味を持っていただけたら是非エントリーください!
8/30にはFindy様主催のイベントにMagic Momentから石田さんが登壇されます!
よろしければぜひご視聴ください!
さらに、こちらのイベントも8/29開催予定です!こちらはオンラインイベントです。Magic Momentの開発がどんなものか興味を持っていただいた方は是非ご参加ください!
Discussion