

 **協助改進此頁面** 

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

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

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

# 設定 Argo CD 設定
<a name="argocd-configure-settings"></a>

Argo CD 的 EKS 功能提供全受管 Argo CD 體驗。上游 Argo CD 提供許多選用設定和功能，而 功能支援其中一部分。對於支援的設定，您可以透過叢集中的 ConfigMap，以與上游 Argo CD `argocd-cm` 相同的方式進行設定。功能會從該 ConfigMap 讀取支援的欄位，並將其套用至受管 Argo CD 執行個體。

下列各節說明如何為支援的設定設定設定 `argocd-cm` ConfigMap。

## 先決條件
<a name="_prerequisites"></a>

設定 Argo CD 設定之前，您必須擁有：
+ 建立 Argo CD 功能的 EKS 叢集 （請參閱 [建立 Argo CD 功能](create-argocd-capability.md))
+ 在 功能中為 Argo CD 設定的命名空間 （預設為`argocd`命名空間）
+ 設定為與您的叢集通訊的 `kubectl` CLI

## 設定 argocd-cm ConfigMap
<a name="_configure_the_argocd_cm_configmap"></a>

若要設定支援的 Argo CD 設定，請在叢集`argocd-cm`中建立名為 的 ConfigMap。受管功能會從此 ConfigMap 讀取支援的設定，並將其套用至受管 Argo CD 執行個體。如需 功能支援的設定及其套用方式，請參閱 [支援的設定](#argocd-supported-settings)。

建立具有下列需求的 ConfigMap：
+ 為 ConfigMap 命名`argocd-cm`。
+ 在 功能中為 Argo CD 設定的命名空間中建立它 （您在建立 功能時在 Argo CD 組態中設定的命名空間）。根據預設，這是`argocd`命名空間。
+ 套用標籤 `app.kubernetes.io/part-of: argocd`。此標籤是必要的，符合上游 Argo CD 行為。
+ 使用與上游 Argo CD 相同的欄位格式和金鑰。

下列範例顯示 ConfigMap 結構，其設定會在 Argo CD UI 上顯示橫幅。`data` 以相同方式新增 下的其他支援設定。

```
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
  labels:
    app.kubernetes.io/part-of: argocd
data:
  ui.bannercontent: "Production cluster"
```

**重要**  
ConfigMap 不是安全存放區。請勿在 ConfigMap `argocd-cm` 中放置秘密、登入資料或其他敏感資訊。

## 功能如何套用您的設定
<a name="_how_the_capability_applies_your_settings"></a>

您可以在自己的叢集中建立 `argocd-cm` ConfigMap 來設定 Argo CD。此功能會將 ConfigMap 中支援的設定套用至受管 Argo CD 執行個體。它只會套用支援的設定，並忽略您設定的任何其他欄位或功能。任何未列在 中的設定[支援的設定](#argocd-supported-settings)都不受支援，而且沒有任何效果。

該功能會驗證您設定的值。如果值無效或格式不正確，則 功能會忽略該值，並繼續執行該設定的預設組態。ConfigMap 中的錯誤不會破壞您的受管 Argo CD 執行個體。

**注意**  
此功能會從叢集中的 `argocd-cm` ConfigMap 套用組態。具有此 ConfigMap 寫入存取權的任何主體都可以變更受管 Argo CD 執行個體的組態。叢集的 Kubernetes 角色型存取控制 (RBAC) 管理對 ConfigMap 的存取，而不是控制功能資源的 IAM 許可。作為安全最佳實務，將修改 Argo CD 命名空間中物件的許可授予信任的使用者和服務帳戶。由於 Kubernetes RBAC 會依資源類型範圍許可，因此您仍然可以授予其他使用者所需的存取權。例如，您可以允許開發人員建立和管理應用程式，但不能修改 ConfigMaps。這可防止他們變更`argocd-cm`組態。  
如需 Argo CD 功能的共同責任模型、Kubernetes RBAC 和命名空間隔離的詳細資訊，請參閱 [EKS 功能的安全考量](capabilities-security.md)。若要控制 Argo CD 中的存取，請參閱 [設定 Argo CD 許可](argocd-permissions.md)。

## 支援的設定
<a name="argocd-supported-settings"></a>

下列各節列出 受管功能支援的`argocd-cm`設定，依類別分組。每個設定都使用與上游 Argo CD 相同的金鑰和格式。每個資料表的**套用值方式**欄會顯示您的值是否附加至或覆寫功能的預設組態。如需每個設定的完整說明，請參閱 Argo CD 文件網站上的 [argocd-cm ConfigMap 參考](https://argo-cd.readthedocs.io/en/stable/operator-manual/argocd-cm-yaml/)。

### 使用者界面
<a name="_user_interface"></a>

這些設定會自訂 Argo CD UI。


| 設定 | 說明 | 如何套用您的值 | 
| --- | --- | --- | 
|  `ui.bannercontent`  | 在整個 UI 中顯示的橫幅文字，例如環境識別符或維護通知。 | 覆寫 | 
|  `ui.bannerurl`  | 橫幅連結的 URL，例如 Runbook 或 Wiki 頁面。 | 覆寫 | 
|  `ui.bannerpermanent`  | 設定為 `true`以防止使用者關閉橫幅。 | 覆寫 | 
|  `ui.bannerposition`  | 橫幅出現的位置：`bottom`、 `top`或 `both`。 | 覆寫 | 
|  `ui.cssurl`  | 用於品牌或樣式的自訂 CSS 檔案 URL。CSS 會在您的瀏覽器中執行。 | 覆寫 | 

### 資源設定
<a name="_resource_settings"></a>

這些設定控制功能如何監看、比較和顯示 Argo CD 管理的資源。


| 設定 | 說明 | 如何套用您的值 | 
| --- | --- | --- | 
|  `resource.customizations.ignoreDifferences.<group>_<kind>`  | 當 Argo CD 針對資源類型比較 Git 與叢集時要忽略的欄位，例如由 Horizontal Pod Autoscaler 管理的複本計數。 | 附加 | 
|  `resource.customizations.ignoreDifferences.all`  | 比較 Git 與叢集時要忽略的欄位，套用至所有資源類型。 | 附加 | 
|  `resource.customizations.ignoreResourceUpdates.<group>_<kind>`  | Argo CD 在決定更新事件是否應觸發調節時忽略的欄位，以降低負載。事件仍然發生，Argo CD 只會忽略這些欄位的變更。 | 附加 | 
|  `resource.customizations.ignoreResourceUpdates.all`  | Argo CD 在處理更新事件時忽略的欄位，套用至所有資源類型。 | 附加 | 
|  `resource.customizations.knownTypeFields.<group>_<kind>`  | 自訂資源的欄位類型 （清單、映射或基本），讓 Argo CD 計算準確的差異，而不是顯示全欄位取代。 | 附加 | 
|  `resource.customizations.health.<group>_<kind>`  | 資源類型的自訂運作狀態檢查，定義為 Lua 指令碼。功能包括 ACK 和 kro 資源的內建運作狀態檢查。請參閱 [自訂運作狀態檢查](#argocd-custom-health-checks)。 | 覆寫 | 
|  `resource.exclusions`  | Argo CD 未監看的資源類型，可改善高流失類型的效能。 | 附加 | 
|  `resource.inclusions`  | Argo CD 監看的資源類型。設定時，Argo CD 只會監看列出的類型。 | 附加 | 
|  `resource.compareoptions`  | 控制 Argo CD 如何計算差異的選項，例如 `ignoreAggregatedRoles`。 | 覆寫 | 
|  `resource.respectRBAC`  | 控制器是否只監控其具有 RBAC 讀取許可的資源。接受 `normal`或 `strict`。 | 覆寫 | 
|  `resource.customLabels`  | 要在 UI 資源檢視中顯示的其他資源標籤。 | 覆寫 | 
|  `resource.includeEventLabelKeys`  | 要複製到 Argo CD 產生的 Kubernetes 事件的應用程式和專案標籤。 | 覆寫 | 
|  `resource.excludeEventLabelKeys`  | 從 Argo CD 產生的 Kubernetes 事件中排除的標籤。 | 覆寫 | 
|  `resource.sensitive.mask.annotations`  | 當 UI 或 CLI 顯示秘密時要遮罩的註釋。 | 覆寫 | 

### 儲存庫和工具設定
<a name="_repository_and_tool_settings"></a>

這些設定控制 Argo CD 用來轉譯資訊清單的資訊清單工具。


| 設定 | 說明 | 如何套用您的值 | 
| --- | --- | --- | 
|  `kustomize.enable`  | Kustomize 是否已啟用為資訊清單來源類型。 | 覆寫 | 
|  `helm.enable`  | Helm 是否啟用為資訊清單來源類型。 | 覆寫 | 
|  `jsonnet.enable`  | Jsonnet 是否啟用為資訊清單來源類型。 | 覆寫 | 
|  `kustomize.buildOptions`  | 傳遞至每個 的全域命令列旗標`kustomize build`。功能支援一部分旗標。請參閱 [支援的 kustomize.buildOptions 旗標](#argocd-kustomize-build-options)。 | 覆寫 | 

#### 支援的 kustomize.buildOptions 旗標
<a name="argocd-kustomize-build-options"></a>

對於 `kustomize.buildOptions`， 功能會將您的值篩選為一組安全、支援的旗標。它不支援允許組建讀取任意檔案或執行任意程式碼的旗標。它會個別捨棄任何不支援的旗標或無效的值，並套用其餘支援的旗標。您可以撰寫 `--flag value`或 `--flag=value`形式的旗標。


| 旗標 | 支援的值 | 備註 | 
| --- | --- | --- | 
|  `--reorder`  |  `legacy`, `none`  | 僅變更轉譯 YAML 的順序。 | 
|  `--enable-helm`  | Boolean | 從 路徑執行受管 Helm 二進位檔。 | 
|  `--enable-managedby-label`  | Boolean | 僅新增標籤。 | 

此功能會捨棄任何其他旗標，包括 `--load-restrictor`、 `--enable-exec`和 `--enable-alpha-plugins`。

## 自訂運作狀態檢查
<a name="argocd-custom-health-checks"></a>

Argo CD 會評估其部署之資源的運作狀態。對於 部署和服務等標準 Kubernetes 資源，Argo CD 具有內建的運作狀態邏輯。對於 Argo CD 無法辨識的自訂資源，它沒有內建的運作狀態邏輯，也不會報告運作狀態。

當自訂資源沒有運作狀態檢查時，Argo CD 會報告沒有運作狀態，並將其排除在應用程式的整體運作狀態之外。因此，應用程式可以報告`Healthy`，即使其資源仍在佈建或失敗。這也表示同步波可以在這些資源就緒之前進行，因為同步排序取決於報告的運作狀態。

透過自訂運作狀態檢查，您可以定義自訂資源的運作狀態邏輯，因此 Argo CD 會正確報告準確的運作狀態和序列部署。您可以使用相同的組態金鑰，以您在上游 Argo CD 中相同的方式定義自訂運作狀態檢查。現有的上游指令碼和社群範例適用於 Argo CD 的 EKS 功能，無需修改。

### ACK 和 kro 的內建運作狀態檢查
<a name="_built_in_health_checks_for_ack_and_kro"></a>

Argo CD 的 EKS 功能包含 [AWS Kubernetes (ACK) ](ack.md)和 [kro (Kube Resource Orchestrator)](kro.md) 資源控制器的內建運作狀態檢查。這些資源會報告準確的運作狀態，無需額外的組態。

若要變更 功能如何評估 ACK 或 kro 資源的運作狀態，您可以定義該資源類型的自訂運作狀態檢查。您為資源類型定義的自訂運作狀態檢查會覆寫該類型的內建運作狀態檢查。

### 撰寫自訂運作狀態檢查
<a name="_write_a_custom_health_check"></a>

使用下列格式的金鑰，將 Lua 指令碼新增至 `argocd-cm` ConfigMap 來定義自訂運作狀態檢查：

```
resource.customizations.health.<group>_<kind>
```

以自訂資源的 API 群組取代 {{<group>}}，並以其類型取代 {{<kind>}}。例如，具有 API 群組`example.com`和種類的自訂資源的金鑰`Database`為 `resource.customizations.health.example.com_Database`。

Lua 指令碼可透過 全域`obj`變數存取資源物件。指令碼必須傳回 欄位`status`設定為 `Healthy`、`Degraded`、 `Progressing`或 之一的資料表`Suspended`。指令碼也可以設定選用`message`欄位，以提供描述性狀態訊息。

下列範例 ConfigMap 會定義`Database`自訂資源的運作狀態檢查。當資源的狀態階段為 `Healthy`時`Ready`，指令碼會回報資源，`Progressing`否則會回報資源：

```
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
  labels:
    app.kubernetes.io/part-of: argocd
data:
  resource.customizations.health.example.com_Database: |
    hs = {}
    hs.status = "Progressing"
    hs.message = "Waiting for the resource to become ready"
    if obj.status ~= nil then
      if obj.status.phase == "Ready" then
        hs.status = "Healthy"
        hs.message = "Database is ready"
      end
    end
    return hs
```

如需運作狀態檢查指令碼格式、內建運作狀態檢查清單，以及您可以調整的社群範例的詳細資訊，請參閱 Argo CD 文件網站上的 [Resource Health](https://argo-cd.readthedocs.io/en/stable/operator-manual/health/)。

### 安全與限制
<a name="_safety_and_limitations"></a>

透過 受管功能，您的自訂運作狀態檢查指令碼會在隔離、全受管的運算中執行。每個功能都會隔離執行環境，而且無法存取叢集的資料或 AWS APIs。您不會佈建、修補或操作執行環境的任何部分。

當您撰寫自訂運作狀態檢查以搭配 EKS 功能使用時，請注意下列事項：
+  **標準 Lua 程式庫無法使用。**`useOpenLibs` 選項一律停用，這是上游 Argo CD 中的預設值。指令碼無法存取作業系統或檔案系統。如果您從依賴標準 Lua 程式庫的自我管理 Argo CD 遷移指令碼，則可能不會在 功能中以相同的方式執行。建議您在開發環境中測試運作狀態檢查指令碼，然後再在生產環境中使用它們。

如果運作狀態評估暫時無法使用， 功能會報告受影響的自訂資源，`Progressing`而不是移除其運作狀態。這可讓受影響的資源在應用程式的運作狀態中可見，直到評估復原為止。

### 驗證自訂運作狀態檢查
<a name="_verify_a_custom_health_check"></a>

套用或更新 `argocd-cm` ConfigMap 之後，請確認運作狀態檢查為作用中：

1. 在 Argo CD UI 中，選擇包含您定義運作狀態檢查之自訂資源的應用程式。確認資源報告指令碼傳回的運作狀態。或者，執行`argocd app get {{<application-name>}} `並檢閱資源的運作狀態。

1. 如果資源未報告預期的運作狀態，請確認下列事項：
   + ConfigMap 名為 ，`argocd-cm`位於 功能中為 Argo CD 設定的命名空間中。
   + ConfigMap 具有必要的`app.kubernetes.io/part-of: argocd`標籤。
   + 運作狀態檢查金鑰`<group>_<kind>`針對資源類型使用正確的 。