Create IRSA (IAM Role for Service Account) for Application Namespace prodcatalog-ns
Enable Observability for Logs and Metrics
1. 사전 준비 사항
AWSRegion과 AccountID 가 맞는지 확인합니다.
test -n "$AWS_REGION" && echo AWS_REGION is "$AWS_REGION" || echo AWS_REGION is not set
test -n "$ACCOUNT_ID" && echo ACCOUNT_ID is "$ACCOUNT_ID" || echo ACCOUNT_ID is not set
실습 애플리케이션을 복제 합니다.
cd ~/environment
git clone https://github.com/aws-containers/eks-app-mesh-polyglot-demo.git
cd eks-app-mesh-polyglot-demo
이제 EKS 클러스터에 Fargate Profile을 생성하여 제품 카탈로그 애플리케이션에 하나의 prodcatalog 서비스를 구축하겠습니다.
IAM 역할이 Kubernetes 서비스 계정과 연결되었습니다. 다음 명령으로 생성된 서비스 계정의 세부 정보를 볼 수 있습니다.
kubectl describe sa prodcatalog-envoy-proxies -n prodcatalog-ns
관리자는 Fargate 프로파일을 사용하여 Fargate에서 실행되는 Pod를 선언할 수 있습니다. 각 프로필에는 네임스페이스 및 optional labels을 포함하는 최대 5개의 selector가 있을 수 있습니다. 모든 selector에 대해 네임스페이스를 반드시 정의해야 합니다. 레이블 필드는 여러 개의 선택적 키-값 쌍으로 구성됩니다. selector에 지정된 모든 레이블과 네임스페이스가 일치하는 Pod는 Fargate로 스케줄 됩니다.
EKS 클러스터가 Fargate에서 Pod를 예약할 때 Pod는 Amazon ECR에서 컨테이너 이미지를 꺼내기 위해 사용자를 대신하여 AWS API call을 해야 합니다. Fargate Pod Execution Role은 IAM에서 이를 수행할 수 있는 권한을 제공합니다. 이 IAM 역할은 위의 명령에 의해 자동으로 생성됩니다.
Fargate 프로필 작성에는 최대 몇 분이 걸릴 수 있습니다.
eksctl get fargateprofile --cluster eksworkshop-eksctl -o yaml
콘솔에 로그인하고 Amazon EKS -> 클러스터 -> eksworkshop-eksctl -> 구성 -> 컴퓨팅을 클릭하십시오. 새로 만든 Fargate Profile fargate 제품 카탈로그를 볼 수 있습니다.
프로필에 EKS 클러스터의 private 서브넷이 포함되어 있습니다. Fargate에서 실행되는 포드에는 공인 IP 주소가 할당되지 않으므로 Fargate 프로파일을 만들 때 인터넷 게이트웨이에 대한 직접 경로가 없는 private 서브넷만 지원됩니다. 따라서 EKS 클러스터를 프로비저닝하는 동안 생성하는 VPC에 하나 이상의 private 서브넷이 포함되어 있는지 확인해야 합니다. eksctl 유틸리티로 EKS 클러스터를 만들면 이러한 요구 사항을 충족하는 VPC가 생성됩니다.
3. 모니터링 구성
3-1. Cloudwatch & Fluent
Cloudwatch-agent 서비스 어카운트 IAM role 및 Fluent service account IAM role 을 생성합니다.
kubectl get pod -l "app=cwagent-prometheus" -n amazon-cloudwatch
3-3. Fargate Logging
Fargate를 사용하는 Amazon EKS는 built-in log router를 지원하는데, 이것은 설치 또는 유지할 사이드카 컨테이너가 없음을 의미합니다. 컨테이너 로그를 발송할 위치를 정의하는 Fluent Conf 데이터 값을 사용하여 ConfigMap을 Amazon EKS 클러스터에 적용합니다. 이 로깅 ConfigMap은 aws-observability라는 고정 네임스페이스에서 사용해야 하므로 클러스터 전체의 효과가 있습니다. 즉, 모든 네임스페이스의 모든 애플리케이션에서 로그를 보낼 수 있습니다. 이 워크샵에서는 Cloudwatch_logs를 사용하여 Fargate 클러스터의 EKS에서 실행되는 워크로드에서 CloudWatch로 로그를 전송하는 방법에 대해 설명합니다.
먼저 전용 aws-observability 네임스페이스와 ConfigMap for Fluent Bit를 생성합니다.
eks-app-mesh-polyglot-demo -> deployment -> fluentbit-config.yaml 파일을 아래와 같이 수정합니다.
kind: ConfigMap
apiVersion: v1
metadata:
name: aws-logging
namespace: aws-observability
labels:
data:
output.conf: |
[OUTPUT]
Name cloudwatch_logs
Match *
region ${AWS_REGION}
log_group_name fluent-bit-cloudwatch
log_stream_prefix from-fluent-bit-
auto_create_group true
cd eks-app-mesh-polyglot-demo
envsubst < ./deployment/fluentbit-config.yaml | kubectl apply -f -
Fluent Bit ConfigMap 배포를 확인합니다.
kubectl -n aws-observability get cm
Fluent Bit를 설정하면 다음에 CloudWatch에 쓸 수 있는 권한을 부여해야 합니다. 먼저 정책을 로컬에서 다운로드하여 이 작업을 수행합니다.
일반적으로 사용자 애플리케이션 워크로드를 Kube-system 또는 default 이외의 네임스페이스로 배포하여 EKS에 배포된 Pod 간의 상호 작용을 보다 세분화된 기능으로 관리하는 것이 좋습니다. 이 장에서는 app: prodcatalog레 이블을 갖고 있는 prodcatalog-ns 네임스페이스로 예정된 모든 포드를 대상으로 하는 fargate-productcatalog 라는 새로운 Fargate 프로파일을 작성하겠습니다. 에서 아래 Fargate 프로파일 구성을 볼 수 있습니다.