

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# Argo CD 概念
<a name="argocd-concepts"></a>

Argo CD 透過將 Git 視為應用程式部署的單一事實來源來實作 GitOps。本主題會逐步解說實際範例，然後說明使用 Argo CD 的 EKS 功能時，您需要了解的核心概念。

## Argo CD 入門
<a name="_getting_started_with_argo_cd"></a>

建立 Argo CD 功能後 （請參閱 [建立 Argo CD 功能](create-argocd-capability.md))，您可以開始部署應用程式。此範例會逐步解說註冊叢集和建立應用程式。

### 步驟 1：設定
<a name="_step_1_set_up"></a>

 **註冊您的叢集** （必要）

註冊您要部署應用程式的叢集。在此範例中，我們將註冊執行 Argo CD 的相同叢集 （您可以使用 名稱`in-cluster`來與大多數 Argo CD 範例相容）：

```
# Get your cluster ARN
CLUSTER_ARN=$(aws eks describe-cluster \
  --name my-cluster \
  --query 'cluster.arn' \
  --output text)

# Register the cluster using Argo CD CLI
argocd cluster add $CLUSTER_ARN \
  --aws-cluster-name $CLUSTER_ARN \
  --name in-cluster \
  --project default
```

**注意**  
如需設定 Argo CD CLI 以在 EKS 中使用 Argo CD 功能的詳細資訊，請參閱 [搭配 受管功能使用 Argo CD CLI](argocd-comparison.md#argocd-cli-configuration)。

或者，使用 Kubernetes Secret 註冊叢集 （如需詳細資訊[註冊目標叢集](argocd-register-clusters.md)，請參閱 )。

 **設定儲存庫存取** （選用）

此範例使用公有 GitHub 儲存庫，因此不需要儲存庫組態。對於私有儲存庫，請使用 AWS Secrets Manager、CodeConnections 或 Kubernetes Secrets 設定存取權 （如需詳細資訊[設定儲存庫存取](argocd-configure-repositories.md)，請參閱 )。

對於 AWS 服務 (ECR for Helm Charts、CodeConnections 和 CodeCommit)，您可以直接在應用程式資源中參考它們，而無需建立儲存庫。功能角色必須具有必要的 IAM 許可。如需詳細資訊，請參閱 [設定儲存庫存取](argocd-configure-repositories.md)。

### 步驟 2：建立應用程式
<a name="_step_2_create_an_application"></a>

在 中建立此應用程式資訊清單`my-app.yaml`：

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: guestbook
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/argoproj/argocd-example-apps.git
    targetRevision: HEAD
    path: guestbook
  destination:
    name: in-cluster
    namespace: guestbook
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
```

套用應用程式：

```
kubectl apply -f my-app.yaml
```

套用此應用程式後，Argo CD：1。將應用程式從 Git 同步到您的叢集 （初始部署） 2. 監控 Git 儲存庫的變更 3。自動同步叢集 4 的後續變更。偵測並修正來自所需狀態 5 的任何偏離。在 UI 中提供運作狀態和同步歷史記錄

檢視應用程式狀態：

```
kubectl get application guestbook -n argocd
```

您也可以使用 Argo CD CLI 或 Argo CD UI （可從叢集功能索引標籤下的 EKS 主控台存取） 檢視應用程式。

**注意**  
搭配 受管功能使用 Argo CD CLI 時，請指定命名空間字首為 的應用程式`argocd app get argocd/guestbook`。

**注意**  
在 中使用叢集名稱 `destination.name`（您在註冊叢集時使用的名稱）。受管功能不支援本機叢集內預設值 (`kubernetes.default.svc`)。

## 核心概念
<a name="_core_concepts"></a>

### GitOps 原則和來源類型
<a name="_gitops_principles_and_source_types"></a>

Argo CD 實作 GitOps，其中您的應用程式來源是部署的單一事實來源：
+  **宣告** - 使用 YAML 資訊清單、Helm Chart 或 Kustomize 浮水印宣告所需狀態
+  **已版本化** - 使用完整的稽核線索追蹤每個變更
+  **自動化** - Argo CD 會持續監控來源並自動同步變更
+  **自我修復** - 偵測並修正所需叢集狀態與實際叢集狀態之間的偏離

 **支援的來源類型**：
+  **Git 儲存庫** - GitHub、GitLab、Bitbucket、CodeCommit (HTTPS、SSH 或 CodeConnections)
+  **Helm 登錄檔** - HTTP 登錄檔 （如 `https://aws.github.io/eks-charts`) 和 OCI 登錄檔 （如 `public.ecr.aws`)
+  **OCI 影像** - 包含資訊清單或 Helm Chart 的容器影像 （例如 `oci://registry-1.docker.io/user/my-app`)

這種靈活性可讓組織選擇符合其安全和合規要求的來源。例如，限制從叢集存取 Git 的組織可以使用 Helm Chart 或 OCI 映像的 ECR。

