本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Helm 部署 OTel 容器洞見
Amazon CloudWatch 可觀測性 Helm Chart 為 OTel Container Insights 提供彈性的部署選項。它會使用 OpenTelemetry 檔案日誌接收器安裝 CloudWatch 代理程式 (OTel 型) 以進行日誌收集。Helm Chart 維護於 https://https://github.com/aws-observability/helm-charts
當您需要下列一或多個功能時,請使用 Helm Chart:
-
精細控制代理程式組態
-
使用 filelog 接收器的 OTel 原生日誌集合 (無 Fluent Bit 相依性)
-
透過 cert-manager 進行自訂 TLS 憑證管理
-
非 EKS Kubernetes 叢集 (ROSA、自我管理 Kubernetes)
-
使用 ArgoCD 或 Flux 的 GitOps 工作流程
先決條件
使用 Helm 部署 OTel Container Insights 之前,請確認您符合下列要求。
-
執行 Kubernetes 1.28 版或更新版本的現有 Amazon EKS 叢集
-
Helm 3.9 版或更新版本
-
kubectl設定為與您的目標叢集通訊 -
IAM 許可:連接至客服人員角色的
CloudWatchAgentServerPolicy受管政策 -
針對服務帳戶 (IRSA) 的 IAM 角色設定的 OpenID Connect (OIDC) 提供者
-
從叢集到 CloudWatch 端點的傳出網際網路存取
安裝 Helm Chart
使用 Helm Chart 完成下列步驟以部署 OTel Container Insights。
步驟 1:新增 Helm 儲存庫
將 AWS 可觀測性 Helm Chart 儲存庫新增至本機 Helm 組態。
新增 Helm 儲存庫
-
執行下列命令來新增儲存庫。
helm repo add aws-observability \ https://aws-observability.github.io/helm-charts -
更新儲存庫以取得最新的圖表版本。
helm repo update
步驟 2:建立 IAM 角色
建立允許 CloudWatch 代理程式將資料傳送至 CloudWatch 的 IAM 角色。此角色使用 IRSA 將 IAM 許可與 Kubernetes 服務帳戶建立關聯。
建立 CloudWatch 代理程式的 IAM 角色
-
擷取叢集的 OIDC 發行者 URL。使用 Amazon EKS 叢集的名稱取代
cluster-name。aws eks describe-cluster \ --namecluster-name\ --query "cluster.identity.oidc.issuer" \ --output text -
使用 IRSA 的信任政策建立 IAM 角色。將
account-id取代為 AWS 您的帳戶 ID,並將oidc-id取代為上一個步驟的 OIDC 提供者 ID (之後的部分https://oidc.eks.region.amazonaws.com/id/)。aws iam create-role \ --role-name EKS-CW-Observability-Role \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [{ "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::account-id:oidc-provider/oidc.eks.region.amazonaws.com/id/oidc-id" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.region.amazonaws.com/id/oidc-id:sub": "system:serviceaccount:amazon-cloudwatch:cloudwatch-agent" } } }] }' -
將
CloudWatchAgentServerPolicy受管政策連接至角色。aws iam attach-role-policy \ --role-name EKS-CW-Observability-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
步驟 3:安裝圖表
在啟用 OTel Container Insights 的情況下安裝 Amazon CloudWatch 可觀測性 Helm Chart。
安裝 Helm Chart
-
執行下列命令。將
cluster-name取代為您的 Amazon EKS 叢集名稱、將region取代為您的 AWS 區域,並將account-id取代為您的 AWS 帳戶 ID。helm install amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name\ --set region=region\ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true重要
otelContainerInsights.enabled參數是必要參數。預設不會啟用 OTel Container Insights。
步驟 4:驗證安裝
確認 Helm Release 和代理程式 Pod 已成功部署。
驗證 Helm 安裝
-
確認 Helm 發行狀態顯示
deployed。helm list -n amazon-cloudwatch -
確認運算子 Pod 正在執行。
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability -
確認 CloudWatch 代理程式 Pod 在所有節點上執行。
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent所有代理程式 Pod 必須顯示
Running狀態。
金鑰組態選項
下表說明您可以設定的金鑰 Helm Chart 值。使用 --set旗標或自訂values.yaml檔案傳遞這些值。
叢集設定
| 參數 | 預設 | 說明 |
|---|---|---|
clusterName |
— | Amazon EKS 叢集的名稱。必要. |
region |
— | 叢集執行所在的 AWS 區域。必要. |
otelContainerInsights.enabled |
false |
使用 filelog 接收器啟用 OTel Container Insights。 |
容器日誌 (OTel 檔案日誌接收器)
| 參數 | 預設 | 說明 |
|---|---|---|
containerLogs.enabled |
true |
使用 OTel 檔案日誌接收器啟用容器日誌收集。 |
containerLogs.logGroupName |
/aws/containerinsights/ |
容器日誌的 CloudWatch Logs 日誌群組名稱。 |
containerLogs.logRetentionDays |
7 |
在 CloudWatch Logs 中保留容器日誌的天數。 |
代理程式 (指標)
| 參數 | 預設 | 說明 |
|---|---|---|
agent.enabled |
true |
啟用 CloudWatch 代理程式 DaemonSet 進行指標收集。 |
agent.serviceAccount.name |
cloudwatch-agent |
代理程式的 Kubernetes 服務帳戶名稱。 |
agent.resources.requests.cpu |
100m |
代理程式容器的 CPU 請求。 |
agent.resources.requests.memory |
128Mi |
代理程式容器的記憶體請求。 |
agent.resources.limits.cpu |
200m |
代理程式容器的 CPU 限制。 |
agent.resources.limits.memory |
256Mi |
代理程式容器的記憶體限制。 |
GPU 監控
| 參數 | 預設 | 說明 |
|---|---|---|
agent.config.logs.metrics_collected.kubernetes.enhanced_container_insights |
true |
啟用增強型容器洞見指標,包括 GPU 指標。 |
dcgmExporter.enabled |
false |
啟用適用於 NVIDIA GPU 指標的 DCGM 匯出工具。需要 NVIDIA GPU 節點。 |
neuronMonitor.enabled |
false |
為 AWS Inferentia 和 Trainium 指標啟用 Neuron 監控。 |
TLS 憑證管理
CloudWatch 可觀測性運算子需要 TLS 憑證才能進行 Webhook 通訊。根據預設,圖表會產生自我簽署的憑證。您可以使用 cert-manager 自動管理憑證。
自我簽署憑證 (預設)
根據預設,Helm Chart 會產生自我簽署的 CA,並從該 CA 發出憑證。不需任何其他設定。圖表會在升級期間自動輪換這些憑證。
cert-manager 整合
您可以使用 cert-manager 來自動化憑證發行和續約。當您的組織需要外部簽署的憑證或集中式憑證管理時,此方法非常有用。
設定 cert-manager 整合
-
確認叢集中已安裝 cert-manager。
kubectl get pods -n cert-manager -
在啟用 cert-manager 的情況下安裝 Helm Chart。將
cluster-name取代為您的 Amazon EKS 叢集名稱、將region取代為您的 AWS 區域,並將account-id取代為您的 AWS 帳戶 ID。helm install amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --create-namespace \ --set clusterName=cluster-name\ --set region=region\ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true \ --set admissionWebhooks.certManager.enabled=true
啟用 cert-manager 時,圖表會建立 cert-manager 用來自動發行和管理 Webhook TLS 憑證Certificate的資源。
注意
您也可以將 cert-manager 與外部發行者搭配使用,例如 HashiCorp Vault。若要設定外部發行者,請設定 admissionWebhooks.certManager.issuerRef.name和 admissionWebhooks.certManager.issuerRef.kind 以符合您的 cert-manager 發行者。
升級圖表
升級 Helm Chart 以套用新的組態值或更新至較新的圖表版本。
升級 Helm Chart
-
更新 Helm 儲存庫以取得最新的圖表版本。
helm repo update -
使用所需的值執行升級命令。將
cluster-name取代為您的 Amazon EKS 叢集名稱、將region取代為您的 AWS 區域,並將account-id取代為您的 AWS 帳戶 ID。helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --set clusterName=cluster-name\ --set region=region\ --set agent.serviceAccount.name=cloudwatch-agent \ --set "agent.serviceAccount.annotations.eks\\.amazonaws\\.com/role-arn=arn:aws:iam::account-id:role/EKS-CW-Observability-Role" \ --set otelContainerInsights.enabled=true -
確認升級已成功完成。
helm list -n amazon-cloudwatch修訂編號必須遞增,且狀態必須顯示
deployed。
提示
為了避免在升級期間遺失組態值,請將您的自訂值存放在values.yaml檔案中,並與 -f values.yaml旗標一起傳遞。
解除安裝圖表
若要從叢集中移除 OTel Container Insights,請解除安裝 Helm 版本。
解除安裝 Helm Chart
-
執行下列命令來解除安裝 版本。
helm uninstall amazon-cloudwatch-observability \ --namespace amazon-cloudwatch -
或者,如果不再需要命名空間,請將其刪除。
kubectl delete namespace amazon-cloudwatch
解除安裝 Helm Chart 之後,IAM 角色和 OIDC 提供者組態會保留在您的 AWS 帳戶中。如果不再需要這些資源,請分別刪除這些資源。
aws iam detach-role-policy \ --role-name EKS-CW-Observability-Role \ --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy aws iam delete-role \ --role-name EKS-CW-Observability-Role
驗證 CloudWatch 中的資料
安裝 Helm Chart 之後,Container Insights 資料會在 3 到 5 分鐘內顯示在 CloudWatch 中。
檢查指標
在 CloudWatch 中檢查指標
-
透過 https://console.aws.amazon.com/cloudwatch/
開啟 CloudWatch 主控台。 -
在導覽窗格中,選擇容器洞見。
-
確認您的叢集出現在叢集清單中,且基礎設施指標正在填入。
檢查 日誌
若要驗證叢集是否存在日誌群組,請執行下列命令。使用 Amazon EKS 叢集的名稱取代 cluster-name。
aws logs describe-log-groups \ --log-group-name-prefix "/aws/containerinsights/cluster-name" \ --query "logGroups[].logGroupName" \ --output table
疑難排解
使用下列指引來解決使用 Helm 部署 OTel Container Insights 時的常見問題。
CrashLoopBackOff 中的運算子 Pod
徵狀:執行 時kubectl get pods -n amazon-cloudwatch,運算子 Pod 會顯示CrashLoopBackOff狀態。
原因:由於 TLS 憑證問題或許可不足,運算子 Pod 無法啟動。
解決方案:完成下列步驟以解決此問題。
-
檢查運算子 Pod 日誌是否有憑證相關的錯誤。
kubectl logs -n amazon-cloudwatch -l app.kubernetes.io/name=amazon-cloudwatch-observability --tail=50 -
確認命名空間中存在 Webhook TLS 秘密。
kubectl get secrets -n amazon-cloudwatch | grep webhook -
如果您使用 cert-manager,請確認
Certificate資源狀態顯示Ready。kubectl get certificate -n amazon-cloudwatch -
如果憑證遺失或無效,請解除安裝並重新安裝圖表以重新產生憑證。
helm uninstall amazon-cloudwatch-observability -n amazon-cloudwatch
代理程式 Pod 未排程在所有節點上
徵狀:代理程式 DaemonSet 顯示的 Pod 少於叢集中的節點數量。
原因:節點污點、資源限制或節點選擇器可防止代理程式 Pod 在特定節點上排程。
解決方案:完成下列步驟以解決此問題。
-
檢查 DaemonSet 狀態是否有排程問題。
kubectl get daemonset -n amazon-cloudwatch cloudwatch-agent -
檢查是否有無法排程的 Pod,並檢視其事件。
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent --field-selector=status.phase!=Running -
如果節點有污點,請將容錯新增至 Helm Chart 值。例如,若要容忍所有污點,請使用下列旗標升級圖表。
helm upgrade amazon-cloudwatch-observability \ aws-observability/amazon-cloudwatch-observability \ --namespace amazon-cloudwatch \ --reuse-values \ --set "agent.tolerations[0].operator=Exists" -
確認代理程式 Pod 現在在所有節點上執行。
kubectl get pods -n amazon-cloudwatch -l app.kubernetes.io/name=cloudwatch-agent -o wide