k8s/archive_1

15.Deployment - MySQL(Volume設定)

YOOANT 2026. 3. 18. 14:22

✅ 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

日本語