如需詳細資訊，請參閱 Argo CD 文件中的[應用程式來源](https://argo-cd.readthedocs.io/en/stable/user-guide/application-sources/)。

### 同步和調校
<a name="_sync_and_reconciliation"></a>

Argo CD 會持續監控您的來源和叢集，以偵測和修正差異：

1. 輪詢來源以進行變更 （預設：每 6 分鐘）

1. 比較所需狀態與叢集狀態

1. 將應用程式標記為 `Synced`或 `OutOfSync` 

1. 自動同步變更 （如果已設定） 或等待手動核准

1. 同步後監控資源運作狀態

 使用註釋**同步波浪**控制資源建立順序：

```
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "0"  # Default if not specified
```

資源會依波動順序套用 （數字越小，包括負數，例如 `-1`)。如果未指定 Wave`0`，則預設為 Wave。這可讓您在部署 (wave `-1`) 之前建立相依性，例如 命名空間 (wave )，再部署 (wave `0`) 服務 (wave `1`)。

 **自我修復**會自動還原手動變更：

```
spec:
  syncPolicy:
    automated:
      selfHeal: true
```

**注意**  
受管功能使用註釋型資源追蹤 （非標籤型），以便與 Kubernetes 慣例和其他工具更相容。

如需同步階段、勾點和進階模式的詳細資訊，請參閱 [Argo CD 同步文件](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-waves/)。

### 應用程式運作狀態
<a name="_application_health"></a>

Argo CD 會監控應用程式中所有資源的運作狀態：

 **運作狀態**：\* **正常運作** - 所有資源如預期執行 \* **進行中** - 正在建立或更新的資源 \* **降級** - 部分資源運作狀態不佳 (Pod 當機、任務失敗） \* **已暫停** - 應用程式刻意暫停 \* **遺失** - Git 中定義的資源不存在於叢集中

Argo CD 具有常見 Kubernetes 資源 （部署、StatefulSets、任務等） 的內建運作狀態檢查，並支援 CRDs的自訂運作狀態檢查。

應用程式運作狀態由其所有資源決定 - 如果任何資源為 `Degraded`，則應用程式為 `Degraded`。

如需詳細資訊，請參閱 Argo CD 文件中的[資源運作](https://argo-cd.readthedocs.io/en/stable/operator-manual/health/)狀態。

### 多叢集模式
<a name="_multi_cluster_patterns"></a>

Argo CD 支援兩種主要部署模式：

 **Hub-and-spoke** - 在部署到多個工作負載叢集的專用管理叢集上執行 Argo CD： \* 集中控制和可見性 \* 跨所有叢集的一致政策 \* 一個要管理的 Argo CD 執行個體 \* 控制平面和工作負載之間的明確分離

 **每個叢集** - 在每個叢集上執行 Argo CD，僅管理該叢集的應用程式：\* 叢集分離 （一個故障不會影響其他故障） \* 簡化聯網 （無跨叢集通訊） \* 更輕鬆地初始設定 （無叢集註冊）

為管理許多叢集的平台團隊選擇hub-and-spoke，或為獨立團隊選擇每個叢集，或當叢集必須完全隔離時。

如需多叢集組態的詳細資訊，請參閱 [Argo CD 考量事項](argocd-considerations.md)。

### 專案
<a name="_projects"></a>

專案提供應用程式的邏輯分組和存取控制：
+  **來源限制** - 限制哪些 Git 儲存庫可以使用
+  **目的地限制** - 限制哪些叢集和命名空間可以成為目標
+  **資源限制** - 限制可以部署哪些 Kubernetes 資源類型
+  **RBAC 整合** - 將專案映射至 AWS Identity Center 使用者和群組 IDs

應用程式屬於單一專案。如果未指定，他們會使用 `default`專案，該專案預設沒有限制。針對生產用途，請編輯`default`專案以限制存取，並建立具有適當限制的新專案。

如需專案組態和 RBAC 模式，請參閱 [設定 Argo CD 許可](argocd-permissions.md)。

### 同步選項
<a name="_sync_options"></a>

使用常用選項微調同步行為：
+  `CreateNamespace=true` - 自動建立目的地命名空間
+  `ServerSideApply=true` - 使用伺服器端套用以獲得更好的衝突解決
+  `SkipDryRunOnMissingResource=true` - 當 CRDs尚不存在時略過試轉 （適用於 kro 執行個體）

```
spec:
  syncPolicy:
    syncOptions:
    - CreateNamespace=true
    - ServerSideApply=true
    - SkipDryRunOnMissingResource=true
```

如需同步選項的完整清單，請參閱 [Argo CD 同步選項文件](https://argo-cd.readthedocs.io/en/stable/user-guide/sync-options/)。

## 後續步驟
<a name="_next_steps"></a>
+  [設定儲存庫存取](argocd-configure-repositories.md) - 設定 Git 儲存庫存取
+  [註冊目標叢集](argocd-register-clusters.md) - 註冊目標叢集以進行部署
+  [建立應用程式](argocd-create-application.md) - 建立您的第一個應用程式
+  [Argo CD 考量事項](argocd-considerations.md) - EKS 特定模式、Identity Center 整合和多叢集組態
+  [Argo CD 文件](https://argo-cd.readthedocs.io/en/stable/) - 完整的 Argo CD 文件，包括同步勾點、運作狀態檢查和進階模式