使 AWS 用 Kubernetes 的控制器管理適用於 Prometheus 的 Amazon 託管服務 - Amazon Managed Service for Prometheus

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

使 AWS 用 Kubernetes 的控制器管理適用於 Prometheus 的 Amazon 託管服務

Amazon Managed Service for Prometheus 與 Kubernetes 專用AWS 控制器 (ACK) 整合,並支援管理您在 Amazon EKS 中的工作區、警示管理員和尺規資源。您可以將 AWS 控制器用於 Kubernetes 自訂資源定義 (CRD) 和原生 Kubernetes 物件,而不必定義叢集外部的任何資源。

本節說明如何在現有 Amazon EKS 叢集中為 Prometheus 的 Kubernetes 和 Amazon 受管服務設定 AWS 控制器。

您也可以閱讀介紹 Kubernetes AWS 控制器的部落格文章,以及介紹適用於 Prometheus 之 Amazon 受管服務的 ACK 控制器

必要條件

在開始將適用於 Prometheus 的 Kubernetes AWS 控制器和 Amazon 受管服務與 Amazon EKS 叢集整合之前,您必須具備以下先決條件。

當您適當設定的 Amazon EKS 叢集時,您應該可以透過呼叫 kubectl get --raw /metrics 查看為 Prometheus 格式化的指標。現在您已準備好安裝 Kubernetes 服務 AWS 控制器的控制器,並使用它來部署適用於 Prometheus 資源的 Amazon 受管服務。

為 Kubernetes 部署具有 AWS 控制器的工作區

若要為 Prometheus 工作區部署新的 Amazon 受管服務,您需要安裝 Kubernetes 控制器的 AWS 控制器,然後使用該控制器來建立工作區。

使 AWS 用 Kubernetes 的控制器為 Prometheus 工作區部署新的 Amazon 受管服務
  1. 使用下列命令來使用 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

  2. 使用下列內文建立稱為 workspace.yaml 的檔案。這將作為您正在建立的工作區組態使用。

    apiVersion: prometheusservice.services.k8s.aws/v1alpha1 kind: Workspace metadata: name: my-amp-workspace spec: alias: my-amp-workspace tags: ClusterName: EKS-demo
  3. 執行下列命令以建立工作區 (此命令取決於您在步驟 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
    注意

    您也可以使用現有工作區,而不建立新工作區。

  4. 建立兩個新的 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 }}
    注意

    若要進一步瞭解這些組態檔案的格式,請參閱RuleGroupsNamespaceDataAlertManagerDefinitionData

  5. 執行下列命令以建立規則群組和警示管理員組態 (此命令取決於您在步驟 1 中設定的系統變數)。

    kubectl apply -f rulegroup.yaml -n $ACK_SYSTEM_NAMESPACE kubectl apply -f alertmanager.yaml -n $ACK_SYSTEM_NAMESPACE

    幾分鐘內將可進行這些變更。

    注意

    若要更新資源,而不是建立資源,只要更新 yaml 檔案,然後再次執行 kubectl apply 命令即可。

    若要刪除資源,請執行下列命令。以您要刪除WorkspaceAlertManagerDefinition或的資源類型取ResourceTypeRuleGroupNamespace。以要刪除的資源名稱取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 組態遠端寫入
  1. 使用下列命令來取得工作區的 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,以便用於接下來的幾個步驟。

  2. 使用下列內文建立新檔案,並將其稱為 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
  3. 使用下面的 Helm 命令,尋找 Prometheus 圖表和命名空間名稱以及的圖表版本。

    helm ls --all-namespaces

    根據到目前為止的步驟,Prometheus 圖表和命名空間都應該命名為 prometheus,並且圖表版本可能是 15.2.0

  4. 使用、執行下列命令 PrometheusChartNamePrometheusNamespace,並在上一個步驟中PrometheusChartVersion找到。

    helm upgrade PrometheusChartName prometheus-community/prometheus -n PrometheusNamespace -f prometheus-config.yaml --version PrometheusChartVersion

    幾分鐘後,您會看到升級成功的訊息。

  5. 或者,透過 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 受管服務。