ArgoCDとは?
ArgoCDはGitOpsによる継続的なデプロイメント(continuous delivery)を実現するためのkubernetes向けのツールです。
いくつか単語が出てきましたね。
継続的なデプロイメント(CD)
アプリケーションのリリースをより早くするために使われる概念です。
すごい簡単にいうと変更をしたらすぐに世の中に公開するために「アプリケーションのデプロイを自動化」しましょうというものになります。
GitOpsとは
GitOpsは「Gitを使って運用(オペレーション)を管理する手法」です。
kubernetes上で動作するアプリケーションの運用がターゲットとなっており、アプリケーションのバージョン管理や、デプロイ方法の管理をGit上でやってしまおうというものになります。
kubernetesを操作する場合はkubectl
というコマンドを使ったり、APIを叩いたりなど自由でした。しかし自由な反面
- 何がどうなっているのか?をトレースし辛い
- 環境ごとの差分が出てしまった
- 元に戻しづらい
いったことが発生しました。
そこででてきたのがすべてをGitリポジトリで管理しようという発想です。
ということで上で紹介した
ArgoCDはGitOpsによる継続的なデプロイメント(Contenius Derivery)を実現するためのkubernetes向けのツールです。
は「kubentes上で動かすアプリケーションを自動でデプロイするためにGitを使おう」そして「その管理にArgoCDがいいよ」と言っています。
具体的にどのような動きをするのか?
こちらはArgoCDで掲載されている図です。
少し簡略化してみます。するとこんな感じ。
- 開発者がコードをGitにPushします
- ArgoCDがそれを検知します
- ArgoCDが検知した内容をkubernetesに適用します
このようにすることでArgoCDは「Gitリポジトリ=kubernetes」の環境を維持しています。
※ArgoCDのデフォルトの動作ではArgoCDがGitリポジトリを定期的にポーリングしていますが、設定変更でGitリポジトリ→ArgoCDへのWebhookも可能です
ArgoCDによって実現できること
抽象的な言い方をすると以下の通りです。
- アプリケーションの定義や設定、環境を宣言的にできバージョンコントロールができる
- アプリケーションのデプロイやライフサイクルマネジメントの自動化や、簡単に認識できるようになる
具体的にいうとGitを使いそれと連動することで、Gitさえ正しくコントロールしておけば「Gitの操作のみ」でアプリケーションをあるべき状態にすることができるのです。
やってみよう
例えば以下のようなコードがあったとします。
print "hello world version.1"
バージョンアップしてみる
これをバージョンアップしたければ、以下のコードをGitにPushすれば勝手にArgoCDが検知して変更してくれます。
print "hello world version.2"
git add hello.py git commit -m "version2" hello.py git push
ロールバックしてみる
やっぱり元に戻したいとなったら以下のコマンドでなかったことにすれば
git revert [先ほどのcommit ID] git push
こちらに戻り、kubernetes上のアプリもArgoCDによって元に戻されます。
print "hello world version.1"
ArgoCDのアーキテクチャー
ArgoCDはkubernetes上で動作するコントローラーで、稼働しているアプリのモニタリングとGitリポジトリとの比較を常に行なっています。
状態が異なった場合はモニタリング対象のアプリがOutofSync
というモードになり、手動または自動で同期を行うことができます。
ArgoCDのコンポーネント
ArgoCDは3つのコンポーネントからなります。
役割 | 働き |
---|---|
API サーバ | API(gRPC/REST受付)の公開を行う |
リポジトリサーバ | アプリのmanifestを管理するGitリポジトリのキャッシュを保持する内部向けサーバ |
アプリケーションコントローラー | kubernetesのコントローラーで稼働しているアプリのモニタリングとGitリポジトリとの比較を行なっている |
API サーバ
- アプリケーションの管理やステータスのレポーティング
- アプリケーションへの運用(Syncやロールバックなど)を実行
- 各種認証情報の管理
- RBACの執行
- Git webhook eventsのリスナー兼フォワーダー
リポジトリサーバ
- リポジトリの管理を行う
アプリケーションコントローラー
- kubernetesのコントローラーで稼働しているアプリのモニタリングとGitリポジトリとの比較を行なう
- 変更を検知したらユーザがライフサイクルに登録したイベントを呼び出す責任がある
サポート対象のマニュフェスト管理
- kustomize アプリ
- helm チャート
- ksonnet アプリ
- jsonnet ファイル
- 平文の YAML/json manifests
- 構成管理プラグインとして構成されたカスタム構成管理ツール
実際に使ってみよう
こちらの記事で紹介していますのでご覧ください。