Regional Persistent Disksについて
Persistent Disksは1ゾーンのみで使用できるものだが、Regional Persistent Disks は異なるゾーンにインスタンスにアタッチができる。
ディスクの内容はレプリケーションしてくれる。
regional persistent disks provide durable storage and replication of data between two zones in the same region.
Persistent Disksの作成
gcloud beta compute disks create web-disk-2 --size 30GB --type pd-ssd --region asia-east1 --replica-zones asia-east1-a,asia-east1-b
–replica-zonesに、2ゾーンを指定する。ただし、3 ゾーンを指定すると、–replica-zones: too many args となり、作成できない。
最初に作成されたディスクの確認をします。
$ gcloud beta compute disks list NAME LOCATION LOCATION_SCOPE SIZE_GB TYPE STATUS web-disk-2 asia-east1 region 30 pd-ssd READY
7/8現在、Web コンソールからはRegional Persistent Disksを確認できない。
regional diskのwriteモードでのアタッチは1インスタンスしかできないことは、Persistent Disksと同じ
Persistent Disksだと、ROMだと別のインスタンスにアタッチが可能
Regional Persistent Disksについては下記を参照してください。
https://cloud.google.com/compute/docs/disks/regional-persistent-disk
kubernatesでRegional Persistent Disksを使うには
regional diskをPersistentVolumeで使う場合、下記のように、PersistentVolumeを作成します
( failure-domain.beta.kubernetes.io/zoneタグが要)
※https://kubernetes.io/docs/concepts/storage/volumes/
apiVersion: v1 kind: PersistentVolume metadata: name: task-pv-volume labels: failure-domain.beta.kubernetes.io/zone: asia-east1-a__asia-east1-b spec: storageClassName: manual capacity: storage: 30Gi accessModes: - ReadWriteOnce gcePersistentDisk: pdName: web-disk-2 fsType: ext4
kubernetesのmaster versionは、1.10が必要(1.10.5-gke.0で動確)
それ以下だとPersistentVolumeでエラーとなります。
$ kubectl create -f test.yml Error from server (Forbidden): error when creating "test.yml": persistentvolumes "task-pv-volume" is forbidden: error querying GCE PD volume web-disk-2: The regional PD feature is only available via the GCE Alpha API. Enable "GCEDiskAlphaAPI" in the list of "alpha-features" in "gce.conf" to use the feature.
次に、PersistentVolumeClaimの作成
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: task-pv-claim spec: storageClassName: manual accessModes: - ReadWriteOnce resources: requests: storage: 30Gi
$ kubectl create -f task-pv-claim.yml persistentvolumeclaim "task-pv-claim" created $ kubectl get pvc task-pv-claim NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE task-pv-claim Bound task-pv-volume 30Gi RWO manual 9s $ kubectl get pv task-pv-volume NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE task-pv-volume 30Gi RWO Retain Bound default/task-pv-claim manual
task-pv-claimをPodからマウントするコンフィグを作成
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: web-app labels: app: WebApp spec: template: metadata: labels: app: mysql-client spec: containers: - name: web image: asia.gcr.io/xxxxxxxxxxxxxxx/nginx:latest ports: - containerPort: 8080 env: - name: WORDPRESS_DB_HOST value: 127.0.0.1:3306 # These secrets are required to start the pod. # [START cloudsql_secrets] - name: WORDPRESS_DB_USER valueFrom: secretKeyRef: name: cloudsql-db-credentials key: username - name: WORDPRESS_DB_PASSWORD valueFrom: secretKeyRef: name: cloudsql-db-credentials key: password # [END cloudsql_secrets] volumeMounts: - name: task-pv-storage mountPath: /www - name: php-fpm image: asia.gcr.io/xxxxxxxxxxxxxxx/php-fpm:latest ports: - containerPort: 9000 # Change <INSTANCE_CONNECTION_NAME> here to include your GCP # project, the region of your Cloud SQL instance and the name # of your Cloud SQL instance. The format is # $PROJECT:$REGION:$INSTANCE # [START proxy_container] - name: cloudsql-proxy image: gcr.io/cloudsql-docker/gce-proxy:1.11 command: ["/cloud_sql_proxy", "-instances=xxxxxxxxxxxxxxx:asia-east1:web2-db=tcp:3306", "-credential_file=/secrets/cloudsql/credentials.json"] volumeMounts: - name: cloudsql-instance-credentials mountPath: /secrets/cloudsql readOnly: true # [END proxy_container] # [START volumes] volumes: - name: cloudsql-instance-credentials secret: secretName: cloudsql-instance-credentials - name: task-pv-storage persistentVolumeClaim: claimName: task-pv-claim # [END volumes]
kubectl apply -f deployment.yml
でデプロイし、Podにログインして、Regional Persistent Disksが、マウントされていることを確認しました。
root@web-app-84dcf8d8c8-vdnjp:/# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk |-sda1 8:1 95.9G 0 part /etc/hosts |-sda2 8:2 0 16M 0 part |-sda3 8:3 0 2G 0 part |-sda4 8:4 0 16M 0 part |-sda5 8:5 0 2G 0 part |-sda6 8:6 512B 0 part |-sda7 8:7 0 512B 0 part |-sda8 8:8 16M 0 part |-sda9 8:9 0 512B 0 part |-sda10 8:10 0 512B 0 part |-sda11 8:11 8M 0 part `-sda12 8:12 0 32M 0 part sdb 8:16 0 30G 0 disk /www