DevOps/Kubernetes

Kubernetes 환경에서 InfluxDB를 자동화된 방식으로 배포하기

DEBTOLEE 2025. 4. 5. 09:15

이 글에서는 Kubernetes 클러스터에서 InfluxDB를 NFS 기반 퍼시스턴트 스토리지를 활용하여 자동화된 방식으로 배포하고 초기 설정까지 완료하는 방법을 다룹니다. 특히 NFS 서버를 활용해 데이터를 외부에 안전하게 저장하는 구성하는 것이 핵심입니다~!

📌 기본 구성 정보

  • NFS Server: 192.168.0.99
  • 스토리지 경로: /mnt/influxdb

📁 1. PersistentVolume & PersistentVolumeClaim 구성

InfluxDB 데이터를 저장할 볼륨을 NFS를 통해 구성합니다.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: db-influxdb-pv
  labels:
    type: nfs
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteMany
  nfs:
    server: 192.168.0.99
    path: /mnt/influxdb
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: db-influxdb-pvc
spec:
  storageClassName: ""
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  selector:
    matchExpressions:
      - key: type
        operator: In
        values:
          - nfs

🧱 2. StatefulSet을 통한 InfluxDB 배포

InfluxDB 컨테이너를 StatefulSet으로 배포하고 위에서 정의한 PVC를 마운트합니다.

apiVersion: apps/v1
kind: StatefulSet
metadata:
  labels:
    app: db-influxdb
  name: db-influxdb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: db-influxdb
  template:
    metadata:
      labels:
        app: db-influxdb
    spec:
      restartPolicy: Always
      containers:
        - image: quay.io/influxdb/influxdb:v2.0.3
          name: db-influxdb
          resources:
            limits:
              memory: "128Mi"
              cpu: 1
          ports:
            - name: api
              containerPort: 9999
            - name: gui
              containerPort: 8086
          volumeMounts:
            - mountPath: /root/.influxdbv2
              name: var-lib-influxdb
      volumes:
        - name: var-lib-influxdb
          persistentVolumeClaim:
            claimName: db-influxdb-pvc

🌐 3. Service 정의

InfluxDB에 접근할 수 있도록 NodePort 방식의 서비스 리소스를 생성합니다.

apiVersion: v1
kind: Service
metadata:
  labels:
    app: influxdb
  name: influxdb
spec:
  ports:
    - port: 8086
      protocol: TCP
      targetPort: 8086
      nodePort: 30086  # 필요시 임의 설정 가능
  selector:
    app: db-influxdb
  type: NodePort

⚙️ 4. 초기 설정 자동화를 위한 Job 실행

InfluxDB는 최초 실행 시 사용자 설정, 조직명, 토큰 등의 초기 설정이 필요합니다. 이를 Job으로 자동화합니다.

apiVersion: batch/v1
kind: Job
metadata:
  name: db-influxdb-setup
spec:
  template:
    spec:
      terminationGracePeriodSeconds: 10
      restartPolicy: Never
      containers:
        - name: create-credentials
          image: quay.io/influxdb/influxdb:v2.0.3
          command:
            - influx
          args:
            - setup
            - --host
            - http://influxdb.네임스페이스:8086
            - --bucket
            - 버킷명
            - --org
            - 회사명
            - --password
            - 비밀번호
            - --username
            - 유저명
            - --token
            - 토큰
            - --force

네임스페이스 또는 서비스 주소는 클러스터 내부 도메인 규칙에 맞게 수정해 주세요.


✅ 마무리

이렇게 구성하면 Kubernetes 환경에서도 안정적인 InfluxDB 사용이 가능하며, 자동화를 통해 반복적인 수동 설정을 줄일 수 있습니다. 이후 Grafana, Telegraf 등과 연동하여 데이터 시각화 환경을 쉽게 확장할 수 있습니다.