コンテンツにスキップ

ArgoCD@CNCF

はじめに

本サイトにつきまして、以下をご認識のほど宜しくお願いいたします。


01. ArgoCDの仕組み

アーキテクチャ

ArgoCDは、argocd-server、repo-server、redis-server、dex-server、application-controller、といったコンポーネントから構成される。

永続化するためのDBを持っておらず、ステートレスである。

argocd_architecture


02. repo-server

repo-serverとは


03. application-controller

application-controllerとは


GitOpsエンジン


他のコンポーネントとの通信


04. redis-server


05. dex-server

dex-serverとは


06. argocd-server (argocd-apiserver)

argocd-serverとは


他のコンポーネントとの通信


ログ

{
  "grpc.method": "Watch",
  "grpc.request.claims": "<アカウントの情報>",
  "grpc.request.content": {"name": "foo"},
  "grpc.service": "application.ApplicationService",
  "grpc.start_time": "2023-01-27T07:08:59Z",
  "level": "info",
  "msg": "...",
  "span.kind": "server",
  "system": "grpc",
  "time": "2023-01-27T07:08:59Z",
}


拡張機能

▼ ArgoRolloutの場合

ArgoRolloutをダッシュボードで操作する場合、執筆時点 (2023/05/24) で拡張機能としてインストールする必要がある。


07. image-updater

image-updaterとは

image-updaterを採用しない場合、GitOpsのステップの中で、マニフェストリポジトリ上にプルリクエストを作成するステップがある。

gitops_without-image-updater

一方で、image-updaterを採用すると、GitOpsのステップの中で、マニフェストリポジトリ上にプルリクエストを作成するステップを省略できる。

gitops_with-image-updater

image-updaterは、アプリリポジトリからイメージリポジトリにコンテナイメージをプッシュした後、イメージリポジトリの更新を検知し、Cluster内のマニフェストを自動的に書き換える。

その後、マニフェストリポジトリに書き換えをコミットする。


デバッグ

repo-serverコンテナにはkubectl execコマンドでは接続できないが、直接的にコマンドを送信することは可能である。

そのため、デバッグが可能である。

*例*

プラグインとして使用するためにインストールしたSOPSのバージョンを確認する。

$ kubectl -it exec foo-argocd-repo-server \
    -c repo-server \
    -n foo \
    -- bash -c "sops --version"

*例*

/tmp/_argocd-repo/<URLに基づくUUID>ディレクトリ配下で、helm templateコマンドを使用してSecretの値を確認する。

この時、nlコマンドを使用すると、作成したマニフェストの行数を表示できる。

$ kubectl -it exec foo-argocd-repo-server \
    -c repo-server \
    -n foo \
    -- bash -c "cd /tmp/_argocd-repo/<URLに基づくUUID> && helm template . -f foo-values.yaml | nl"


08. ユースケース

共通

▼ 基本構成

指定したブランチのコードの状態をポーリングする。

プッシュによってコードが変更された場合、Kubernetesの状態をこれにSyncする。

argocd

▼ 検証

Applicationさえ削除しなければ、Kubernetesリソースをダッシュボード上からマニフェストを修正したり、Kubernetesリソースを削除しても、これが差分として認識される。

そのため、Syncすれば元の状態に戻る。

こういった点でも、ArgoCDを入れる方が、Kubernetesの修正の検証がしやすい。

注意点として、マニフェストに何かを追加するような変更は差分として認識されないため、Syncしても元に戻らない。


アプリケーションリポジトリ起点

▼ テンプレート構成管理ツールを使用しない場合

argocd_eks

(1)

アプリケーションリポジトリで、開発者がアプリケーションの変更をmainブランチにマージする。

(2)

CIツールが、コンテナイメージをECRにプッシュする。

(3)

CIツールは、マニフェストリポジトリをクローンし、マニフェストのコンテナイメージのハッシュ値を変更する。

このマニフェストの変更は、yqコマンドなどで直接的に実行する。

変更したマニフェストをマニフェストリポジトリにプッシュする。

(4)

プルリクエストを自動作成する。

(5)

マニフェストリポジトリで、リリース責任者がプルリクエストをmainブランチにマージする。

(6)

ArgoCDがマニフェストの変更を検知し、Kubernetesにプルする。

▼ テンプレート構成管理ツールを使用した場合

argocd_eks_helm

(1)

同じ

(2)

同じ

(3)

CIツールは、マニフェストリポジトリをクローンし、チャート内のマニフェストのコンテナイメージのハッシュ値を変更する。

このマニフェストの変更は、yqコマンドなどで直接的に実行する。

(4)

同じ

(5)

同じ

(6)

ArgoCDがマニフェストの変更を検知し、Kubernetesにプルする。


マニフェストリポジトリ起点

argocd_gcp

(1)

マニフェストリポジトリで、開発者がマニフェストの変更をmainブランチにマージする。

(2)

マニフェストリポジトリで、リリース責任者がマニフェストやチャートの変更をmainブランチにマージする。

(3)

ArgoCDがマニフェストの変更を検知し、Kubernetesにプルする。


チャートリポジトリ起点

記入中...