[EKS Study 4주차] kubecost - AMP 연동
- -
CloudNet@ 팀의 가시다님께서 Leading 하시는 AEWS Study 4주차 스터디 내용 정리
이번 포스팅에서는 kubecost 와 AWS Managed Prometheus(AMP) 서비스를 연동하는 법에 대해 알아보겠습니다.
kubecost 는 시계열 데이터 저장을 위해 Prometheus 를 사용하고 있습니다.
그렇기 때문에 최근 서울 리전에 출시된 AWS Managed Prometheus 도 Kubecost 의 저장 공간으로 사용할 수 있습니다.
AMP 는 완전관리형 서비스이기 때문에 kubecost 의 데이터가 얼마나 되던,
EKS Cluster의 사이즈가 얼마나 크던 상관없이 kubecost 의 비용 데이터를 수집할 수 있다는 장점이 있습니다.
Kubecost 와 AWS Managed Prometheus 를 연동한 아키텍처는 다음과 같습니다.
1. kubecost 설정
EKS 1.23 버전 이상은 kubecost 를 설치하기 위해 EBS CSI Driver 가 필요합니다.
1.1. EBS CSI Driver 설치
EBS CSI Driver 를 위한 IRSA 를 생성합니다.
eksctl create iamserviceaccount \
--name ebs-csi-controller-sa \
--namespace kube-system \
--cluster $CLUSTER_NAME \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--approve \
--role-only \
--role-name AmazonEKS_EBS_CSI_DriverRole
해당 IRSA 를 통해 EBS CSI Driver 를 설치합니다.
export SERVICE_ACCOUNT_ROLE_ARN=$(aws iam get-role --role-name AmazonEKS_EBS_CSI_DriverRole | jq -r '.Role.Arn')
eksctl create addon \
--name aws-ebs-csi-driver \
--cluster $CLUSTER_NAME \
--service-account-role-arn $SERVICE_ACCOUNT_ROLE_ARN \
--force
1.2. kubecost 설치
AWS 호환 kubecost 버전 확인
Helm 을 사용하여 kubecost 를 설치합니다. (2023.05 기준, 최신 1.103.3 버전)
helm upgrade -i kubecost \
oci://public.ecr.aws/kubecost/cost-analyzer --version 1.103.3 \
--namespace kubecost --create-namespace \
-f https://tinyurl.com/kubecost-amazon-eks
1.3. AMP 접근 권한을 가진 IRSA 생성
kubecost 가 AWS Managed Prometheus 에 Metrics 을 전송할 수 있도록 접근 권한을 가진 IRSA 를 생성합니다.
필요 정책
AmazonPrometheusQueryAccess
AmazonPrometheusRemoteWriteAccess
Kubecost-cost-analyzer 를 위한 IRSA
eksctl create iamserviceaccount \
--name kubecost-cost-analyzer \
--namespace kubecost \
--cluster $CLUSTER_NAME --region ap-northeast-2 \
--attach-policy-arn arn:aws:iam::aws:policy/AmazonPrometheusQueryAccess \
--attach-policy-arn arn:aws:iam::aws:policy/AmazonPrometheusRemoteWriteAccess \
--override-existing-serviceaccounts \
--approve
Kubecost-prometheus-server 를 위한 IRSA
eksctl create iamserviceaccount \
--name kubecost-prometheus-server \
--namespace kubecost \
--cluster $CLUSTER_NAME --region ap-northeast-2 \
--attach-policy-arn arn:aws:iam::aws:policy/AmazonPrometheusQueryAccess \
--attach-policy-arn arn:aws:iam::aws:policy/AmazonPrometheusRemoteWriteAccess \
--override-existing-serviceaccounts \
--approve
2. AWS Managed Prometheus 설정
2.1. Workspace 생성
Kubecost 가 Metrics 을 전송할 AMP Workspace 를 생성합니다.
AWS Console
AWS CLI
aws amp create-workspace --alias kubecost-amp --region ap-northeast-2
AMP Workspace 확인
2.2. AMP 연동을 위한 Kubecost values.yaml 생성
export AWS_REGION=ap-northeast-2
export AMP_WORKSPACE_ID=ws-bf8ed488-2731-4217-a745-0782d5e5e811
cat << EOF > config-values.yaml
global:
amp:
enabled: true
prometheusServerEndpoint: http://localhost:8005/workspaces/${AMP_WORKSPACE_ID}
remoteWriteService: https://aps-workspaces.${AWS_REGION}.amazonaws.com/workspaces/${AMP_WORKSPACE_ID}/api/v1/remote_write
sigv4:
region: ${AWS_REGION}
sigV4Proxy:
region: ${AWS_REGION}
host: aps-workspaces.${AWS_REGION}.amazonaws.com
EOFcat << EOF > config-values.yaml
global:
amp:
enabled: true
prometheusServerEndpoint: http://localhost:8005/workspaces/${AMP_WORKSPACE_ID}
remoteWriteService: https://aps-workspaces.${AWS_REGION}.amazonaws.com/workspaces/${AMP_WORKSPACE_ID}/api/v1/remote_write
sigv4:
region: ${AWS_REGION}
sigV4Proxy:
region: ${AWS_REGION}
host: aps-workspaces.${AWS_REGION}.amazonaws.com
EOF
2.3. kubecost 재구성
Helm 재배포
helm upgrade -i kubecost \
oci://public.ecr.aws/kubecost/cost-analyzer --version 1.103.3 \
--namespace kubecost --create-namespace \
-f https://tinyurl.com/kubecost-amazon-eks \
-f config-values.yaml
Prometheus Server 재배포
AMP 로 Metrics 을 전송하게 만듭니다.
kubectl rollout restart deployment/kubecost-prometheus-server -n kubecost
2.4. kubecost 확인
Kubecost 접속을 위한 Ingress 생성
cat << EOT > kubecost-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: kubecost-alb-ingress
namespace: kubecost
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/scheme: internet-facing
spec:
rules:
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: kubecost-cost-analyzer
port:
number: 9090
EOT
kubectl create -f kubecost-ingress.yaml
2.5. AWS Managed Prometheus 확인
AMP 에 Metrics 이 전송되고 있는지 확인해봅니다.
Kubecost 에서 전송하는 로그를 확인해봅니다.
kubectl logs deploy/kubecost-prometheus-server -c prometheus-server -n kubecost --follow
Prometheus Server 설정 확인 (Metrics 전송)
kubectl describe configmaps -n kubecost kubecost-prometheus-server | grep remote_write -A2
Kubecost 설정 확인 (AMP Query)
kubectl describe configmaps -n kubecost kubecost-cost-analyzer
이번에는 Kubecost 와 AMP 를 연동하는 법에 대해 알아보았습니다.
AMP 를 사용하면서 느낀 점은 AMP의 AWS Console 은 많이 부족하다는 점입니다.
이번에 AMP 를 연동해봤지만 콘솔 상에서는 큰 변화를 확인하지 못했습니다.
제가 못찾은 건지 모르겠지만 AMP 에 수집된 데이터나 AMP 와의 연동 정보 등을 확인할 수 있는 방법이 없었습니다.
이제 막 서울 리전에 출시된 서비스이니 점차 나아질 것으로 믿어 의심치 않습니다.
참고 문서
https://malwareanalysis.tistory.com/602
https://docs.kubecost.com/install-and-configure/install/custom-prom/aws-amp-integration
https://aws.amazon.com/ko/blogs/mt/integrating-kubecost-with-amazon-managed-service-for-prometheus/
https://docs.aws.amazon.com/ko_kr/prometheus/latest/userguide/integrating-kubecost.html
'AWS > EKS' 카테고리의 다른 글
[EKS Study 5주차] EKS AutoScaling - KEDA (0) | 2023.05.28 |
---|---|
[EKS Study 5주차] EKS AutoScaling - HPA (0) | 2023.05.28 |
[EKS Study 4주차] EKS Observability - kubecost (0) | 2023.05.21 |
[EKS Study 4주차] EKS Monitoring - CloudWatch Insight (0) | 2023.05.21 |
[EKS Study 3주차] EKS Storage - EFS CSI Controller (0) | 2023.05.20 |