개요
EKS WokerNode를 EC2방식과 Fargate 방식으로 띄울 수 있습니다.
Fargate 방식으로 WorkerNode를 띄울 경우 daemonset pod를 배포할 수 가 없습니다.
daemonset pod를 배포하지 못하면 일어나는 일
- prometheus에서 데이터 수집용인 node-exporter를 배포할 수 가 없습니다.
- 로그 수집 fluent-bit를 배포할 수 가 없습니다.
- 등
AWS EKS의 Fargate에서 실행되는 어플리케이션의 경우 ADOT(AWS Distro for OpenTelemetry)으로 시스템 지표(메트릭), Log를 수집
메트릭은 CloudWatch Container Insights에 저장되며, CloudWatch 컨테이너 인사이트 대시보드으로 확인 가능
OpenTelemetry 이란 ?
- 분산 추적(Distributed Tracing), 메트릭(Metrics), 로그(Logs)와 같은 다양한 유형의 관측 가능성 데이터를 수집 합니다.
ADOT 이란 ?
- AWS Distro for OpenTelemetry는 CNCF(Cloud Native Computing Foundation) OpenTelemetry 프로젝트로 AWS 배포판이다.
ADOT Collector 이란 ?
- AWS ADOT Collctor을 이용해서 데이터(메트릭,로그) 수집, 처리 및 내보내는 기능을 합니다.
- ADOT Collector는 CloudWatch, AWS X-Ray, AMP(prometheus) 등으로 전송(output) 할 수 있다.
1. 메뉴얼
https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/monitoring-fargate-usage.html
Fargate 메트릭 수집 방법
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ContainerInsights.html
Container Insights 이란?
https://aws-otel.github.io/docs/getting-started/container-insights
https://github.com/aws-observability/aws-otel-collector
https://aws-otel.github.io/docs/getting-started/container-insights/eks-fargate
ADOT(OpenTelemetry) 설정 방법
2. Fargate 메트릭 수집 프로세스
- WorkerNode의 kubelet은 /metrics/cadvisor 엔드포인트에서 CPU,MEM,DISK,Network 등 리소스 정보를 노출합니다.
- Fargate는 서버리스로 WorkerNode의 kubelet에 직접 접근이 불가능합니다.
- ADOT Collector는 Kubernetes API 서버를 호출하여 Fargate(WorkerNode)의 kubelet에 대한 연결을 프록시해서
- cAdvisor 메트릭을 수집합니다.
- cAdvisor(/metrics/cadvisor) 메트릭 정보는 Prometheus 형식으로 제공됩니다.
- ADOT Collector -> 메트릭 수집 -> CloudWatch 저장
3. ADOT Collector 구성(설치)
ADOT Collector 수집 설치는 수동 설치와 EKS Add-on 설치가 있습니다.
이 페이지는 수동 설치 메뉴얼입니다.
EKS Fargate에 ADOT Collector 배포 -> Metrics + Log 수집 방법
- Fargate 프로필 설정 링크 : https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/pod-execution-role.html
- ADOT Collector 설치 링크 : https://aws-otel.github.io/docs/getting-started/container-insights/eks-fargate#deploying-adot-collector-to-eks-fargate
[ ADOT Collector 설치 순서 ]
- Fargate 프로필에서 사용할 IAM Role 생성 (RBAC)
- Fargate 프로필 생성
- EKS OIDC 구성
- ADOT Collector에서 사용할 IAM Role 생성(IRSA)
- ADOT Collector "ServiceAccount" 배포
- ADOT Collector 설치
- ADOT Collector 로그 확인 (정상 설치 확인)
1. Fargate 프로필 용 IAM Role 생성하기
Fargate 프로필에서 사용할 IAM Role 생성합니다.
- Fargate IAM Role 생성 메뉴얼 링크 :https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/pod-execution-role.html
- 클러스터가 AWS Fargate 인프라에서 Pod를 생성할 때 Fargate 인프라에서 실행되는 구성 요소는 사용자를 대신하여 AWS API를 호출해야 합니다
- AmazonEKSFargatePodExecutionRole 역할 : POD가 Fargate 배포될 때 ECR 도커이미지 PULL 권한입니다.
IAM Role 생성 방법
- AWS Console -> IAM -> 역할 생성
- AWS 서비스 클릭
- 사용 사례 : eks 클릭 -> eks - Fargate pod 클릭
- 정책 이름 : AmazonEKSFargatePodExecutionRolePolicy 확인
- 역할 이름 : AmazonEKSFargatePodExecutionRole 입력
- 생성
2. Fargate 프로필 생성
Fargate 프로필 생성 메뉴얼 링크 : https://docs.aws.amazon.com/ko_kr/eks/latest/userguide/fargate-getting-started.html#fargate-gs-create-profile
adot-collector 용도 Fargate 프로필과 서비스용도 Fargate 프로필 2개 생성합니다.
- Fargate 프로필 생성 : fargate-container-insights
- adot-collector 용도 프로필입니다.
- OpenTelemery를 사용하기 위해서 Adot Controller 입니다.
- adot-collector 용도 프로필입니다.
- Fargate 프로필 생성 : applications
- nginx 등 test pod 용도 프로필입니다.
- NameSpace 생성 : fargate-container-insights, applications
- 2개 네임스페이스 생성
3. EKS에 OIDC 설정
IAM Roles for Service Accounts(IRSA)용도로 사용할 EKS OIDC 생성 필요합니다.
- POD가 IRSA(ServiceAccount와 연결된 IAM Role)을 가지고 EKS OIDC을 통해서 임시 토큰을 받은 후 Reousrce에 접근
- AWS STS(Security Token Service), AssumeRoleWithWebIdentity
- JWT(Json Web Token) 임시 토큰 수명은 최소 15분 ~ 최대 12시간
- OIDC 메뉴얼 링크 : https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html
- OIDC 구성 방법 (Web Console 구성)
- AWS Console -> IAM -> ID 제공업체 -> 공급차 추가 클릭
- OpenID Connect 클릭
- 공급자 URL : OpenID Connect 공급자 URL 입력
- 대상 : sts.amazonaws.com 입력
- 생성
- eksctl 명령어로 생성하기 (참고용)
- eksctl utils associate-iam-oidc-provider --cluster=xxx-prod-eks --approve
4. Adot-Collector에서 사용할 IAM Role 생성
ADOT Collector가 Cloudwatch으로 내보내기 권한 설정 (IRSA)
EKS-Fargate-ADOT-ServiceAccount-Role
- ServiceAccount 생성 메뉴얼 링크 : https://aws-otel.github.io/docs/getting-started/container-insights/eks-fargate#deploying-adot-collector-to-eks-fargate
4-1. IAM Role 생성 방법
- AWS Console -> IAM -> 역할 생성
- AWS 서비스 클릭
- 사용 사례 : Cloudwatch 클릭
- 정책 이름 : CloudWatchAgentServerPolicy 설정
- 역할 이름 : EKS-Fargate-ADOT-ServiceAccount-Role 입력
- 생성
4-2. IAM Role에 Trust 설정 방법
- AWS Console -> IAM -> EKS-Fargate-ADOT-ServiceAccount-Role 역할 클릭
- 신뢰 관계 클릭
- 신뢰 정책 편집 클릭
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::xxxxxxxxxxxxxxxx:oidc-provider/oidc.eks.ap-northeast-2.amazonaws.com/id/xxxxxxxxxxxxx"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringLike": {
"oidc.eks.ap-northeast-2.amazonaws.com/id/xxxxxxxxxx:sub": "system:serviceaccount:fargate-container-insights:adot-collector",
"oidc.eks.ap-northeast-2.amazonaws.com/id/xxxxxxxxxxx:aud": "sts.amazonaws.com"
}
}
}
]
}
- 저장
5. adot Collector가 사용할 ServiceAccount 생성
ADOT Collector가 Cloudwatch으로 내보내기 위해서 IAM Role 권한을 ServiceAccount에 맵핑
- POD가 IRSA(IAM Roles for ServiceAccounts) 설정으로 권한 획득
vi ServiceAccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
eks.amazonaws.com/role-arn: arn:aws:iam::xxxxxxAws account idxxxxxxxx:role/EKS-Fargate-ADOT-ServiceAccount-Role
name: adot-collector
namespace: fargate-container-insights
kubectl apply -f ServiceAccount.yaml
6. adot Collector 배포
adot collector를 배포해서 메트릭스,로그 수집 시작하기
- Adot Collector 설치 파일 링크 : https://github.com/aws-observability/aws-otel-collector/blob/main/deployment-template/eks/otel-fargate-container-insights.yaml
6-1. adot-collector 설치 파일 다운로드 받기
wget https://github.com/aws-observability/aws-otel-collector/blob/main/deployment-template/eks/otel-fargate-container-insights.yaml
- adot collector 배포하기 전에 kube-system/coredns pod 배포된지 확인하기
6-2. adot-colletor 설치 파일 수정하기
3개 내용 추가
- - configmaps
- region: ap-northeast-2
- value: "ClusterName=xxxxxx-dev-eks"
vi otel-fargate-container-insights.yaml
내용 수정
1. ClusterROle 추가
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: adotcol-admin-role
rules:
- apiGroups: [""]
resources:
- nodes
- nodes/proxy
- nodes/metrics
- services
- endpoints
- pods
- pods/proxy
- configmaps # ConfigMap 내용 추가
verbs: ["get", "list", "watch"]
- nonResourceURLs: [ "/metrics/cadvisor"]
verbs: ["get", "list", "watch"]
2. Region 내용 추가
exporters:
awsemf:
log_group_name: '/aws/containerinsights/{ClusterName}/performance'
log_stream_name: '{PodName}'
namespace: 'ContainerInsights'
region: ap-northeast-2 # ap-northeast 내용 추가
resource_to_telemetry_conversion:
enabled: true
3. ClusterName 내용 추가
containers:
- image: public.ecr.aws/aws-observability/aws-otel-collector:latest
name: adot-collector
imagePullPolicy: Always
command:
- "/awscollector"
- "--config=/conf/adot-collector-config.yaml"
env:
- name: OTEL_RESOURCE_ATTRIBUTES
value: "ClusterName=xxxx-dev-eks" # 내용 추가
6-3. adot-collector 배포
kubectl apply -f otel-fargate-container-insights.yaml
6-4. adot-collector 로그 확인
kubectl logs pod/adot-collector
- 로그 확인해서 특이사항이 있는지 확인
4. 메트릭 / 로그 수집 확인
메트릭 수집 내용 확인
- AWS Console -> AWS CloudWatch -> 지표 -> 모든 지표 클릭
- 사용자 지정 네임스페이스 -> ContainerInsights -> ClusterName, LaunchType, Namespace, PodName 클릭
- pod 메트릭 정보 확인
로그 수집은 설정해야지 쌓입니다.
로그 수집 메뉴얼 링크 : https://dongwook35.tistory.com/94
- AWS Console -> /aws/containerinsights/xxx-prod-eks/performance
- 로그 스트림에서 POD 선택 후 로그 수집 확인
'모니터링 > prometheus' 카테고리의 다른 글
[ Cloudwatch ] fluent-bit에서 CW으로 로그 적재 (0) | 2024.01.17 |
---|---|
[ Fargate ] Fargate 로깅 (1) | 2023.10.20 |
fluent-bit (0) | 2023.10.18 |
[ AMP ] Amazon Managed service for Prometheus 구축 (0) | 2023.10.05 |
[ prometheus ] scrape 설정 (0) | 2023.09.26 |