すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:自己管理型ArgoCDからACK One GitOpsへのデータ移行

最終更新日:Dec 09, 2024

このトピックでは、自己管理型ArgoCDマスタークラスターをACK Oneに移行する方法について説明します。

概要

自己管理型ArgoCDからDistributed Cloud Container Platform for Kubernetes (ACK One) GitOpsにデータを移行する場合、多数のクラスター、リポジトリ、およびアプリケーションが関与するため、データを1つずつ手動で移行するには長い時間がかかります。 したがって、onectlを使用して、自己管理型ArgoCDからACK Oneへの高速データ移行を実行できます。 次の図は、移行のアーキテクチャを示しています。

image
  • 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によって排他的に管理されます。

前提条件

手順1: onectlのRAMユーザーの設定

自己管理型ArgoCDのアプリケーションセンターからACK One GitOpsにアプリケーションを移行できるように、Resource Access Management (RAM) ユーザーとしてログオンする必要があります。 onectlは、RAMユーザーのAccessKey IDとAccessKey secretを使用してクラウドリソースを管理します。 したがって、Alibaba Cloudアカウントを使用して、RAMユーザーに次の権限を付与する必要があります。

  1. AliyunAdcpFullAccess権限を付与します。 詳細については、「RAMユーザーまたはRAMロールへのシステム権限ポリシーのアタッチ」をご参照ください。

  2. AliyunCSReadOnly権限を付与するか、ACKテンプレート権限を追加します。 次のコードは、ACKテンプレートポリシーの例を示しています。

    {
        "Action": [
            "cs:DescribeTemplates",
            "cs:DescribeTemplateAttribute",
            "cs:DescribeClusterUserKubeconfig"
        ],
        "Resource": [
            "*"
        ],
        "Effect": "Allow"
    }
  3. 自己管理型ArgoCDクラスターに管理者権限を付与します。 詳細については、「RBACを使用したクラスター内のリソースに対する操作権限の管理」をご参照ください。

  4. 次のコマンドを実行して、onectlのRAMユーザーのAccessKey IDとAccessKey secretを設定します。 Access Key IdAccess 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: クラスターの移行

  1. 移行コマンドを簡単にするために、ACK One FleetインスタンスのIDとマスタークラスターのIDが環境変数として指定されます。 onectlは、clusteridパラメーターに基づいてFleetインスタンスとマスタークラスターのkubeconfigファイルを取得し、そのファイルを ~/.onectl/ ディレクトリに保存します。

    export ACKONE_HUB_CLUSTER_ID=ccc47ca148d0147519f229bba********
    export ARGOCD_CLUSTER_ID=ce4bb2004bb0e409eaa4c593d********
  2. 次のいずれかの方法を使用して、クラスターを移行できます。

    1. 方法1: 自己管理型ArgoCD環境のクラスター (非マスタークラスター) をACK OneコンソールACK Oneフリートインスタンスに関連付けます。

    2. 方法2: onectlを使用してクラスターを移行します。

      1. ack_cluster_id: <your ack cluster id> ラベルを自己管理型ArgoCDマスタークラスター内のすべてのクラスターの秘密に追加して、対応するACKクラスターを指定します。 自己管理型ArgoCD UIまたはkubectlを使用して、シークレットを変更できます。

      2. 次のonectlコマンドを実行して、自己管理型ArgoCDマスタークラスターのクラスターをACK One GitOpsに移行します。

        onectl migrate clusters -n argocd
        説明

        セルフマネージドArgoCD環境でCluster Secretにlabelまたはannotationを追加した場合は、この手順を完了した後、ArgoCD UIのACK One GitOpsに追加できます。

ステップ3: Gitリポジトリ設定の移行

  1. 次のコマンドを実行して、GitリソースをマスタークラスターからACK One GitOpsに移行します。

    onectl migrate repos -n argocd
  2. 次のコマンドを実行して、特定の種類のリソースまたはすべての種類のリソースのステータスを確認します。

    #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: アプリケーションの移行

  1. 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.
  2. アプリケーションセンターのマスタークラスターで次のコマンドを実行して、自己管理型ArgoCDからアプリケーションリソースを非カスケード方式で削除します。 これにより、ビジネスに影響がなくなります。

    kubectl --kubeconfig ${ARGOCD_CLUSTER_KUBECONFIG_PATH} delete app ${appName}  -n argocd --cascade=false
    説明

    deleteコマンドで -- cascade=falseパラメーターを指定する必要があります。 それ以外の場合、アプリケーションに関連するKubernetesリソースも削除されます。

よくある質問

ACK One GitOpsに追加されたリポジトリのCONNECTION STATUSパラメーターの値がFailedです。

  1. 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インスタンスがインターネットにアクセスできるかどうかを確認することを推奨します。

  2. 選択した仮想プライベートクラウド (VPC) にインターネットNATゲートウェイが作成されているかどうかを確認します。

    1. ACK Oneコンソールにログインします。 左側のナビゲーションウィンドウで、フリート> フリート情報を選択します。

    2. [基本情報] タブをクリックします。 VPCを見つけ、VPCの横にあるリンクをクリックして、VPC詳細ページに移動します。

    3. [VPC] ページで、[リソース管理] タブをクリックして、[インターネットへのアクセス] セクションを表示します。

argocd-serverにはどのコンテナが含まれていますか?

コンテナー名

説明

argocd-server

Web UI、CLI、および継続的統合または継続的配信 (CI/CD) システムにAPIを公開するために使用される、ArgoCDのAPIサーバーを指定します。

argocd-application-controller

Kubernetesコントローラーを指定します。これは、クラスター内のアプリケーションとプロジェクトリソースを調整し、GitリポジトリからKubernetesクラスターにアプリケーションのステータスを同期するために使用されます。

argocd-applicationset-controller

このコンテナーは、クラスター内のApplicationSetsを調整するために使用されます。 ApplicationSetは、アプリケーションを作成して複数のクラスターにデプロイするために使用されます。

argocd-repo-server

このコンテナーは、Gitリポジトリと対話し、Kubernetesマニフェストを生成して返すことができます。

redis

このコンテナは、Kubernetes APIサーバーとGitリポジトリサーバーに送信されるリクエストを減らすために、ArgoCDのキャッシュ層を提供するために使用されます。

dex

ArgoCDはこのコンテナに依存して、外部OpenID Connect (OIDC) プロバイダーを認証します。 他のツールも使用できます。

argocd-image-updater

このコンテナは、デプロイメントなど、ArgoCDによって管理されるKubernetesワークロードのコンテナイメージに対する変更を検出し、イメージを最新バージョンに自動的に更新するために使用されます。