JSCODE Logo
프로그래밍 과외블로그후기멘토진
회사명 : JSCODE대표 : 박재성사업자 등록번호 : 244-22-01557통신판매업 : 제 2023-인천미추홀-0381 호
학원 명칭 : 제이에스코드(JSCODE)원격학원학원설립ㆍ운영 등록번호 : 제6063호

서울특별시 구로구 경인로 20가길 11(오류동, 아델리아)

Copyright ⓒ 2025 JSCODE - 최상위 현업 개발자들의 프로그래밍 교육 All rights reserved.

이용약관개인정보처리방침
← 블로그 목록으로 돌아가기

볼륨(Volume)을 활용해 MySQL 실행시키기

JSCODE 박재성
JSCODE 박재성
2025-12-06
author
JSCODE 박재성
category
쿠버네티스
createdAt
Dec 6, 2025
series
비전공자도 이해할 수 있는 쿠버네티스 입문/실전
slug
run-mysql-with-volume
type
post
updatedAt
Dec 6, 2025 04:46 AM

✅ 볼륨(Volume)을 활용해 MySQL 실행시키기

🧑🏻‍🏫
데이터베이스를 확인해보면 이전에 만들었던 new-db라는 데이터베이스가 없어졌다. 실제 데이터베이스에서는 데이터가 없어져서는 안 된다. 데이터가 보존되도록 볼륨(Volume)을 설정해보자.
 
  1. 퍼시스턴트 볼륨(PV), 퍼시스턴트 볼륨 클레임(PVC) 정의하기
    1. mysql-pv.yaml
      apiVersion: v1 kind: PersistentVolume # PersistentVolume 기본 정보 metadata: name: mysql-pv # PersistentVolume 이름 # PersistentVolume 세부 정보 spec: storageClassName: my-storage # PV와 PVC의 storageClassName이 같다면 볼륨이 연결된다. capacity: storage: 1Gi # 볼륨이 사용할 용량을 설정 accessModes: - ReadWriteOnce # 아래 hostPath 타입 활용 시 이 옵션만 사용 가능 hostPath: # hostPath 타입을 활용 (hostPath : 쿠버네티스 내부 공간을 활용) path: "/mnt/data" # 쿠버네티스 내부의 공간에서 /mnt/data의 경로를 볼륨으로 사용
       
      mysql-pvc.yaml
      apiVersion: v1 kind: PersistentVolumeClaim # PersistentVolumeClaim 기본 정보 metadata: name: mysql-pvc # PersistentVolumeClaim 이름 # PersistentVolumeClaim 세부 정보 spec: storageClassName: my-storage # PV와 PVC의 storageClassName이 같다면 볼륨이 연결된다. accessModes: - ReadWriteOnce # 볼륨에 접근할 때의 권한 resources: # PVC가 PV에 요청하는 리소스의 양을 정의 requests: # 필요한 최소 리소스 storage: 1Gi # PVC가 PV에 요청하는 스토리지 양 (PV가 최소 1Gi 이상은 되어야 한다.)
 
  1. 기존 디플로이먼트(Deployment) 수정하기
    1. mysql-deploymentyaml.yaml
      apiVersion: apps/v1 kind: Deployment # Deployment 기본 정보 metadata: name: mysql-deployment # Deployment 이름 # Deployment 세부 정보 spec: replicas: 1 # 생성할 파드의 복제본 개수 selector: matchLabels: app: mysql-db # 아래에서 정의한 Pod 중 'app: backend-app'이라는 값을 가진 파드를 선택 # 배포할 Pod 정의 template: metadata: labels: # 레이블 (= 카테고리) app: mysql-db spec: containers: - name: mysql-container # 컨테이너 이름 image: mysql # 컨테이너를 생성할 때 사용할 이미지 ports: - containerPort: 3306 # 컨테이너에서 사용하는 포트를 명시적으로 표현 env: - name: MYSQL_ROOT_PASSWORD valueFrom: secretKeyRef: name: mysql-secret key: mysql-root-password - name: MYSQL_DATABASE valueFrom: configMapKeyRef: name: mysql-config key: mysql-database # 컨테이너 내에서 어떤 경로를 볼륨으로 사용할 지 지정 volumeMounts: - name: mysql-persistent-storage # 밑에서 설정할 volumes.name과 값이 같아야 함 mountPath: /var/lib/mysql # mysql 컨테이너 내부에 있는 경로 # 파드가 사용할 볼륨을 지정 volumes: - name: mysql-persistent-storage # 위에서 설정할 volumeMounts.name과 일치해야 함 persistentVolumeClaim: claimName: mysql-pvc # 연결시킬 PVC의 name과 동일해야 함
       
  1. 매니페스트 파일 반영하기
    1. $ kubectl apply -f mysql-pv.yaml $ kubectl apply -f mysql-pvc.yaml $ kubectl apply -f mysql-deployment.yaml
       
  1. 새로운 데이터베이스 생성하기
    1. notion image
       
  1. 디플로이먼트 재시작하기
    1. $ kubectl rollout restart deployment mysql-deployment
       
  1. 데이터베이스 다시 확인해보기
    1. 디플로이먼트를 재시작하기 전에 생성했던 데이터베이스가 삭제되지 않고 그대로 잘 남아있는 걸 확인할 수 있다.
      notion image
       
author
category
쿠버네티스
createdAt
Dec 6, 2025
series
비전공자도 이해할 수 있는 쿠버네티스 입문/실전
slug
type
series-footer
updatedAt
Dec 6, 2025 04:46 AM
📎
이 글은 비전공자도 이해할 수 있는 쿠버네티스 입문/실전 강의의 수업 자료 중 일부입니다.