ACK One GitOps は ArgoCD をベースに構築されており、Git リポジトリを信頼できる唯一の情報源として使用して、宣言的にアプリケーションのデプロイメントを管理できます。クラスター間で YAML テンプレートを配布する必要はありません。このトピックでは、ArgoCD コンソールと ArgoCD コマンドラインインターフェイス (CLI) の両方を使用して、アプリケーションのデプロイ、更新、ロールバックを行う方法を説明します。
学習内容
Git リポジトリを ACK One GitOps に接続する
ArgoCD アプリケーションを作成し、特定のクラスターにデプロイする
kubectl amcコマンドを使用してデプロイメントを検証する新しいイメージタグを Git にプッシュしてアプリケーションを更新する
ArgoCD の履歴を使用して以前のバージョンにロールバックする
前提条件
開始する前に、以下の準備が整っていることを確認してください。
フリート管理が有効
Fleet インスタンスに関連付けられた 2 つのクラスター — サービスプロバイダクラスターとサービス利用者クラスター。詳細については、「クラスターを Fleet インスタンスに関連付ける」をご参照ください。
ACK One コンソールからダウンロードしたフリートインスタンスの kubeconfig ファイルがあり、
kubectlがフリートインスタンスに接続されていること最新の Alibaba Cloud CLI がインストールおよび設定されていること。詳細については、「Alibaba Cloud CLI のインストール」および「認証情報の設定」をご参照ください。Resource Access Management (RAM) ユーザーを使用する場合は、RAM ユーザーに [AliyunAdcpFullAccess] 権限を付与します。詳細については、「RAM ユーザーへの権限付与」をご参照ください。
最新の ArgoCD CLI がインストールされていること。github.com/argoproj/argo-cd/releases からダウンロードしてください。
GitOps システムにログインしていること。詳細は、「GitOps システムへのログイン」をご参照ください。
ArgoCD コンソールを使用したアプリケーションのデプロイ
手順1:Git リポジトリの追加とアプリケーションのデプロイ
1. ArgoCD コンソールにログインします。
ブラウザで ArgoCD サーバーのドメインを開きます。ドメイン名については、「GitOps システムへのログイン」をご参照ください。
ArgoCD のホームページで、[LOGIN VIA ALIYUN] をクリックします。
2. ソース Git リポジトリを追加します。
左側のナビゲーションウィンドウで、[設定] > [リポジトリ] を選択し、[+ リポジトリを接続] をクリックします。
リポジトリの詳細を入力し、[CONNECT] をクリックします。

[CONNECTION STATUS] 列に Successful と表示されると、リポジトリは接続されています。

3. ArgoCD アプリケーションを作成します。
[Applications] ページで、[+ NEW APP] をクリックし、アプリケーションの詳細を入力します。ArgoCD はソース Git リポジトリから Helm チャートをプルし、指定されたクラスターのデフォルト名前空間にデプロイします。

パネルの上部にある [CREATE] をクリックします。
[Applications] ページに echo-server-app アプリケーションが表示されます。

4. アプリケーションをクラスターに同期します。
アプリケーションの下にある [SYNC] をクリックしてデプロイメントをトリガーします。
[Status] に Healthy と Synced が表示されると、アプリケーションはターゲットクラスターで実行されています。アプリケーション名をクリックすると、すべての Kubernetes リソースのトポロジーとステータスが表示されます。

手順2:デプロイメントの検証
フリートインスタンスの kubeconfig を使用して以下のコマンドを実行し、アプリケーションが実行中であることを確認します。
1. フリートインスタンスに関連付けられているクラスターをリストします。
kubectl amc get managedcluster期待される出力:
Name Alias HubAccepted
cd**** ackpro-cluster2 true
ce**** ackpro-cluster1 true // アプリケーションがデプロイされているクラスター。出力には、フリートインスタンスに登録されているすべてのクラスターがリストされます。ce**** (ackpro-cluster1) は、アプリケーションがデプロイされた場所です。
2. ターゲットクラスターのリソースを確認します。
kubectl amc get all -n default -m ce****-m フラグは、特定のマネージドクラスターをターゲットにします。
期待される出力:
Run on ManagedCluster ce**** (ackpro-cluster1)
NAME READY STATUS RESTARTS AGE
pod/echo-server-5cf54bdbcb-jv58k 1/1 Running 0 59m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/echo-server LoadBalancer 192.XX.XX.XX 39.XX.XX.XX 8080:31769/TCP 59m 21d
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/echo-server 1/1 1 1 59mPod は 1/1 Running と表示され、LoadBalancer サービスには外部 IP が割り当てられています。アプリケーションはトラフィックを受信する準備ができています。
3. アプリケーションのバージョンを確認します。
curl http://39.XX.XX.XX:8080/version期待される出力:
"Hello Echo Server v1.0"アプリケーションは v1.0 で実行されています。
手順3:アプリケーションの更新
1. イメージタグの変更を Git にプッシュします。
Git リポジトリで、Pod のイメージタグを v1.0 から v2.0 に変更します。

