このトピックでは、自己管理型ArgoCDマスタークラスターをACK Oneに移行する方法について説明します。
概要
自己管理型ArgoCDからDistributed Cloud Container Platform for Kubernetes (ACK One) GitOpsにデータを移行する場合、多数のクラスター、リポジトリ、およびアプリケーションが関与するため、データを1つずつ手動で移行するには長い時間がかかります。 したがって、onectlを使用して、自己管理型ArgoCDからACK Oneへの高速データ移行を実行できます。 次の図は、移行のアーキテクチャを示しています。
onectlは、自己管理型ArgoCDマスタークラスターの指定されたフリートIDとACKクラスターID (登録済みクラスターを含む) に基づいて、kubeconfigファイルを使用して、クラスターの秘密、リポジトリの秘密、およびアプリケーションを自己管理型ArgoCDマスタークラスターからACK Oneフリートインスタンスに移行します。
説明自己管理型ArgoCDマスタークラスターがオンプレミスクラスターの場合は、移行前に登録済みクラスターに接続します。 詳細については、「登録済みクラスターの作成」をご参照ください。
自己管理型ArgoCDマスタークラスターのConfigMapを変更した場合は、移行前にACK One Fleetインスタンスで対応する設定を変更します。
クラスターSecretsにカスタムラベルを追加した場合は、クラスターの移行後に、ArgoCD UIでACK One GitOpsでラベルを設定します。
onectlを使用してアプリケーションを移行した後、自己管理型ArgoCDマスタークラスターからアプリケーションを非カスケード方式で削除して、アプリケーションが存在するクラスターからアプリケーションを切断できます。 アプリケーションはACK One GitOpsによって排他的に管理されます。
前提条件
ACK Oneがアクティブ化されます。 マルチクラスター管理機能が有効になっています。 詳細については、「フリート管理の有効化」をご参照ください。
オンプレミスクラスターは、移行前に登録済みクラスターに接続されています。 詳細については、「登録済みクラスターの作成」をご参照ください。
FleetインスタンスでGitOpsが有効になっており、Argo CD CLIを使用してArgo CDにログインします。 詳細については、「GitOpsの使い方」をご参照ください。
手順1: onectlのRAMユーザーの設定
自己管理型ArgoCDのアプリケーションセンターからACK One GitOpsにアプリケーションを移行できるように、Resource Access Management (RAM) ユーザーとしてログオンする必要があります。 onectlは、RAMユーザーのAccessKey IDとAccessKey secretを使用してクラウドリソースを管理します。 したがって、Alibaba Cloudアカウントを使用して、RAMユーザーに次の権限を付与する必要があります。
AliyunAdcpFullAccess権限を付与します。 詳細については、「RAMユーザーまたはRAMロールへのシステム権限ポリシーのアタッチ」をご参照ください。
AliyunCSReadOnly権限を付与するか、ACKテンプレート権限を追加します。 次のコードは、ACKテンプレートポリシーの例を示しています。
{ "Action": [ "cs:DescribeTemplates", "cs:DescribeTemplateAttribute", "cs:DescribeClusterUserKubeconfig" ], "Resource": [ "*" ], "Effect": "Allow" }
自己管理型ArgoCDクラスターに管理者権限を付与します。 詳細については、「RBACを使用したクラスター内のリソースに対する操作権限の管理」をご参照ください。
次のコマンドを実行して、onectlのRAMユーザーのAccessKey IDとAccessKey secretを設定します。
Access Key Id
とAccess Key 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: クラスターの移行
移行コマンドを簡単にするために、ACK One FleetインスタンスのIDとマスタークラスターのIDが環境変数として指定されます。 onectlは、
clusterid
パラメーターに基づいてFleetインスタンスとマスタークラスターのkubeconfigファイルを取得し、そのファイルを~/.onectl/
ディレクトリに保存します。export ACKONE_HUB_CLUSTER_ID=ccc47ca148d0147519f229bba******** export ARGOCD_CLUSTER_ID=ce4bb2004bb0e409eaa4c593d********
次のいずれかの方法を使用して、クラスターを移行できます。
方法1: 自己管理型ArgoCD環境のクラスター (非マスタークラスター) をACK OneコンソールでACK Oneフリートインスタンスに関連付けます。
方法2: onectlを使用してクラスターを移行します。
ack_cluster_id: <your ack cluster id>
ラベルを自己管理型ArgoCDマスタークラスター内のすべてのクラスターの秘密に追加して、対応するACKクラスターを指定します。 自己管理型ArgoCD UIまたはkubectlを使用して、シークレットを変更できます。次のonectlコマンドを実行して、自己管理型ArgoCDマスタークラスターのクラスターをACK One GitOpsに移行します。
onectl migrate clusters -n argocd
説明セルフマネージドArgoCD環境でCluster Secretに
label
またはannotation
を追加した場合は、この手順を完了した後、ArgoCD UIのACK One GitOpsに追加できます。
ステップ3: Gitリポジトリ設定の移行
次のコマンドを実行して、GitリソースをマスタークラスターからACK One GitOpsに移行します。
onectl migrate repos -n argocd
次のコマンドを実行して、特定の種類のリソースまたはすべての種類のリソースのステータスを確認します。
#onectl migrate status [clusters|repos|apps] -nargocd # Query the status of all types of resources. onectl migrate status -nargocd # Query the status of a specific type of resource. 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を使用すると、1つ以上のアプリケーションまたはすべてのアプリケーションを同時に移行できます。 ビジネス要件に基づいて方法を選択することを推奨します。
すべてのアプリケーションを移行する
次のコマンドを実行して、すべてのアプリケーションを移行します。
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つ以上のアプリケーションの移行
次のコマンドを実行して、1つ以上のアプリケーションを移行します。
onectl migrate apps ${app1Name} -n argocd # Replace ${app1Name} with the name of the application that you want 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.
アプリケーションセンターのマスタークラスターで次のコマンドを実行して、自己管理型ArgoCDからアプリケーションリソースを非カスケード方式で削除します。 これにより、ビジネスに影響がなくなります。
kubectl --kubeconfig ${ARGOCD_CLUSTER_KUBECONFIG_PATH} delete app ${appName} -n argocd --cascade=false
説明deleteコマンドで
-- cascade=false
パラメーターを指定する必要があります。 それ以外の場合、アプリケーションに関連するKubernetesリソースも削除されます。
よくある質問
ACK One GitOpsに追加されたリポジトリのCONNECTION STATUS
パラメーターの値がFailed
です。
ACK One Fleetインスタンスに接続し、次のコマンドを実行してログを表示します。
kubectl -nargocd get pod kubectl -nargocd logs argocd-server-xx -c argocd-repo-server
コンテキストの期限を超えた (Client.Timeout while waiting headers)
エラーメッセージがログに表示された場合、ネットワーク接続の問題が発生している可能性があります。 ACK One Fleetインスタンスがインターネットにアクセスできるかどうかを確認することを推奨します。選択した仮想プライベートクラウド (VPC) にインターネットNATゲートウェイが作成されているかどうかを確認します。
ACK Oneコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
[基本情報] タブをクリックします。 VPCを見つけ、VPCの横にあるリンクをクリックして、VPC詳細ページに移動します。
[VPC] ページで、[リソース管理] タブをクリックして、[インターネットへのアクセス] セクションを表示します。
argocd-serverにはどのコンテナが含まれていますか?
コンテナー名 | 説明 |
| Web UI、CLI、および継続的統合または継続的配信 (CI/CD) システムにAPIを公開するために使用される、ArgoCDのAPIサーバーを指定します。 |
| Kubernetesコントローラーを指定します。これは、クラスター内のアプリケーションとプロジェクトリソースを調整し、GitリポジトリからKubernetesクラスターにアプリケーションのステータスを同期するために使用されます。 |
| このコンテナーは、クラスター内のApplicationSetsを調整するために使用されます。 ApplicationSetは、アプリケーションを作成して複数のクラスターにデプロイするために使用されます。 |
| このコンテナーは、Gitリポジトリと対話し、Kubernetesマニフェストを生成して返すことができます。 |
| このコンテナは、Kubernetes APIサーバーとGitリポジトリサーバーに送信されるリクエストを減らすために、ArgoCDのキャッシュ層を提供するために使用されます。 |
| ArgoCDはこのコンテナに依存して、外部OpenID Connect (OIDC) プロバイダーを認証します。 他のツールも使用できます。 |
| このコンテナは、デプロイメントなど、ArgoCDによって管理されるKubernetesワークロードのコンテナイメージに対する変更を検出し、イメージを最新バージョンに自動的に更新するために使用されます。 |