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

本文将介绍如何实现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:
GKE创建Pod采用Regional Disk的实现

二 创建 Regional Disk

Compute Engine中选择Disks:
GKE创建Pod采用Regional Disk的实现

点击create disk:
GKE创建Pod采用Regional Disk的实现

按如下参数创建Persistent Disk:
GKE创建Pod采用Regional Disk的实现

三 创建 Storage Class

首先要创建支持多zoneStorage 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。
GKE创建Pod采用Regional Disk的实现

可以看到,这个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

查看创建情况:
GKE创建Pod采用Regional Disk的实现

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

查看创建情况:
GKE创建Pod采用Regional Disk的实现

这样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

编辑podyaml文件:

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成功:
GKE创建Pod采用Regional Disk的实现

Pod运行正常:
GKE创建Pod采用Regional Disk的实现

可以看到pod挂载了 200G 的disk:
GKE创建Pod采用Regional Disk的实现

创建index.html文件:
GKE创建Pod采用Regional Disk的实现

七 创建 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

GKE创建Pod采用Regional Disk的实现

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

评论

发布