目前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
编辑PVC的yaml文件:
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
文章版权归作者所有,未经许可不得转载。
评论