Argo CDのMultiple sourcesを試してみる

注意事項

この記事は、Notion AIに対して

  • 問題と解決策の概要
  • 例示用のコード

を渡して生成した実験的な記事になります。

はじめに

Argo CDにはMultiple sourcesという機能があります。
この機能はベータ版ですが、Helm ChartやKustomizeなどの異なるソースから構成要素を取得して、1つのアプリケーションを構築できます。

この記事では、Multiple sources機能がどのように役立つか、WordPressのデプロイにどのように使用するかを見ていきます。

Multiple sourcesの利点

Multiple sources機能を使用すると、以下のようなケースで便利になります。

Helm Chartとvalues.yamlの分離

Helm Chartとvalues.yamlの参照を別のレポジトリやディレクトリに分離できます。
これにより、アプリケーションのバージョン管理が容易になります。

複数のHelm Chartを1つのApplicationで管理

Multiple sources機能を使うと、1つのApplicationで複数のHelm Chartをまとめて管理できます。
これにより、アプリケーションの構成をより柔軟に管理できます。

Multiple sourcesを使ってWordPressをデプロイする

なぜ、WordPress?

BitnamiのWordPressのChartには、Podが再起動するとDBのパスワードが再生成される問題があります。
そのため、WordPressのChartからDBを分離させる必要があるので、Multiple sourcesにはうってつけです。

WordPress用のApplicationを定義する

それでは、Multiple sources機能を使用して、WordPressをデプロイする方法を見ていきます。

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: wordpress
  finalizers:
  - resources-finalizer.argocd.argoproj.io
spec:
  project: default
  sources:
    # corrupt952/home-appsを $manfiest で参照可能にする
    - ref: manifest
      repoURL: https://github.com/corrupt952/home-apps

    # corrupt952/home-appsのwordpress/baseで定義されているリソースを読み込む
    # mariadbとwordpressで利用するパスワードなどのSecretを管理
    - path: wordpress/base
      repoURL: https://github.com/corrupt952/home-apps

    # bitnami/mariadbのChartを読み込み、corrupt952/home-appsのvalues/mariadb.yamlを読み込む
    - chart: mariadb
      repoURL: https://charts.bitnami.com/bitnami
      targetRevision: 12.1.5
      helm:
        releaseName: mariadb
        valueFiles:
        - $manifest/values/mariadb.yaml

    # bitnami/wordpressのChartを読み込み、corrupt952/home-appsのvalues/wordpress.yamlを読み込む
    - chart: wordpress
      repoURL: https://charts.bitnami.com/bitnami
      targetRevision: 16.0.4
      helm:
        releaseName: wordpress
        valueFiles:
        - $manifest/values/wordpress.yaml

  ...

このように今までsourceだった定義をsourcesに定義することで、 複数のsourceを定義することができます。

ref: manifest

1つ目の定義は、2,3つ目のsourceでcorrupt952/home-appsにあるvalues.yamlを参照させるために定義します。
refの場合は、そのレポにあるリソースが読み込まれるわけではないので、ファイルを参照させる場合に必ず定義すると覚えておくと良さそうです。

- ref: manifest
  repoURL: https://github.com/corrupt952/home-apps

path: wordpress/base

2つ目の定義は、kustomizeでリソースを管理しているディレクトリにしているsourceです。
MariaDBWordPressとでパスワードを共通にする必要があるので、Sealed Secretを管理しており、この定義を追加することで読み込まれリソースが作成されます。

# corrupt952/home-appsのwordpress/baseで定義されているリソースを読み込む
# mariadbとwordpressで利用するパスワードなどのSecretを管理
- path: wordpress/base
  repoURL: https://github.com/corrupt952/home-apps

github.com

chart: mariadb

3つ目の定義は、MariaDBのHelm Chartを読み込んでいるsourceです。
valueFilesをcorrupt952/home-appsにあるvalues/mariadb.yamlから参照するように定義しています。
Multiple sourcesがなかった時代には、このような定義はできず独自にChart.yamlをvalues.yamlと同じレポに定義する必要がありました。
大分、楽になりましたね。

# bitnami/mariadbのChartを読み込み、corrupt952/home-appsのvalues/mariadb.yamlを読み込む
- chart: mariadb
  repoURL: https://charts.bitnami.com/bitnami
  targetRevision: 12.1.5
  helm:
    releaseName: mariadb
    valueFiles:
    - $manifest/values/mariadb.yaml
# valuse/mariadb.yaml
global:
  storageClass: nfs-client

auth:
  username: wordpress
  database: wordpress
  existingSecret: wordpress-credentials

chart: wordpress

4つ目の定義は、WordPressのHelm Chartを読み込んでいるsourceです。
こちらもMariaDB同様にcorrupt952/home-appsにあるvalues/wordpress.yamlを読み込むように定義しています。

# bitnami/wordpressのChartを読み込み、corrupt952/home-appsのvalues/wordpress.yamlを読み込む
- chart: wordpress
  repoURL: https://charts.bitnami.com/bitnami
  targetRevision: 16.0.4
  helm:
    releaseName: wordpress
    valueFiles:
    - $manifest/values/wordpress.yaml
# values/wordpress.yaml
global:
  storageClass: nfs-client

allowEmptyPassword: false
existingSecret: wordpress-credentials

mariadb:
  enabled: false

memcached:
  enabled: false

externalDatabase:
  host: mariadb.wordpress.svc.cluster.local
  user: wordpress
  database: wordpress
  existingSecret: wordpress-credentials

...

おわりに

以上で、Multiple sourcesを使用してWordPressをデプロイする例を見てきました。
まだベータ版ではあるものの、Multiple sourcesをうまく利用すれば、マニフェストと設定の分離や共通化なども適切に進めることができそうですね。