Argo CD Extensions を試してみる

Posted on

Argo Rollouts の検証を進める中で Argo CD Extensions を試す機会があったのでメモしておきます。

Argo CD Extensions とは

Argo CD v2.2 のロードマップに載っている proposal のひとつで、Argo CD とは別のプロジェクトとして公開されています。

argoproj-labs の下にあるので、成熟してきたら Argo CD に取り込まれると思われます。たとえば、Argo CD Notifications も argoproj-labs にありますが、Issue #7350 を見ると Argo CD v2.3 でマージされるようです。

README には次のような説明があります。

Here we provide a way to extend Argo CD such that it can provide resource-specific visualizations, capabilities and interactions in the following ways:

  • Richer and context-sensitive UI components can be displayed in the user interface about custom resources.
  • Custom health checks can be configured to assess the health of the resource.
  • Custom actions could be performed to manipulate resources in predefined ways.

Argo CD に extension の仕組みを導入し、custom resource に対して独自の UI や機能を追加できます。実装例として Argo Rollouts の rollout-extension が同時に公開されています。

Argo CD Extensions をインストールする

ここからローカルの Kubernetes 上にインストールして試してみます。

まず Argo CD Extensions の CRD をインストールする必要があります。 Helm chart は用意されていないので、Kustomize で manifest を生成して apply します。

$ cat kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
# base Argo CD components
- https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

components:
# extensions controller component
- https://github.com/argoproj-labs/argocd-extensions/manifests

$ kubectl create namespace argocd-extensions

$ kustomize build . | kubectl apply -f - -n argocd-extensions

argocdextensions.argoproj.io という CRD がインストールされました。

$ kubectl get crd argocdextensions.argoproj.io
NAME                                   CREATED AT
argocdextensions.argoproj.io           2021-11-09T02:38:54Z

rollout-extension をインストールする

先ほど作った namespace に rollout-extension をインストールします。

$ kubens argocd-extensions
Context "docker-desktop" modified.
Active namespace is "argocd-extensions".

$ kubectl apply -f https://raw.githubusercontent.com/argoproj-labs/rollout-extension/v0.1.0/manifests/install.yaml
argocdextension.argoproj.io/argo-rollouts created

install.yaml の中身はこれだけで、TypeScript で作られた React App を参照しているだけです。未検証ですが、バージョンアップする際も url が指している React App のバージョンを変更して apply するだけだと思います。

apiVersion: argoproj.io/v1alpha1
kind: ArgoCDExtension
metadata:
  name: argo-rollouts
  finalizers:
    - extensions-finalizer.argocd.argoproj.io
spec:
  sources:
  - web:
      url: https://github.com/argoproj-labs/rollout-extension/releases/download/v0.1.0/extension.tar

この extension をインストールすると、Argo Rollouts の Dashboard を Argo CD に統合することができます。

Argo Rollouts の Dashboard

まとめ

Argo CD のコードに手を入れずに UI を拡張できるので、コア開発者でなくても気軽に開発できるのはいいですね。現時点ではドキュメントも整備されておらず、まだまだこれからといった感じですが、エコシステムが広がれば Argo CD がさらに便利になりそうです。