
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を活用してみてください。