このトピックでは、セルフマネージド ArgoCD マスタークラスターを ACK One に移行する方法について説明します。
onectl を使用して、セルフマネージド Argo CD マスタークラスターから ACK One GitOps へ、クラスター Secret、リポジトリ Secret、およびアプリケーションを移行します。移行は、クラスター、リポジトリ、アプリケーションの 3 段階のシーケンスに従って実行され、既存の Argo CD インストールと並行して実行されるため、稼働中のワークロードは影響を受けません。
onectl は、Fleet インスタンスと Argo CD マスタークラスター (クラスター ID で識別) の両方の kubeconfig ファイルを取得し、~/.onectl/ ディレクトリに保存します。その後、クラスター Secret、リポジトリ Secret、およびアプリケーションをターゲットの ACK One Fleet インスタンスに移行します。
事前準備:
Argo CD マスタークラスターがオンプレミス クラスターである場合は、まず登録済みクラスターに接続します。詳細については、「登録済みクラスターの作成」をご参照ください。
Argo CD マスタークラスターの ConfigMap を変更した場合は、移行前に ACK One Fleet インスタンスで対応する構成を更新してください。
クラスター Secret にカスタムラベルを追加した場合は、クラスターの移行後に ACK One GitOps の Argo CD UI でそれらのラベルを構成してください。
onectl でアプリケーションを移行した後、非カスケード削除を使用してセルフマネージド Argo CD マスタークラスターから削除します。これにより、基盤となる Kubernetes リソースを削除することなく、現在のクラスターから切断され、ACK One GitOps が管理を引き継ぐことができます。
移行の概要
移行は次の 4 つのステップで進められます。
onectl 用の RAM ユーザーを構成 — 必要な権限を付与し、認証情報を構成します。
クラスターの移行 — クラスターを ACK One Fleet インスタンスにアタッチします。
Git リポジトリ構成の移行 — リポジトリ Secret を ACK One GitOps に転送します。
アプリケーションの移行 — すべてまたは選択したアプリケーションを移動し、ソースクラスターからクリーンアップします。
前提条件
開始する前に、以下を確認してください。
マルチクラスター管理機能が有効になっている ACK One をアクティブ化していること。詳細については、「Fleet 管理の有効化」をご参照ください。
オンプレミス クラスターを登録済みクラスターに接続していること。詳細については、「登録済みクラスターの作成」をご参照ください。
Fleet インスタンスで GitOps を有効にし、Argo CD CLI を使用して Argo CD にログインしていること。詳細については、「GitOps の開始」をご参照ください。
onectl の最新バージョンをインストールしていること。
ステップ 1: onectl 用の RAM ユーザーを構成
onectl は、Resource Access Management (RAM) ユーザーの AccessKey ID と AccessKey Secret を使用してクラウドリソースを管理します。RAM ユーザーに次の権限を付与します。
AliyunAdcpFullAccess権限を付与します。詳細については、「RAM ユーザーまたは RAM ロールへのシステム権限ポリシーのアタッチ」をご参照ください。AliyunCSReadOnly権限を付与するか、次のアクションを含むカスタム ACK ポリシーを作成します。{ "Action": [ "cs:DescribeTemplates", "cs:DescribeTemplateAttribute", "cs:DescribeClusterUserKubeconfig" ], "Resource": [ "*" ], "Effect": "Allow" }セルフマネージド Argo CD クラスターに管理者権限を付与します。詳細については、「RBAC を使用したクラスター内のリソースに対する操作権限の管理」をご参照ください。
次のコマンドを実行し、プロンプトが表示されたら AccessKey ID と AccessKey Secret を入力します。
onectl configure期待される出力:
Configuring profile default ... Access Key Id [*********************NaY]: Access Key Secret [***************************HUd]: Ram Username []: Default Kubeconfig Path (default is ~/.kube/config) []: Saving profile[default] ... Done.
ステップ 2: クラスターの移行
Fleet インスタンス ID と Argo CD マスタークラスター ID を環境変数として設定します。onectl はこれらを使用して、対応する kubeconfig ファイルを
~/.onectl/ディレクトリに取得してキャッシュします。export ACKONE_HUB_CLUSTER_ID=ccc47ca148d0147519f229bba******** export ARGOCD_CLUSTER_ID=ce4bb2004bb0e409eaa4c593d********次のいずれかの方法でクラスターを移行します。方法 1: ACK One コンソールを使用 セルフマネージド Argo CD 環境のクラスター (非マスタークラスター) を ACK One コンソールで ACK One Fleet インスタンスに関連付けます。方法 2: onectl を使用
セルフマネージド Argo CD マスタークラスター内のすべてのクラスター Secret に
ack_cluster_id: <your ack cluster id>ラベルを追加します。Argo CD UI または kubectl を使用して Secret を編集します。次のコマンドを実行します。``
shell onectl migrate clusters -n argocd`` > 注: セルフマネージド Argo CD 環境のクラスター Secret にラベルまたはアノテーションを追加した場合は、このステップの完了後に ACK One GitOps の Argo CD UI でそれらを構成してください。
ステップ 3: Git リポジトリ構成の移行
次のコマンドを実行して、マスタークラスターから ACK One GitOps へリポジトリ Secret を移行します。
onectl migrate repos -n argocdすべてのリソースまたは特定のリソースタイプの移行ステータスを確認します。
# Query the status of all resource types onectl migrate status -nargocd # Query the status of a specific resource type onectl migrate status clusters -nargocd onectl migrate status repos -nargocd onectl migrate status apps -nargocd期待される出力:
#################### Clusters Status #################### All 1 clusters were attached successfully to ACK One ccc47****** ! CLUSTER STATE MESSAGE ce4b****** Succeed #################### Repositories Status #################### All 1 repos were migrated successfully to ACK One ccc47****** ! STATE REPO TYPE NAME MESSAGE Succeed https://github.com/AliyunContainerService/gitops-demo.git git #################### Applications Status #################### -------------------- Git/Helm Applications -------------------- Total 'Git/Helm' type applications: 1, success to migrate: 0, pending to migrate: 1 STATE NAME NAMESPACE CLUSTER STATUS HEALTH REPO PATH TARGET MESSAGE Pending app-git-2 argocd application has not been migrated to ACK One ccc47****** -------------------- Template Applications -------------------- STATE NAME NAMESPACE TEMPLATEID TEMPLATEPATH MESSAGE
ステップ 4: アプリケーションの移行
すべてのアプリケーションの移行
次のコマンドを実行して、すべてのアプリケーションを一度に移行します。
onectl migrate apps -n argocd --all期待される出力:
Applications in source cluster (ArgoCD or AppCenter cluster):
NAME NAMESPACE TYPE TEMPLATEID
app-git-2 argocd Git/Helm
will be migrated to ACK One ccc47******. Please checking the source cluster and ACK One cluster. Are you sure to migrate the Applications? [Y/n] y
Total 1 applications will be migrated to ACK One ccc47****** ...
-------------------- Git/Helm Applications --------------------
Application argocd/app-git-2 was migrated succeessfully.
All 1 'Git/Helm' type applications has been migrated successfully o ACK One ccc47******.
STATE NAME NAMESPACE CLUSTER STATUS HEALTH REPO PATH TARGET MESSAGE
Succeed app-git-2 argocd https://172.16.**.**:6443 Synced Healthy git@github.com:**/gitops-demo.git manifests/helm/echo-server main
-------------------- Template Applications --------------------
No 'Template' type applications need to be migrated.選択したアプリケーションの移行
1 つ以上の特定のアプリケーションを移行するには、次を実行します。
onectl migrate apps ${app1Name} -n argocd
# Replace ${app1Name} with the name of the application to migrate.期待される出力:
Applications in source cluster (ArgoCD or AppCenter cluster):
NAME NAMESPACE TYPE TEMPLATEID
app-git-2 argocd Git/Helm
will be migrated to ACK One ccc47******. Please checking the source cluster and ACK One cluster. Are you sure to migrate the Applications? [Y/n] y
Total 1 applications will be migrated to ACK One ccc47****** ...
-------------------- Git/Helm Applications --------------------
Application argocd/app-git-2 was migrated succeessfully.
All 1 'Git/Helm' type applications has been migrated successfully o ACK One ccc47ca148d0147519f229bbaea2963b6.
STATE NAME NAMESPACE CLUSTER STATUS HEALTH REPO PATH TARGET MESSAGE
Succeed app-git-2 argocd https://172.16.**.**:6443 Synced Healthy git@github.com:**/gitops-demo.git manifests/helm/echo-server main
-------------------- Template Applications --------------------
No 'Template' type applications need to be migrated.ソースクラスターからのアプリケーションの削除
ACK One GitOps でアプリケーションが正常に実行されていることを確認した後、非カスケード削除を使用してセルフマネージド Argo CD マスタークラスターから削除します。
--cascade=false を常に含めてください。これを含めないと、Kubernetes はアプリケーションによって管理されているリソースを削除し、稼働中のワークロードに影響を与えます。
kubectl --kubeconfig ${ARGOCD_CLUSTER_KUBECONFIG_PATH} delete app ${appName} -n argocd --cascade=falseよくある質問
ACK One GitOps に追加されたリポジトリの CONNECTION STATUS が Failed と表示される
最も可能性の高い原因は、ACK One Fleet インスタンスとリポジトリホスト間のネットワーク接続の問題です。ACK One Fleet インスタンスに接続し、ログを確認してください。
kubectl -nargocd get pod
kubectl -nargocd logs argocd-server-xx -c argocd-repo-serverログに context deadline exceeded (Client.Timeout exceeded while awaiting headers) が含まれている場合、Fleet インスタンスはインターネット経由でリポジトリに到達できません。Fleet インスタンスで使用されている仮想プライベートクラウド (VPC) にインターネット NAT ゲートウェイが構成されていることを確認してください。
ACK One コンソールにログインします。左側のナビゲーションウィンドウで、[フリート > フリート情報]の順に選択します。
「[基本情報]」タブをクリックします。[VPC] フィールドを見つけ、リンクをクリックして VPC 詳細ページを開きます。
VPC ページで、[Resource Management] タブをクリックし、[インターネットへのアクセス] セクションを確認します。
argocd-server にはどのようなコンテナが含まれていますか?
| コンテナ名 | 説明 |
|---|---|
argocd-server | Argo CD の API サーバー。Web UI、CLI、および CI/CD システムに API を公開します。 |
argocd-application-controller | アプリケーションとプロジェクトのリソースを調整し、Git リポジトリからクラスターへのアプリケーションの状態を同期する Kubernetes コントローラー。 |
argocd-applicationset-controller | 複数のクラスター間で ApplicationSet を調整します。ApplicationSet は、複数のクラスターにアプリケーションを作成してデプロイします。 |
argocd-repo-server | Git リポジトリと対話し、Kubernetes マニフェストを生成して返却します。 |
redis | Kubernetes API サーバーと Git リポジトリサーバーへのリクエストを削減するために、Argo CD のキャッシュ層を提供します。 |
dex | 外部 OpenID Connect (OIDC) プロバイダーとの認証を処理します。他のツールを使用することもできます。 |
argocd-image-updater | Argo CD によって管理される Kubernetes ワークロード (Deployment など) のコンテナイメージへの変更を検出し、自動的に最新バージョンに更新します。 |