目前 Google Cloud 支持 Regional Disk,当 Zone 出现故障时, GKE pod在另外一个zone部署时,会自动挂载 Regional Disk 。这样使得 GKE 的可靠性更高。如下图:



本文将介绍如何实现 GKE 上挂载 Region Persistent Disk。


一 创建两个 zone 的 GKE Cluster


通过gcloud命令行:


CLUSTER_VERSION=$(gcloud beta container get-server-config --region us-west1 --format=‘value(validMasterVersions[0])’)


export CLOUDSDK_CONTAINER_USE_V1_API_CLIENT=false


gcloud beta container clusters create hw-rg-pd


–cluster-version=${CLUSTER_VERSION}


–machine-type=n1-standard-1


–region=us-west1


–num-nodes=1


–node-locations=us-west1-b,us-west1-c


–network=hw-mic-text


–subnetwork=vlan5


通过命令行查看创建的 Cluster:



二 创建 Regional Disk


Compute Engine中选择 Disks:



点击 create disk:



按如下参数创建 Persistent Disk:



三 创建 Storage Class


首先要创建支持多 zone Storage Class。编辑yaml文件:


vim gke-rg-pd-sc.yaml


kind: StorageClass


apiVersion: storage.k8s.io/v1


metadata:


name: rg-pd-sc


provisioner: kubernetes.io/gce-pd


parameters:


type: pd-standard


replication-type: regional-pd


zones: us-west1-b, us-west1-c


通过 kubectl apply -f gke-rg-pd-sc.yaml 创建 StorageClass。



可以看到,这个 StorageClass 支持多个 Zone。


四 MANUAL PROVISIONING


1 创建 PersistentVolume


编辑 yaml 文件:


vim gke-rg-pd-pv.yaml


apiVersion: v1


kind: PersistentVolume


metadata:


 name: rg-pd-pv


 labels:


   failure-domain.beta.kubernetes.io/zone: us-west1-b__us-west1-c


spec:


 storageClassName: rg-pd-sc


 capacity:


   storage: 200Gi


 accessModes:


 - ReadWriteOnce


 gcePersistentDisk:


   pdName: hw-gke-pv-04


   fsType: ext4


通过kubectl apply -f gke-rg-pd-pv.yaml创建PV


查看创建情况:



2 创建 PersistentVolumeClaim


编辑 yaml 文件:


vim gke-rg-pd-pvc.yaml


apiVersion: v1


kind: PersistentVolumeClaim


metadata:


name: rg-pd-pvc


spec:


storageClassName: rg-pd-sc


volumeName: rg-pd-pv


accessModes:


- ReadWriteOnce


resources:


requests:


storage: 200G


通过 kubectl apply -f gke-rg-pd-pvc.yaml 创建 PV


查看创建情况:



这样 pd、sc、pv、pvc 都关联起来了。


五 DYNAMIC PROVISIONING


这种模式下,在创建Pod时,系统会自动创建 Regional Persistent Disk。


1 创建 PersistentVolumeClaim


编辑 PVCyaml文件:


vim rg-pd-pvc.yaml


apiVersion: v1


kind: PersistentVolumeClaim


metadata:


name: rgpdpvc


spec:


accessModes:


- ReadWriteOnce


resources:


requests:


storage: 200Gi


storageClassName: rg-pd-sc


通过 kubectl apply -f rg-pd-pvc.yaml 创建这个 PVC。


六 创建 volume 基于 regional disk 的 pod


编辑 pod yaml 文件:


vim gke-rg-pd-pod.yaml


apiVersion: v1


kind: Pod


metadata:


 name: rg-pd-pod


spec:


 containers:


 - image: nginx


  name: rg-pd-container


   volumeMounts:


  - mountPath: /usr/share/nginx/html


    name: rg-pd-volume


 volumes:


 - name: rg-pd-volume


persistentVolumeClaim:


claimName: rg-pd-pvc


通过 kubectl apply -f gke-rg-pd-pod.yaml 创建 pod.


查看 pod 的情况:kubectl describe pods/rg-pd-pod,可以看到最后部分的 Volume 一句 Attach 成功:



Pod运行正常:



可以看到 pod 挂载了200G的 disk:



创建 index.html文件:



七 创建 volume 基于 regional disk 的 deployment


删除 pod,创建 deployment


vim gke-rg-pd-dplymt.yaml


apiVersion: extensions/v1beta1


kind: Deployment


metadata:


name: rg-pd-dplymt


spec:


replicas: 1


template:


metadata:


labels:


service: nginx


app: nginx


spec:


containers:


- image: nginx


name: rg-pd-container


volumeMounts:


- mountPath: /usr/share/nginx/html


name: rg-pd-volume


volumes:


- name: rg-pd-volume


persistentVolumeClaim:


claimName: rg-pd-pvc



文章版权归作者所有,未经许可不得转载。


相关推荐