Prometheus-Grafana 설치(EKS)

유정훈·2023년 6월 12일
0

AWS

목록 보기
4/4

사전 준비

  • EKS
  • Node-group
  • namespace: monitoring

EBS-CSI-Driver 설치

Prometheus가 수집한 metric data를 EBS Volume에 저장하기 위해 EBS Volume을 자동 생성 관리하는 EKS Add-on EBS-CSI-Driver를 설치해야 한다.

eksctl을 이용한 IAM Role 생성

역할 생성

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

EBS Volume 암호화 (optional)

cat <<EOF > kms-key-for-encryption-on-ebs.json
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kms:CreateGrant",
        "kms:ListGrants",
        "kms:RevokeGrant"
      ],
      "Resource": ["custom-key-arn"],
      "Condition": {
        "Bool": {
          "kms:GrantIsForAWSResource": "true"
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:ReEncrypt*",
        "kms:GenerateDataKey*",
        "kms:DescribeKey"
      ],
      "Resource": ["custom-key-arn"]
    }
  ]
}
EOF
aws iam create-policy \
  --policy-name KMS_Key_For_Encryption_On_EBS_Policy \
  --policy-document file://kms-key-for-encryption-on-ebs.json
aws iam attach-role-policy \
  --policy-arn arn:aws:iam::111122223333:policy/KMS_Key_For_Encryption_On_EBS_Policy \
  --role-name AmazonEKS_EBS_CSI_DriverRole

콘솔에서 Add-on 추가

  • https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.
  • 좌측 탐색 창에서 클러스터(Clusters)를 선택합니다.
  • Amazon EBS CSI 추가 기능을 구성할 클러스터의 이름을 선택합니다.
  • 추가 기능(Add-ons) 탭을 선택합니다.
  • 새로 추가를 선택합니다.
  • 이름(Name)으로 Amazon EBS CSI 드라이버(Amazon EBS CSI Driver)를 선택합니다.
  • 사용할 버전(Version)을 선택합니다.
  • 서비스 계정 역할(Service account role)에서 IAM 정책을 연결한 IAM 역할의 이름을 선택합니다.
  • 클러스터에서 이 추가 기능에 대한 기존 구성을 재정의합니다.(Override existing configuration for this add-on on the cluster.)를 선택할 경우 기존 추가 기능에 대한 하나 이상의 설정을 Amazon EKS 추가 기능의 설정으로 덮어쓸 수 있습니다. 이 옵션을 사용 설정하지 않고 기존 설정과 충돌이 있는 경우 작업이 실패합니다. 결과 오류 메시지를 사용하여 충돌을 해결할 수 있습니다. 이 옵션을 선택하기 전에 Amazon EKS 추가 기능이 사용자가 자체 관리해야 하는 설정을 관리하지 않는지 확인하세요. Amazon EKS 추가 기능 관리에 대한 자세한 내용은 Kubernetes 필드 관리 섹션을 참조하세요.
  • 추가(Add)를 선택합니다.

Prometheus 영구 볼륨 설정

Storage Class 설정

Prometheus를 배포하던 pod가 중지되거나 삭제될 시 그동안 수집했던 데이터들이 전부 휘발된다.
그러므로 pod가 중지되거나 삭제되어도 volume이 남아있을 수 있도록 설정해야 한다.

# storageClass.yml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: monitor-sc
  # annotations:
  #   storageclass.kubernetes.io/is-default-class: "true"
provisioner: kubernetes.io/aws-ebs
parameters:
  type: gp2
  fsType: ext4 
reclaimPolicy: Retain
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
  • reclaimPolicy: 유지
# Add storageClass
kubectl apply -f storageClass.yml

Prometheus-Grafana 배포

helm repo 추가

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

Values 수정

alertmanager:
  enabled: true
  alertmanagerSpec:
    storage:
      volumeClaimTemplate:
        spec:
          storageClassName: monitor-sc
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 10Gi

grafana:
  defaultDashboardsEnabled: true
  adminPassword: admin
  persistence:
    enabled: true
    storageClassName: monitor-sc
    accessModes: ["ReadWriteOnce"]
    resources:
      requests:
        storage: 10Gi

prometheus:
  prometheusSpec:
    retention: 5y
    # retentionSize: "1TiB"
    storageSpec:
      volumeClaimTemplate:
        spec:
          storageClassName: monitor-sc
          accessModes: ["ReadWriteOnce"]
          resources:
            requests:
              storage: 100Gi
  • grafana
    • admin계정 비밀번호 : admin
  • prometheus
    • 데이터 보존 : 5년
    • 스토리지 크기 : 100GB
# deploy prometheus-grafana-stack using helm
helm install prometheus -n monitoring prometheus-community/kube-prometheus-stack -f values.yaml

Grafana 접속

ingress

# grafana-ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  namespace: monitoring
  name: grafana-ingress
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
spec:
  rules:
    - http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: prometheus-grafana
                port:
                  number: 80
# ingress
kubectl apply -f grafana-ingress.yaml

사용 중 EBS Volume 증설

pvc와 values를 수정 후 적용하면 된다.

kubectl get pvc -n monitoring

결과로 나온 pvc를 수정

kubectl edit pvc <prometheus-pvc> -n monitoring

Storage 증설 후 :wq

values 파일에서 storage 증설 후

# upgrade prometheus-grafana-stack using helm
helm upgrade -i prometheus -n monitoring prometheus-community/kube-prometheus-stack -f values.yaml
profile
안녕하세요!

0개의 댓글