Git リポジトリのタグが変更されたため、ArgoCD アプリケーションには OutOfSync と表示されます。
2. 差分を確認します。
[OutOfSync] アイコンをクリックして変更内容を確認します。


3. 更新を同期します。
[SYNC] をクリックします。同期が完了すると、Pod のイメージタグは v2.0 になります。

4. 更新されたバージョンを確認します。
curl http://39.XX.XX.XX:8080/version期待される出力:
"Hello Echo Server v2.0"手順4:以前のバージョンへのロールバック
アプリケーションが v2.0 に更新された後も、ArgoCD はロールバックのために元の ReplicaSet を保持します。
1. 両方の ReplicaSet がクラスターに存在することを確認します。
kubectl amc get replicaset -n default -m ce****期待される出力:
Run on ManagedCluster ce**** (ackpro-cluster1)
NAME DESIRED CURRENT READY AGE
echo-server-55664c4677 1 1 1 26m // バージョンは v2.0 です。
echo-server-5cf54bdbcb 0 0 0 109m // バージョンは v1.0 です。2. v1.0 にロールバックします。
アプリケーションページで、[HISTORY AND ROLLBACK] をクリックして、すべての履歴バージョンを表示します。

v1.0 を選択し、[Rollback] をクリックします。

Pod のイメージタグは v1.0 に戻ります。クラスターの状態が Git リポジトリ (まだ v2.0) と異なるため、アプリケーションのステータスは OutOfSync に変わります。[SYNC] をクリックして同期タスクを開始します。
ArgoCD は、ソース Git リポジトリから情報を自動的に同期します。
ArgoCD CLI を使用したアプリケーションのデプロイ
手順1:ArgoCD サーバーへのログイン
1. ArgoCD サーバーのロードバランサー IP を取得します。
kubectl get svc -nargocd argocd-server -ojsonpath='{.status.loadBalancer.ingress[0].ip}'2. admin パスワードを取得します。
kubectl -nargocd get secret argocd-initial-admin-secret -ojsonpath='{.data.password}' |base64 -d3. ログインします。
argocd login <argocd server lb ip>
Username: admin
Password:
'admin:login' logged in successfully
Context '<argocd server lb ip>' updated手順2:Git リポジトリの追加
argocd repo add https://github.com/AliyunContainerService/gitops-demo.git --name echo-server期待される出力:
Repository 'https://github.com/AliyunContainerService/gitops-demo.git' addedリポジトリが接続されていることを確認します。
argocd repo list期待される出力:
TYPE NAME REPO INSECURE OCI LFS CREDS STATUS MESSAGE PROJECT
git https://github.com/AliyunContainerService/gitops-demo.git false false false false Successful default手順3:利用可能なクラスターの確認
argocd cluster list期待される出力:
SERVER NAME VERSION STATUS MESSAGE PROJECT
https://10.XX.XX.XX:XX ce****-ackpro-cluster1 Unknown Cluster has no applications and is not being monitored.
https://10.XX.XX.XX:XX cd****-ackpro-cluster2 Unknown Cluster has no applications and is not being monitored.
https://kubernetes.default.svc in-cluster Unknown Cluster has no applications and is not being monitored.ACK One は、新しく関連付けられたクラスターに関する情報を ArgoCD に自動的に同期するため、フリートインスタンスに追加されたクラスターはすべてここに表示されます。
手順4:アプリケーションの作成とデプロイ
1. アプリケーションを作成します。
argocd app create echo-server --repo https://github.com/AliyunContainerService/gitops-demo.git --path manifests/helm --revision one-demo --dest-namespace default --dest-server https://10.0.XX.XX:6443期待される出力:
application 'echo-server' created2. アプリケーションを同期して、Git から構成をプルし、ターゲットクラスターにデプロイします。
argocd app sync echo-serverその他の操作
複数のクラスターへのデプロイ:ArgoCD ApplicationSet を使用して、同一アプリケーションを複数のクラスターに同時にデプロイします。詳細については、「ApplicationSet を使用した複数アプリケーションの作成」をご参照ください。
OCI Helm チャートのデプロイ:ACK One GitOps を使用して Container Registry Enterprise Edition の OCI Helm チャートをデプロイします。 詳細については、「ACK One GitOps を使用して Container Registry Enterprise Edition の OCI Helm チャートをデプロイする」をご参照ください。