本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使 AWS 用 Kubernetes 的控制器管理適用於 Prometheus 的 Amazon 託管服務
Amazon Managed Service for Prometheus 與 Kubernetes 專用AWS 控制器 (ACK)
本節說明如何在現有 Amazon EKS 叢集中為 Prometheus 的 Kubernetes 和 Amazon 受管服務設定 AWS 控制器。
您也可以閱讀介紹 Kubernetes AWS 控制器的部落格文章,以及介紹適用於
必要條件
在開始將適用於 Prometheus 的 Kubernetes AWS 控制器和 Amazon 受管服務與 Amazon EKS 叢集整合之前,您必須具備以下先決條件。
-
您必須擁有現有的 AWS 帳戶 和許可,才能以程式設計方式為 Prometheus 和 IAM 角色建立 Amazon 受管服務。
-
您必須擁有已啟用 OpenID Connect (OIDC) 的現有 Amazon EKS 叢集。
若您未啟用 OIDC,您可以使用下列命令來啟用。請記得將
YOUR_CLUSTER_NAME
和AWS_REGION
替換為帳戶的正確值。eksctl utils associate-iam-oidc-provider \ --cluster ${
YOUR_CLUSTER_NAME
} --region ${AWS_REGION
} \ --approve如需有關將 OIDC 與 Amazon EKS 搭配使用的詳細資訊,請參閱 Amazon EKS 使用者指南中的 OIDC 身分識別提供者身分驗證和建立 IAM OIDC 提供者。
-
您必須在 Amazon EKS 叢集中安裝 Amazon EBS CSI 驅動程式。
-
您必須已安裝 AWS CLI。的用 AWS CLI 於從命令列呼叫 AWS 功能。
-
必須安裝 Helm,Kubernetes 的套件管理員。
-
必須在您的 Amazon EKS 叢集中設定使用 Prometheus 的控制平面指標。
-
您必須擁有 Amazon Simple Notification Service (Amazon SNS) 主題,且希望藉此從新工作區傳送警示。請確認您已授予 Amazon Managed Service for Prometheus 權限,以將訊息傳送到該主題。
當您適當設定的 Amazon EKS 叢集時,您應該可以透過呼叫 kubectl get --raw
/metrics
查看為 Prometheus 格式化的指標。現在您已準備好安裝 Kubernetes 服務 AWS 控制器的控制器,並使用它來部署適用於 Prometheus 資源的 Amazon 受管服務。
為 Kubernetes 部署具有 AWS 控制器的工作區
若要為 Prometheus 工作區部署新的 Amazon 受管服務,您需要安裝 Kubernetes 控制器的 AWS 控制器,然後使用該控制器來建立工作區。
使 AWS 用 Kubernetes 的控制器為 Prometheus 工作區部署新的 Amazon 受管服務
-
使用下列命令來使用 Helm 安裝 Amazon Managed Service for Prometheus 服務控制器。如需詳細資訊,請參閱上的在 Kubernetes 的 AWS 控制器中安裝 ACK 控制器說明文件
。 GitHub為您的系統使用正確的 區域
,例如us-east-1
。export SERVICE=prometheusservice export RELEASE_VERSION=`curl -sL https://api.github.com/repos/aws-controllers-k8s/$SERVICE-controller/releases/latest | grep '"tag_name":' | cut -d'"' -f4` export ACK_SYSTEM_NAMESPACE=ack-system export AWS_REGION=
region
aws ecr-public get-login-password --region us-east-1 | helm registry login --username AWS --password-stdin public.ecr.aws helm install --create-namespace -n $ACK_SYSTEM_NAMESPACE ack-$SERVICE-controller \ oci://public.ecr.aws/aws-controllers-k8s/$SERVICE-chart --version=$RELEASE_VERSION --set=aws.region=$AWS_REGION幾分鐘後,您應該會看到類似於以下內容的回應,表示成功。
You are now able to create Amazon Managed Service for Prometheus (AMP) resources! The controller is running in "cluster" mode. The controller is configured to manage AWS resources in region: "us-east-1"
您可以選擇性地使用下列命令來驗證 Kubernetes 控 AWS 制器的控制器是否已成功安裝。
helm list --namespace $ACK_SYSTEM_NAMESPACE -o yaml
這將傳回與控制器
ack-prometheusservice-controller
有關的資訊,包含status: deployed
。 -
使用下列內文建立稱為
workspace.yaml
的檔案。這將作為您正在建立的工作區組態使用。apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: Workspace metadata: name: my-amp-workspace spec: alias: my-amp-workspace tags: ClusterName: EKS-demo
-
執行下列命令以建立工作區 (此命令取決於您在步驟 1 中設定的系統變數)。
kubectl apply -f workspace.yaml -n $ACK_SYSTEM_NAMESPACE
在幾分鐘之內,您應該能夠看到一個新的工作區,在您的帳戶中稱為
my-amp-workspace
。執行下列命令以檢視工作區的詳細資訊和狀態,包含工作區 ID。或者,您也可以在 Amazon Managed Service for Prometheus 主控台
中檢視新的工作區。 kubectl describe workspace my-amp-workspace -n $ACK_SYSTEM_NAMESPACE
注意
您也可以使用現有工作區
,而不建立新工作區。 -
建立兩個新的 yaml 檔案做為規則群組的組態,並 AlertManager 使用下列組態建立下一個檔案。
將此組態另存為
rulegroup.yaml
。將WORKSPACE-ID
替換為上一個步驟的工作區 ID。apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: RuleGroupsNamespace metadata: name: default-rule spec: workspaceID:
WORKSPACE-ID
name: default-rule configuration: | groups: - name: example rules: - alert: HostHighCpuLoad expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) > 60 for: 5m labels: severity: warning event_type: scale_up annotations: summary: Host high CPU load (instance {{ $labels.instance }}) description: "CPU load is > 60%\n VALUE = {{ $value }}\n LABELS = {{ $labels }}" - alert: HostLowCpuLoad expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[2m])) * 100) < 30 for: 5m labels: severity: warning event_type: scale_down annotations: summary: Host low CPU load (instance {{ $labels.instance }}) description: "CPU load is < 30%\n VALUE = {{ $value }}\n LABELS = {{ $labels }}"將以下組態另存為
alertmanager.yaml
。將WORKSPACE-ID
替換為上一個步驟的工作區 ID。將主題 ARN 取代為 ARN
,以便將通知傳送到您正在使用的區域
的 Amazon SNS 主題。 AWS 區域 請記住,Amazon Managed Service for Prometheus 必須有 Amazon SNS 主題的許可。apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: AlertManagerDefinition metadata: name: alert-manager spec: workspaceID:
WORKSPACE-ID
configuration: | alertmanager_config: | route: receiver: default_receiver receivers: - name: default_receiver sns_configs: - topic_arn:TOPIC-ARN
sigv4: region:REGION
message: | alert_type: {{ .CommonLabels.alertname }} event_type: {{ .CommonLabels.event_type }}注意
若要進一步瞭解這些組態檔案的格式,請參閱RuleGroupsNamespaceData和AlertManagerDefinitionData。
-
執行下列命令以建立規則群組和警示管理員組態 (此命令取決於您在步驟 1 中設定的系統變數)。
kubectl apply -f rulegroup.yaml -n $ACK_SYSTEM_NAMESPACE kubectl apply -f alertmanager.yaml -n $ACK_SYSTEM_NAMESPACE
幾分鐘內將可進行這些變更。
注意
若要更新資源,而不是建立資源,只要更新 yaml 檔案,然後再次執行
kubectl apply
命令即可。若要刪除資源,請執行下列命令。以您要刪除
Workspace
、AlertManagerDefinition
或的資源類型取ResourceType
代RuleGroupNamespace
。以要刪除的資源名稱取ResourceName
代。kubectl delete
ResourceType
ResourceName
-n $ACK_SYSTEM_NAMESPACE
這樣會完成新工作區的部署。下一節說明組態叢集以傳送指標至該工作區。
組態 Amazon EKS 叢集以寫入 Amazon Managed Service for Prometheus 工作區
本節說明如何使用 Helm 將 Amazon EKS 叢集中執行的 Prometheus 組態為遠端將指標寫入您在上一節建立的 Amazon Managed Service for Prometheus 工作區。
在此程序中,您將需要已建立的 IAM 角色名稱以用於擷取指標。如果您尚未這麼做,請參閱 自 Amazon EKS 叢集設定指標擷取作業的服務角色 以取得詳細資訊和指示。如果您遵循這些指示,將會呼叫 IAM 角色 amp-iamproxy-ingest-role
。
為 Amazon EKS 叢集設定 Amazon EKS 組態遠端寫入
-
使用下列命令來取得工作區的
prometheusEndpoint
。將WORKSPACE-ID
替換為上一節的工作區 ID。aws amp describe-workspace --workspace-id
WORKSPACE-ID
prometheusEndpoint 將在傳回結果中,並依照下列方式格式化:
https://aps-workspaces.us-west-2.amazonaws.com/workspaces/ws-a1b2c3d4-a123-b456-c789-ac1234567890/
儲存此 URL,以便用於接下來的幾個步驟。
-
使用下列內文建立新檔案,並將其稱為
prometheus-config.yaml
。將帳戶
替換為您的帳戶 ID、將workspaceURL/
替換為您剛才找到的 URL,以及將區域
替換為您系統適用的 AWS 區域 。serviceAccounts: server: name: "amp-iamproxy-ingest-service-account" annotations: eks.amazonaws.com/role-arn: "arn:aws:iam::
account
:role/amp-iamproxy-ingest-role" server: remoteWrite: - url:workspaceURL/
api/v1/remote_write sigv4: region:region
queue_config: max_samples_per_send: 1000 max_shards: 200 capacity: 2500 -
使用下面的 Helm 命令,尋找 Prometheus 圖表和命名空間名稱以及的圖表版本。
helm ls --all-namespaces
根據到目前為止的步驟,Prometheus 圖表和命名空間都應該命名為
prometheus
,並且圖表版本可能是15.2.0
-
使用、執行下列命令
PrometheusChartName
,並在上一個步驟中PrometheusNamespace
PrometheusChartVersion
找到。helm upgrade
PrometheusChartName
prometheus-community/prometheus -nPrometheusNamespace
-f prometheus-config.yaml --versionPrometheusChartVersion
幾分鐘後,您會看到升級成功的訊息。
-
或者,透過
awscurl
查詢 Amazon Managed Service for Prometheus 端點,驗證是否成功傳送指標。將「區域
」取代為您 AWS 區域 正在使用的項目,並使用您在步驟 1 中找到的URL 來取代「工作區
URL」。awscurl --service="aps" --region="
Region
" "workspaceURL/
api/v1/query?query=node_cpu_seconds_total"
您現在已經建立 Amazon Managed Service for Prometheus 工作區,並使用 YAML 檔案作為組態,從 Amazon EKS 叢集連線到該工作區。這些檔案,稱為自訂資源定義 (CRD),在 Amazon EKS 叢集內運作中。您可以使用 Kubernetes AWS 控制器的控制器,直接從叢集管理適用於 Prometheus 資源的所有 Amazon 受管服務。