[kubernetes] Pod에 File Mount 하는 방법(ConfigMap 사용)

Joseph's Engineering Blog·2023년 4월 1일
0

TroubleShooting

목록 보기
1/2
post-thumbnail

포스팅 이유

prometheus operator를 통해 prometheus를 설치한 환경에서 prometheus 컨테이너 내부의 prometheus.yml 설정 파일을 수정하면서 겪은 문제(?)를 어떻게 해결했는지 남기기 위해

ConfigMap 이란?
단어 그대로 설정(Config)을 키-값(Map)형태로 저장하는데 사용
ConfigMap에 데이터를 저장하고, 컨테이너에서 ConfigMap에 접근하여 데이터를 획득하여 사용

ConfigMap에 대해서는 별도의 Post에서 자세히 알아보자

발생한 문제

  1. prometheus.yml 파일을 configMap으로 생성
apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-cm
  namespace: monitoring
data:
  prometheus.yml: |
    # my global config
    global:
      scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
    
       ...
   
        static_configs:
          - targets: ["localhost:9090"]
  1. configMap의 내용을 prometheus pod가 생성될 때 가지고 생성되게 하기 위해 Prometheus Object의 내용 수정
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: k8s
  namespace: monitoring  
  ...
spec:
  containers:
  - name: prometheus
    volumeMounts:
    - mountPath: /etc/prometheus
      name: prometheus-cm
      subPath: prometheus.yml
      ...
  volumes:
  - configMap:
      items:
      - key: prometheus.yml
        path: prometheus.yml
      name: prometheus-cm
  1. 설정 후 prometheus pod가 'CreateContainerError' 상태에 빠짐 (pod describe 했을때의 Log)

문제 해결

원인

volumeMounts를 할 때 mountPath에 해당 경로의 어떤 파일인지 파일명까지 넣어야 하는데, 해당 파일이 위치한 경로까지만 잡아줘서 문제 발생.

해결

  1. configMap의 내용을 prometheus pod가 생성될 때 가지고 생성되게 하기 위해 Prometheus Object의 내용 수정

과정에서 volumeMounts의 mountPath 수정

apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: k8s
  namespace: monitoring  
  ...
spec:
  containers:
  - name: prometheus
    volumeMounts:
    - mountPath: /etc/prometheus/prometheus.yml
      name: prometheus-cm
      subPath: prometheus.yml
      ...
  volumes:
  - configMap:
      items:
      - key: prometheus.yml
        path: prometheus.yml
        name: prometheus-cm # volumeMounts의 name과 일치
    name: prometheus-cm # 사용할 configMap 이름
profile
Kubernetes / DevOps / Git / Network / AWS / Terraform / Opensource / Java / Springboot

0개의 댓글