기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
쿠버네티스용 컨트롤러를 사용하여 AWS Prometheus용 Amazon 매니지드 서비스를 관리하세요
Amazon Managed Service for Prometheus는 Kubernetes용AWS 컨트롤러(ACK)
이 섹션에서는 기존 Amazon EKS 클러스터에서 쿠버네티스용 AWS 컨트롤러와 Prometheus용 Amazon Managed Service를 설정하는 방법을 설명합니다.
쿠버네티스용 AWS 컨트롤러를 소개하고 Prometheus용
사전 조건
쿠버네티스용 AWS 컨트롤러와 Prometheus용 Amazon Managed Service를 Amazon EKS 클러스터와 통합하기 전에 다음과 같은 사전 요구 사항이 있어야 합니다.
-
Prometheus용 Amazon 관리 서비스 AWS 계정 및 IAM 역할을 프로그래밍 방식으로 생성하려면 기존 및 권한이 있어야 합니다.
-
OpenID Connect(OIDC)가 활성화된 기존 Amazon EKS 클러스터가 있어야 합니다.
OIDC가 활성화되지 않았다면 다음 명령을 사용하여 활성화할 수 있습니다.
YOUR_CLUSTER_NAME
및AWS_REGION
을 계정에 맞는 올바른 값으로 바꿉니다.eksctl utils associate-iam-oidc-provider \ --cluster ${
YOUR_CLUSTER_NAME
} --region ${AWS_REGION
} \ --approveAmazon EKS에서 OIDC를 사용하는 방법에 대한 자세한 내용은 Amazon EKS 사용 설명서의 OIDC 자격 증명 공급자 인증 및 IAM OIDC 공급자 생성을 참조하세요.
-
Amazon EKS 클러스터에 Amazon EBS CSI 드라이버가 설치되어 있어야 합니다.
-
AWS CLI가 설치되어 있어야 합니다. 명령줄에서 AWS 기능을 AWS CLI 호출하는 데 사용됩니다.
-
Kubernetes의 패키지 관리자인 Helm을 설치해야 합니다.
-
Prometheus를 사용한 컨트롤 플레인 지표를 Amazon EKS 클러스터에서 설정해야 합니다.
-
새 워크스페이스에서 알림을 전송하려는 Amazon Simple Notification Service(SNS) 주제가 있어야 합니다. 주제에 메시지를 보낼 수 있는 권한을 Amazon Managed Service for Prometheus에 부여했는지 확인합니다.
Amazon EKS 클러스터가 적절하게 구성되면 kubectl get --raw
/metrics
호출을 통해 Prometheus에 맞게 형식이 지정된 지표가 표시됩니다. 이제 Kubernetes용 AWS 컨트롤러 서비스 컨트롤러를 설치하고 이를 사용하여 Prometheus용 Amazon Managed Service 리소스를 배포할 준비가 되었습니다.
Kubernetes용 컨트롤러가 포함된 워크스페이스 배포 AWS
Prometheus용 Amazon Managed Service 작업 공간을 새로 배포하려면 Kubernetes용 컨트롤러 컨트롤러를 AWS 설치한 다음 이를 사용하여 작업 공간을 생성합니다.
쿠버네티스용 컨트롤러를 사용하여 Prometheus용 Amazon 관리 서비스 작업 공간을 새로 배포하려면 AWS
-
다음 명령을 사용하여 Helm에서 Amazon Managed Service for Prometheus 서비스 컨트롤러를 설치합니다. 자세한 내용은 의 Kubernetes용 컨트롤러 설명서에 ACK 컨트롤러 설치를
참조하십시오. AWS 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
그러면
status: deployed
를 비롯한 컨트롤러ack-prometheusservice-controller
에 대한 정보가 반환됩니다. -
다음 텍스트를 사용하여
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로 바꿉니다.TOPIC-ARN을
알림을 전송할 Amazon SNS 주제에 대한 ARN으로바꾸고
사용 중인 지역으로 바꾸십시오. 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
-
다음 명령을 실행하여 규칙 그룹 및 알림 관리자 구성을 생성합니다(이 명령은 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 Managed Service for Prometheus 워크스페이스에 쓰도록 Amazon EKS 클러스터 구성
이 섹션에서는 Helm을 사용하여 Amazon EKS 클러스터에서 실행되는 Prometheus가 이전 섹션에서 생성한 Amazon Managed Service for Prometheus 워크스페이스에 지표를 원격으로 쓰도록 구성하는 방법을 설명합니다.
이 절차를 수행하려면 지표 수집에 사용하기 위해 생성한 IAM 역할의 이름이 필요합니다. 이 작업을 아직 수행하지 않은 경우 Amazon EKS 클러스터의 지표 수집을 위한 서비스 역할 설정에서 자세한 내용 및 지침을 참조하세요. 이러한 지침을 따르면 IAM 역할이 amp-iamproxy-ingest-role
로 지칭됩니다.
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
로 지정합니다.account
를 계정 ID로,workspaceURL/
을 방금 찾은 URL로,region
을 시스템에 적합한 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
일 수 있습니다. -
이전 단계에서
PrometheusChartVersion
찾은PrometheusChartName
, 및 를 사용하여 다음 명령을 실행합니다.PrometheusNamespace
helm upgrade
PrometheusChartName
prometheus-community/prometheus -nPrometheusNamespace
-f prometheus-config.yaml --versionPrometheusChartVersion
몇 분 후 업그레이드가 성공했다는 메시지가 표시됩니다.
-
선택적으로
awscurl
을 통해 Amazon Managed Service for Prometheus 엔드포인트를 쿼리하여 지표가 성공적으로 전송되고 있는지 확인할 수 있습니다.지역을
사용 중인 URL로 바꾸고WorkspaceURL/을 1단계에서
찾은 URL로 바꾸십시오. AWS 리전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 관리 서비스 리소스를 모두 관리할 수 있습니다.