ArgoCDでHelmを使う方法と既存のReleaseをArgoCD管理へ移行する方法


最近、ArgoCDを使ってKubernetes上のアプリケーションのデプロイ管理をしています。Helmを使っているのであれば、ArgoCDはHelmでデプロイされたアプリケーションも管理することができます。そして、すでにHelmでデプロイされている既存のReleaseをArgoCD管理に移行することもできます。

この記事では以下の内容について説明します。

  • ArgoCDでHelmを使う方法
  • 既存のHelmリリースをArgoCDに移行する方法

ArgoCDでHelmを使う方法

ArgoCDでは以下の3種類の方法でHelmを使うことができます。

  • Helm CLI: Helmのchartディレクトリを指定してそのままデプロイする方法
  • Helm Chart Repository: Chart RepositoryからHelmのchartを取得してデプロイする方法
  • Git Repositories: GitリポジトリからHelmのchartを取得してデプロイする方法

それぞれの方法を見ていきましょう。

Helm CLI

Helm CLIを使用する場合は、Applicationのマニフェストで以下のように指定します。

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: example-helm
spec:
  destination:
    namespace: default
    server: https://kubernetes.default.svc
  project: default
  source:
    path: helm-chart-directory
    repoURL: https://github.com/example/repo.git
    targetRevision: HEAD
    helm:
      valueFiles:
      - values.yaml
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

この方法では、source.pathにチャートディレクトリを指定します。また、source.helm.valueFilesでデフォルト以外のvaluesファイルを指定することができます。

Helm Chart Repository

Helm Chart Repositoryを使用する場合は、以下のように指定します。

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: example-chart-repo
spec:
  destination:
    namespace: default
    server: https://kubernetes.default.svc
  project: default
  source:
    chart: example-chart
    repoURL: https://charts.example.com
    targetRevision: 1.0.0
    helm:
      valueFiles:
      - values.yaml
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

この方法では、source.chartにチャート名を指定し、source.repoURLにChart Repositoryを指定します。source.targetRevisionにはチャートのバージョンを指定します。

Git Repositories

Git Repositoryを使用する場合は、Helm CLIの場合と同様ですが、Gitリポジトリからチャートを取得します。

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: example-git-repo
spec:
  destination:
    namespace: default
    server: https://kubernetes.default.svc
  project: default
  source:
    path: charts/example-chart
    repoURL: https://github.com/example/repo.git
    targetRevision: HEAD
    helm:
      valueFiles:
      - values.yaml
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

既存のHelmリリースをArgoCDに移行する方法

すでにHelmでデプロイされているリリースをArgoCDでの管理に移行する方法を説明します。

1. 既存のリリース情報の確認

まず、現在のHelmリリースの情報を確認します。

$ helm list -n <namespace>
NAME          NAMESPACE  REVISION  UPDATED                                 STATUS    CHART               APP VERSION
example-app   default    3         2020-06-28 15:30:45.123456 +0900 JST    deployed  example-app-1.2.3   1.2.3

2. ArgoCDにアプリケーションを登録

次に、ArgoCDにアプリケーションを登録します。このとき、既存のHelmリリース名と同じ名前でArgoCDのアプリケーションを作成することが重要です。

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: example-app  # Helmリリース名と同じにする
  namespace: argocd  # ArgoCDがインストールされているnamespace
spec:
  destination:
    namespace: default  # アプリケーションがデプロイされているnamespace
    server: https://kubernetes.default.svc
  project: default
  source:
    chart: example-app
    repoURL: https://charts.example.com
    targetRevision: 1.2.3  # 現在デプロイされているバージョンと同じにする
    helm:
      valueFiles:
      - values.yaml
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

ここで重要なのは以下の点です:

  • metadata.name: 既存のHelmリリース名と同じにする
  • spec.destination.namespace: アプリケーションがデプロイされているnamespaceと同じにする
  • spec.source.targetRevision: 現在デプロイされているチャートバージョンと同じにする

3. 移行の確認

ArgoCDにアプリケーションを登録した後、ArgoCDのUIまたはCLIでアプリケーションの状態を確認します。

$ argocd app get example-app
Name:               example-app
Project:            default
Server:             https://kubernetes.default.svc
Namespace:          default
URL:                https://argocd.example.com/applications/example-app
Repo:               https://charts.example.com
Target:             1.2.3
Path:               
Helm:               
Sync Policy:        Automated
Sync Status:        Synced to 1.2.3 (3d34f8a)
Health Status:      Healthy

正しく設定されていれば、「Synced」と表示され、ArgoCDでの管理に移行できています。

4. 注意点

既存のHelmリリースをArgoCDに移行する際の注意点をいくつか紹介します。

Helmリリース名の一致

ArgoCDのアプリケーション名とHelmリリース名は完全に一致する必要があります。一致しない場合、ArgoCDは既存のリリースを認識できず、新しいリリースを作成しようとします。

namespaceの一致

ArgoCDのアプリケーションで指定するnamespaceは、既存のHelmリリースがデプロイされているnamespaceと一致する必要があります。

チャートバージョンの一致

最初に登録する際は、既存のHelmリリースで使用されているチャートバージョンと同じものを指定することをお勧めします。その後、ArgoCDを通じてバージョンアップを行うことができます。

values.yamlの設定

既存のリリースで使用されているvaluesの設定をArgoCDのアプリケーションにも適用する必要があります。既存の設定は以下のコマンドで確認できます。

$ helm get values example-app -n default

この出力をvalues.yamlファイルとして保存し、GitリポジトリにコミットしてArgoCDから参照できるようにします。

まとめ

この記事では、ArgoCDでHelmを使用する方法と、既存のHelmリリースをArgoCDに移行する方法について説明しました。

ArgoCDを使うことで、Gitリポジトリの変更に応じて自動的にKubernetesクラスタを更新できるため、GitOpsの実践に役立ちます。また、既存のHelmリリースをArgoCDに移行することで、すでに運用中のアプリケーションもGitOpsの恩恵を受けることができます。

Kubernetes上のアプリケーション管理を効率化するために、ぜひArgoCDを活用してみてください。