GKEでPersitentVolumeを使う

KubernetesでPersitentVolumeを使う方法はドキュメントに書いてありますが、使う環境によって永続ディスクが異なるためにスムーズにいかないことがあります。
そのため、今回はGKEでPersitentVolumeを使う方法を紹介します。

環境

GKE 1.9.7-gke.0

永続ディスクの用意

まずはGCPで永続ディスクを作成します。

GUICUIどちらでも大丈夫ですが今回はCUIで作成してみます。

$ gcloud compute --project={your-project} disks create sample-disk --zone=asia-northeast1-b --type=pd-ssd --size=100GB

このようになると思います。

f:id:akaimo3:20180523215724p:plain

これで永続ディスクの作成は完了です。

PersitentVolumeの作成

ここからはKubernetesの設定に入ります。

Podが永続ディスクを使用するためにはPersitentVolumeだけではなく、PersistentVolumeClaimというものも作成しなければいけません。

PersitentVolumeには先程作成した永続ディスクについての設定を記述します。
また、PersistentVolumeClaimを作成することで、PodがPersitentVolumeを見つけることができるようになります。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: sample-pv
  labels:
    app: sample-pv
spec:
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  gcePersistentDisk:
    pdName: sample-disk
    fsType: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: sample-pvc
  labels:
    app: sample-pvc
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: ""
  resources:
    requests:
      storage: 100Gi
  selector:
    matchLabels:
      app: sample-pv

Podにマウントする

最後にPodからアクセスできるようにします。

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: sample-deployment
spec:
  ...
  template:
    ...
    spec:
      containers:
        - name: sample
          ...
          volumeMounts:
            - name: sample-volume
              mountPath: /sample
      volumes:
        - name: sample-volume
          persistentVolumeClaim:
            claimName: sample-pvc
      securityContext:
        fsGroup: 2000
        runAsNonRoot: true
        runAsUser: 1000

ポイントはsecurityContextの部分です。
この記述がないと、permissionでエラーになってPodが起動しなくなってしまいます。

以上がGKEでPersitentVolumeを使用する方法です。
PersitentVolumeのような環境に依存する部分は、具体的なコードがあまりないので誰かの参考になれば嬉しいです。