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