본문 바로가기

EKS/Prometheus & Grafana

Prometheus - EFS Provisioner / PVC 연동

 

프로메테우스는 시계열 DB이며, 파드가 Empty Dir이 기본 속성인 것을 생각하면,

파드가 죽었을 경우 그 동안 수집한 메트릭이 모두 사라진다는 것을 알 수 있습니다.

 

따라서 이를 방지하기 위해서 PVC를 통해 볼륨을 매핑하여 사용하여야 하는데,

AWS에서 EBS의 경우 Zone을 선택하여 사용해야하기 때문에,

이중화 삼중화 사중화등으로 구성한 경우, 프로메테우스가 해당 볼륨을 제대로 매핑할 수 없는 경우가 생깁니다.

 

물론, affinity 설정을 통해 PVC한 볼륨과 맞게 프로메테우스를 띄우시는 것도 방법입니다.

하지만, 이중화 구성을 못하기 때문에 EFS를 사용하여 해결하는 방법을 알아보도록 하겠습니다.

 

--- 수정 사항 ----------------------------------------------------------------------------

아래 구성 전 방화벽을 2049포트로 세팅하여 EFS와 노드간 SG 통신을 열어주셔야 합니다.

또한 VPC에서 DNS관련 세팅이 안되어있다면 쿼리가 되지 않으니 꼭 세팅해주시기 바랍니다.

-----------------------------------------------------------------------------------------

 

먼저, EFS Provisioner를 Helm을 통해 깔아서 EFS StorageClass, PV의 세팅을 해주도록 하겠습니다.

저는 아래와 같은 Value.yaml을 만들어서 매핑하여 사용하였습니다.

 

nodeSelector:
  nodegroup-type: MANAGE

efsProvisioner:
  efsFileSystemId: {efs_id}
  awsRegion: ap-northeast-2
  provisionerName: {ProvisionName}
  storageClass:
    reclaimPolicy: Retain

 

이후 Helm을 통해 설치하도록 하겠습니다. 아래 명령어를 입력해주세요

 

Helm2

 

helm install --name efs-provisioner stable/efs-provisioner --values ./values.yaml

 

Helm3

 

helm install -f ./values.yaml efs-provisioner stable/efs-provisioner

 

마지막으로, PVC를 생성하여 실제 EFS를 마운트 하도록 하겠습니다.

 

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: prometheus-pvc
  namespace: prometheus
  annotations:
    volume.beta.kubernetes.io/storage-class: aws-efs
  labels:
    type: prometheus-pvc
spec:
  storageClassName: aws-efs
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Gi

 

EFS Provisioner의 세팅은 끝났습니다.

 

이제 구성한 PVC를 가지고 Prometheus 세팅에서 EFS를 사용하시면 됩니다.

 

예시를 들어드리면 아래와 같습니다.

 

server:
  resources:
    requests:
      memory: "1Gi"
    limits:
      memory: "2Gi"
  nodeSelector:
    nodegroup-type: MANAGE
  persistentVolume:
    enabled: true
    storageClass: aws-efs
    size: 60Gi
    mountPath: /data/prometheus/server
    existingClaim: prometheus-pvc

 

위와 같이 values.yaml을 세팅한 후, Helm을 통해 프로메테우스를 설치 및 업그레이드해주시면 볼륨이 매핑 됩니다.

 

helm upgrade -f ./values.yaml -n prometheus prometheus stable/prometheus

 

스케줄링이 걸려있는 EKS의 모니터링 상태입니다.

 

 

서버를 죽였다가 살리더라도, Prometheus 서버가 죽었을 시점에만 데이터가 없고

그 외에는 이전 수집된 메트릭이 잘 나오는 것을 확인할 수 있습니다.