はじめに

Kubernetes 1.22 で複数の Beta版のAPI の廃止に伴って、ArgoCD v2.0.0からbetaのAPIが消えているため、ArgoCDのバージョンを1.8.7から2.0.5 にアップグレードします。

現状バージョンの確認

$ argocd version --short
argocd: v2.5.5+fc3eaec.dirty
argocd-server: v1.8.7+eb3d1fb

v2.0.5 用マニフェストのダウンロード

v2.0.5 用のマニフェストをダウンロードします。

$ curl -O https://raw.githubusercontent.com/argoproj/argo-cd/v2.0.5/manifests/install.yaml

v2.0.5 用ディレクトリ配下にマニフェストの分割

管理やすいために、latchmihay/k8s-yaml-splitter を用いて base-v2.0.5ディレクトリ配下にマニフェストを分割して配置します。

$ mkdir base-v2.0.5
$ k8s-yaml-splitter install.yaml base-v2.0.5
$
$ ls base-v2.0.5/
ClusterRole-argocd-application-controller.yaml
ClusterRole-argocd-server.yaml
ClusterRoleBinding-argocd-application-controller.yaml
ClusterRoleBinding-argocd-server.yaml
ConfigMap-argocd-cm.yaml
ConfigMap-argocd-gpg-keys-cm.yaml
ConfigMap-argocd-rbac-cm.yaml
ConfigMap-argocd-ssh-known-hosts-cm.yaml
ConfigMap-argocd-tls-certs-cm.yaml
CustomResourceDefinition-applications.argoproj.io.yaml
CustomResourceDefinition-appprojects.argoproj.io.yaml
Deployment-argocd-dex-server.yaml
Deployment-argocd-redis.yaml
Deployment-argocd-repo-server.yaml
Deployment-argocd-server.yaml
NetworkPolicy-argocd-application-controller-network-policy.yaml
NetworkPolicy-argocd-dex-server-network-policy.yaml
NetworkPolicy-argocd-redis-network-policy.yaml
NetworkPolicy-argocd-repo-server-network-policy.yaml
NetworkPolicy-argocd-server-network-policy.yaml
Role-argocd-application-controller.yaml
Role-argocd-dex-server.yaml
Role-argocd-redis.yaml
Role-argocd-server.yaml
RoleBinding-argocd-application-controller.yaml
RoleBinding-argocd-dex-server.yaml
RoleBinding-argocd-redis.yaml
RoleBinding-argocd-server.yaml
Secret-argocd-secret.yaml
Service-argocd-dex-server.yaml
Service-argocd-metrics.yaml
Service-argocd-redis.yaml
Service-argocd-repo-server.yaml
Service-argocd-server-metrics.yaml
Service-argocd-server.yaml
ServiceAccount-argocd-application-controller.yaml
ServiceAccount-argocd-dex-server.yaml
ServiceAccount-argocd-redis.yaml
ServiceAccount-argocd-server.yaml
StatefulSet-argocd-application-controller.yaml
$
$ rm -f install.yaml # 不要なので削除

バージョン v2.0.5 は v1.8.7に比べと、下記の5つのNetworkPolicy ファイルが追加されました:

NetworkPolicy-argocd-application-controller-network-policy.yaml
NetworkPolicy-argocd-dex-server-network-policy.yaml
NetworkPolicy-argocd-redis-network-policy.yaml
NetworkPolicy-argocd-repo-server-network-policy.yaml
NetworkPolicy-argocd-server-network-policy.yaml

[Option]Proxy の設定

環境により必要であれば、以下ファイルに Proxy(Squid) の設定を行う。

argo-cd/base-v1.8.7/StatefulSet-argocd-application-controller.yaml
argo-cd/base-v2.0.5/Deployment-argocd-dex-server.yaml
argo-cd/base-v2.0.5/Deployment-argocd-redis.yaml
argo-cd/base-v2.0.5/Deployment-argocd-repo-server.yaml
argo-cd/base-v2.0.5/Deployment-argocd-server.yaml

imagePullPolicy: Alwaysの次行に以下設定を追記します。

envFrom:
- configMapRef:
name: proxy-*****

[Option]ALB 経由で ArgoCD へアクセス可能とさせる設定

環境により必要であれば、以下ファイルを修正します。

argo-cd/base-v2.0.5/Deployment-argocd-server.yaml
argo-cd/base-v2.0.5/Service-argocd-server.yaml

Deployment-argocd-server.yaml:
argocd-serverの起動オプションに --insecure を追加します。

spec:
containers:
- command:
- argocd-server
- --staticassets
- /shared/app
- --insecure # 追加

Service-argocd-server.yaml:
環境により必要であれば、https の ClusterIP は使用しない場合、コメントアウトします。

# - name: https
# port: 443
# protocol: TCP
# targetPort: 8080

kube2iam で使用する ServiceAccount の設定

以下ファイルを修正します。
argo-cd/base-v2.0.5/Deployment-argocd-repo-server.yaml
spec.template.metadata に以下 annotations を追加します。

spec:
selector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
template:
metadata:
annotations: # 追記
iam.amazonaws.com/role: ***role名*** # 追記
labels:
app.kubernetes.io/name: argocd-repo-server

バージョンアップ実施

検証のための環境ではGitLab上でmaster ブランチへのマージを行うと、ArgoCD にて自動デプロイが実行され、この部分の解説は省略させていただきます。

argocli でサーバのバージョンを確認し、argocd-server のバージョンが v2.0.5 となっていることを確認します。

$ argocd version --short
argocd: v2.5.5+fc3eaec.dirty
argocd-server: v2.0.5+4c94d88

動作確認

ArgoCD の WebUI にアクセスし、ログインできることを確認します。