개요
이전글에 알람에 대해서 정리했었는데 결국 알람을 받으려면 잘 구성된
모니터링 아키텍처가 있어야한다 !
그러므로 잘 구성해보려고 노력하는 모습이 담긴
모니터링 아키텍처를 직접 만들어 보자💪
[EKS]
1. EKS 환경설정
- 이전글 참조 > EKS환경설정
2. EKS 생성(eksctl)
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: dhkim-eks # 생성할 EKS 클러스터명
region: ap-northeast-2 # 클러스터를 생성할 리전
version: "1.27"
vpc:
cidr: "20.0.0.0/16" # 클러스터에서 사용할 VPC의 CIDR
nat:
gateway: HighlyAvailable
managedNodeGroups:
- name: node-group # 클러스터의 노드 그룹명
instanceType: t3.xlarge # 클러스터 워커 노드의 인스턴스 타입
desiredCapacity: 1 # 클러스터 워커 노드의 갯수
volumeSize: 20 # 클러스터 워커 노드의 EBS 용량 (단위: GiB)
privateNetworking: true
ssh:
enableSsm: true
iam:
withAddonPolicies:
imageBuilder: true # Amazon ECR에 대한 권한 추가
albIngress: true # albIngress에 대한 권한 추가
cloudWatch: true # cloudWatch에 대한 권한 추가
autoScaler: true # auto scaling에 대한 권한 추가
ebs: true # EBS CSI Driver에 대한 권한 추가
cloudWatch:
clusterLogging:
enableTypes: ["*"]
iam:
withOIDC: true

[Prometheus]
1. 프로메테우스 배포
kubectl create namespace monitoring
- monitoring 네임스페이스 생성
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
- prometheus-community 차트 리포지토리를 추가
helm upgrade -i prometheus prometheus-community/prometheus \
--namespace monitoring \
--set alertmanager.persistentVolume.storageClass="gp2",server.persistentVolume.storageClass="gp2"

2. CSI 드라이버 IAM역할 생성


- AWS EBS를 PV로 사용하려면 접근권한을 설정해줘야한다
eksctl create iamserviceaccount \
--name ebs-csi-controller-sa \
--namespace kube-system \
--cluster my-cluster \
--attach-policy-arn arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy \
--approve \
--role-only \
--role-name AmazonEKS_EBS_CSI_DriverRole
- IAM역할생성
eksctl create addon --name aws-ebs-csi-driver --cluster my-cluster --service-account-role-arn arn:aws:iam::111122223333:role/AmazonEKS_EBS_CSI_DriverRole --force
- ebs csi 확인
eksctl get addon --name aws-ebs-csi-driver --cluster my-cluster



- 잘 바운드 되었다.

3. alertmanger 수정

- ip주소를 알수 없다고 나온다

- 스테이트풀셋에 있는 alertmanger를 클러스터 내부에서 통신하기위해 컨피그 수정

- 완벽하게 다 올라왔다
[Grafana]
1. 그라파나 배포
- 그라파나 docs에서 기본적으로 매니페스트를 제공해준다
Deploy Grafana on Kubernetes | Grafana documentation
Enterprise Open source Deploy Grafana on Kubernetes You can use Grafana Cloud to avoid installing, maintaining, and scaling your own instance of Grafana. Create a free account to get started, which includes free forever access to 10k metrics, 50GB logs, 50
grafana.com

- 그냥 있는 그대로 설치해도 무방하지만 난 ingress를 사용하여 프로메테우스와 그라파나를 접근하고싶기 때문에
type과 port를 변경하였다. 그리고 namespace도 monitoring으로 설정

- 다행히 그라파나배포는 별문제없었고 필요한것들은 다 올라왔다.
[AWS Load Balancer Controller]
1. IAM 정책생성
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.7/docs/install/iam_policy.json
aws iam create-policy \
--policy-name AWSLoadBalancerControllerIAMPolicy \
--policy-document file://iam_policy.json
- 정책생성
2. ServiceAccount 생성
eksctl create iamserviceaccount \
--cluster=my-cluster \
--namespace=kube-system \
--name=aws-load-balancer-controller \
--role-name AmazonEKSLoadBalancerControllerRole \
--attach-policy-arn=arn:aws:iam::111122223333:policy/AWSLoadBalancerControllerIAMPolicy \
--approve
3. AWS LoadBalancer Controller 설치
helm repo add eks https://aws.github.io/eks-charts
helm repo update
- 헬름 차트 업데이트
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
-n kube-system \
--set clusterName=my-cluster \
--set serviceAccount.create=false \
--set serviceAccount.name=aws-load-balancer-controller
- EKS가 Fargate일 경우 하기와 같은 옵션 추가
- --set region=region-code
- --set vpcId=vpc-xxxxxxxx
- kubectl get deployment -n kube-system aws-load-balancer-controller 로 설치가 잘 되었는지 확인
[Ingress]
1. Ingress 배포
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
namespace: monitoring
name: monitoring-ingress
annotations:
# Ingress Core Settings
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
alb.ingress.kubernetes.io/target-group-attributes: stickiness.enabled=true,stickiness.lb_cookie.duration_seconds=60
# SSL Settings
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:ap-northeast-2:'accountID':certificate/'ACMarn'
alb.ingress.kubernetes.io/ssl-redirect: '443'
spec:
rules:
- host: prometheus.dhkim94.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: prometheus-server
port:
number: 80
- host: grafana.dhkim94.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: grafana
port:
number: 80
- HTTPS를 위한 ingress.yaml작성
2. ELB확인


- ALB 및 그라파나,프로메테우스POD로 대상그룹 생성 완료
[Prometheus & Grafana]
1. ALB 접속확인

- https://prometheus.domain으로 프로메테우스 접속 및 메트릭 정보 확인

- https://prometheus.domain Grafana 접속확인
- id : admin
pw: admin
2. 그라파나 설정

- http://서비스이름.네임스페이스.svc:포트 로 데이터소스를 프로메테우스로 지정

- 그라파나에서 다양한 대시보드 템플릿을 제공해줌
- 13770이 마음에 들어서 사용

- EKS node1개에서 2개로 늘려보자

- node를 늘렸을때도 정상적으로 확인됨
- 연동 확인 완료 😎
🐃다음스탭은 이 구성된 모니터링 아키텍처를 좀 더 고도화 해볼예정이다(알람연동,자동등록등)
'Kubernetes' 카테고리의 다른 글
| [AWS EKS] 웹 애플리케이션 구축하기 - 5.CI/CD구성 (0) | 2023.04.27 |
|---|---|
| [AWS EKS] 웹 애플리케이션 구축하기 - 4.서비스 배포 (0) | 2023.04.25 |
| [AWS EKS] 웹 애플리케이션 구축하기 - 3.EKS 클러스터 설정 (0) | 2023.04.24 |
| [AWS EKS] 웹 애플리케이션 구축하기 - 2.EKS Terraform (2) | 2023.04.24 |
| [AWS EKS] 웹 애플리케이션 구축하기 - 1.환경설정 (0) | 2023.04.12 |