✅ Volumeを活用したMySQLの実行
🧑🏻🏫 データベースを確認すると、以前作成した「new-db」というデータベースが消失している。実際のデータベース運用において、データが消失してはならない。データが保持されるよう、ボリューム(Volume)を設定する。
PV、PVCの定義
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:Kubernetes内部の領域を活用)
path: "/mnt/data" # Kubernetes内部の領域における「/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以上である必要がある)
Deploymentの修正
mysql-deployment.yaml
apiVersion: apps/v1
kind: Deployment
# Deploymentの基本情報
metadata:
name: mysql-deployment # Deployment名
# Deploymentの詳細情報
spec:
replicas: 1 # 作成するPodのレプリカ数
selector:
matchLabels:
app: mysql-db # 以下で定義したPodのうち、「app: backend-app」という値を持つPodを選択
# デプロイする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コンテナ内部のパス
# Podが使用するボリュームを指定
volumes:
- name: mysql-persistent-storage # 上で設定したvolumeMounts.nameと一致する必要がある
persistentVolumeClaim:
claimName: mysql-pvc # 紐付けるPVCのnameと同一である必要がある
Manifestの反映
$ kubectl apply -f mysql-pv.yaml
$ kubectl apply -f mysql-pvc.yaml
$ kubectl apply -f mysql-deployment.yaml
新規データベースの作成

Deploymentの再起動
$ kubectl rollout restart deployment mysql-deployment
データベースの再確認

Deploymentを再起動する前に作成したデータベースが削除されず、そのまま保持されていることが確認できる。
t - MySQL(Volume未設定)
'k8s > archive_1' 카테고리의 다른 글
| 17.Volume - ConfigMap、Secret (0) | 2026.03.18 |
|---|---|
| 16.Deployment - Spring BootとMySQLの連携 (0) | 2026.03.18 |
| 14.Deployment - MySQL(Volume未設定) (0) | 2026.03.18 |
| 13.Volumeとは? (0) | 2026.03.18 |
| 12.Secret (0) | 2026.03.18 |