ArgoCDをv3にアップデートするにあたり対応したこと


# はじめに

ArgoCD v3.0がリリースされ、多くの新機能と改善が追加されました。ArgoCD v3.0は公式に「**低リスクなアップグレードで、軽微な破壊的変更のみを含む**」と位置づけられています。

本記事では、社内でArgoCD v2.14.11からv3.0.1への実際のアップデートを実施した際に遭遇した軽微な設定調整が必要な点と、その対応方法について詳しく説明します。大きな問題はありませんが、事前に把握しておくことでよりスムーズなアップデートが可能になります。

# アップデートの前提条件

- **アップデート対象バージョン**: ArgoCD v2.14.11 → v3.0.1
- **参考ドキュメント**: [ArgoCD v2.14-3.0 アップグレードガイド](https://argo-cd.readthedocs.io/en/stable/operator-manual/upgrading/2.14-3.0)

# 遭遇した注意点と対応方法

## 1. RBAC権限の細分化による権限エラー

### 変更点の概要

ArgoCD v3.0では、applicationの`update`と`delete`権限がより細分化されました。これまでは、applicationに対して権限を設定すれば、そのapplicationで管理されているDeploymentやPodなどのリソースにも同じ権限が適用されていました。

しかし、v3.0からは**application自体**と**applicationで管理されているリソース**に対して、それぞれ個別に権限設定が必要になりました。

### 具体的な症状

従来の設定では以下のような権限設定を行っていました：

```yaml
# 旧設定（v2.x系）
p, example-user, applications, update, */*, allow
p, example-user, applications, delete, */*, allow
```

この設定でv3.0にアップデート後：
- ✅ Application自体の更新・削除は可能
- ❌ Applicationで管理しているDeploymentの変更ができない
- ❌ Podの削除ができない（権限エラーが発生）

### 解決策

対応策としては2パターンあります。
弊社は最終的に方法2の対応を行いました。

**方法1: 従来の動作を維持する**

`argocd-cm` ConfigMapに以下の設定を追加します：

```yaml
data:
  server.rbac.disableApplicationFineGrainedRBACInheritance: "false"
```

この設定により、ArgoCD v2.x系と同じ動作となり、applicationに対する権限がその配下のリソースにも継承されます。

**方法2: 細分化された権限を明示的に設定する**

`argocd-rbac-cm` ConfigMapに以下の権限設定を追加します：

```yaml
data:
  policy.csv: |
    # Application自体の権限
    p, example-user, applications, update, */*, allow
    p, example-user, applications, delete, */*, allow

    # Application内のリソースに対する権限
    p, example-user, applications, update/*/*/*/*, */*, allow
    p, example-user, applications, delete/*/*/*/*, */*, allow
```

### 参考資料

- [Fine-grained RBAC for application update and delete sub-resources](https://argo-cd.readthedocs.io/en/stable/operator-manual/upgrading/2.14-3.0/#fine-grained-rbac-for-application-update-and-delete-sub-resources)
- [RBAC Fine-grained permissions](https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/#fine-grained-permissions-for-updatedelete-action)

## 2. CRDのpreserveUnknownFieldsがdiffに表示される変更点

### 変更点の概要

ArgoCD v3.0では、CustomResourceDefinition（CRD）の`preserveUnknownFields`フィールドがdiffに表示されるようになりました。これにより、これまで問題なく動作していたリソースが突然**OutOfSync**状態になる場合があります。

### 対応方法

`argocd-cm` ConfigMapに以下の設定を追加します：

```yaml
data:
  resource.customizations.ignoreDifferences.apiextensions.k8s.io_CustomResourceDefinition: |
    jsonPointers:
    - "/spec/preserveUnknownFields"
```

この設定により、CRDの`preserveUnknownFields`フィールドの差分が無視され、OutOfSync状態が解消されます。

### 注意事項

この解決策は、ArgoCD v3.0.3のアップデートドキュメントに正式に記載されました：
- [Removing default ignores of preserveUnknownFields for CRD](https://argo-cd.readthedocs.io/en/latest/operator-manual/upgrading/2.14-3.0/#removing-default-ignores-of-preserveunknownfields-for-crd)

## 3. デフォルト設定の大幅な変更

ArgoCD v3.0では、`argocd-cm` ConfigMapにデフォルトで多くの除外ルールが追加されるようになりました。
これらの設定によりパフォーマンスの改善が行われましたが、ConfigMapやReplicaSetなどの一部のフィールドが更新対象から除外されています。

詳細な設定内容については、アップデート後の`argocd-cm`を確認してください。

# まとめ

ArgoCD v3.0へのアップデートは公式が謳う通り**低リスクなアップグレード**ですが、以下の2つの軽微な設定調整が必要になる場合があります：

1. **RBAC権限の細分化**: `server.rbac.disableApplicationFineGrainedRBACInheritance: "false"`の設定で従来の動作を維持
2. **CRDのpreserveUnknownFields変更**: 専用のignoreDifferences設定で対応

これらは大きな問題ではなく、事前に設定変更を準備しておくことで、非常にスムーズなアップデートが実現できます。

# 参考資料

- [ArgoCD v2.14-3.0 Upgrade Guide](https://argo-cd.readthedocs.io/en/stable/operator-manual/upgrading/2.14-3.0)
- [ArgoCD RBAC Configuration](https://argo-cd.readthedocs.io/en/stable/operator-manual/rbac/)
- [ArgoCD Resource Customizations](https://argo-cd.readthedocs.io/en/stable/operator-manual/declarative-setup/#resource-exclusionsinclusions)

# さいごに

インティメート・マージャーでは、新卒から中途採用まで幅広く採用募集中です！
記事を読んで弊社に興味を持ってくれた方は、下記より採用情報をチェックしていただけると幸いです。

https://recruit.intimatemerger.com/

また、27新卒向けの夏季インターンシップも募集中となります！
2週間の実務型のインターンシップとなります。興味があればぜひ！

https://job.tracks.run/challenges/intimatemerger-27