GKEにて複数Pod内の特定ディレクトリを永続ボリューム(PersitentVolume)を用いて共有する方法です。なお、作業はCloud Shell上にて行っています。
目次
達成できること
- 永続ボリュームを作成し、Podからそのボリュームを参照できる状態にする
永続ボリュームの作成
永続ボリュームの作成はGCE(Google Compute Engine)の画面にて行います。
GCEの左メニューより「ディスク」→「ディスクを作成」を選択。
「名前」「タイプ」「リージョン」「ゾーン」「サイズ」の欄を設定します。
ここではそれぞれ下記の通り設定しました。
- 名前: example-disk
- タイプ: SSD 永続ディスク
- リージョン: asia-northeast1
- ゾーン: asia-northeast1-c
- サイズ: 100
※「暗号化」の項目はそのままで問題ありません。
設定が完了したら、画面下部の「作成」を押下して完了です。
ボリュームの作成は通常数十秒~数分で完了します。
ボリュームの作成が完了すると、下記画像のように一覧にボリュームが表示されます。
これで永続ボリュームの作成は完了です。
PV、PVC の作成
作成した永続ボリュームをPodから利用するためには、Kubernetes にてPV
(PersitentVolume)、及びPVC
(PersistentVolumeClaim)を作成する必要があります。
下記の内容をvolume.yaml
として作成します。
# volume.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
# 任意のPV名を設定します
name: example-pv
spec:
capacity:
# 作成したボリュームの容量と合わせます
storage: 100Gi
accessModes:
- ReadWriteOnce # 下記参照
persistentVolumeReclaimPolicy: Retain # 下記参照
# 任意の名前を設定
storageClassName: cache
gcePersistentDisk:
# GUIより作成した永続ボリューム名を設定します
pdName: example-disk
fsType: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
# 任意のPVC名を設定します
name: example-pvc
spec:
accessModes:
- ReadWriteOnce # 下記参照
# PVにて設定したものと同様の値を設定します
storageClassName: cache
resources:
requests:
# 作成したボリュームの容量と合わせます
storage: 100Gi
spec.accessModes
は3つのモードが存在しており、それぞれ下記の通りです。
- ReadWriteOnce
- 単一ノードから
Read/Write
でマウント可能
- 単一ノードから
- ReadOnlyMany
- 複数ノードから
Read Only
でマウント可能
- 複数ノードから
- ReadWriteMany
- 複数ノードから
Read/Write
でマウント可能
- 複数ノードから
spec.accessModes
は使用するボリュームにより、設定できるモードが変わります。下記ページにて確認出来るので環境に合わせて選択します。
https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes
GCEの永続ボリュームを利用する場合、ReadWriteMany
はサポートされていないのでReadWriteOnce
を指定します。
spec.persistentVolumeReclaimPolicy
はPVC
が削除された際に永続ボリュームをどのように扱うかの挙動を設定出来ます。
- Retain
- 手動データ削除
- Recycle
- 自動データ削除 (rm -rf /thevolume/*)
- Delete
- PVCに紐付いているボリューム自体を削除(AWS EBS, GCE PD, Azure Disk, OpenStack Cinder volume)
※参考
ファイルを作成したら下記コマンドにてPV
、PVC
を作成します。
kubectl apply -f volume.yaml
Deployment を修正
Pod内にてボリュームを参照出来るように、Deployment を下記の様に設定します。
# deployment.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: example-deployment
spec:
...
template:
...
spec:
...
containers:
- name: example
...
volumeMounts:
- name: example-volume
mountPath: /var/www/html # 任意のパス
...
volumes:
- name: example-volume
persistentVolumeClaim:
claimName: example-pvc
これでPod内の/var/www/html
が永続ボリュームを参照するようになります。
永続ボリュームのパーミッションは初期状態で所有者root
の権限755
になっているので、書き込み時にエラーが発生しないように注意しましょう。