taketiyo.log

Web Engineering 🛠 & Body Building 💪

【kubernetes】Podから永続ボリュームを利用する【GKE】

Programming

  / /

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.persistentVolumeReclaimPolicyPVCが削除された際に永続ボリュームをどのように扱うかの挙動を設定出来ます。

  • Retain
    • 手動データ削除
  • Recycle
    • 自動データ削除 (rm -rf /thevolume/*)
  • Delete
    • PVCに紐付いているボリューム自体を削除(AWS EBS, GCE PD, Azure Disk, OpenStack Cinder volume)

※参考
 
ファイルを作成したら下記コマンドにてPVPVCを作成します。

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になっているので、書き込み時にエラーが発生しないように注意しましょう。