当我在GCP上运行Kubernetes集群时,我可以使用哪些持久卷存储解决方案?



我已经在GCP计算引擎上部署了我的Kubernetes集群,并且有3个主节点和3个工作节点(它不是GKE集群)。谁能告诉我集群可以使用哪些存储选项?如果我在GCP上创建了一个虚拟磁盘,我可以将该磁盘用作持久存储吗?

可以使用GCE持久磁盘存储类

下面是创建存储类的方法:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ssd
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd

然后执行以下操作创建PV &PVC和连接到你的豆荚。

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: gce-claim
spec:
accessModes:
- ReadWriteOnce
storageClassName: ssd
resources:
requests:
storage: 10Gi
---
apiVersion: v1
kind: Pod
metadata:
name: webserver-pd
spec:
containers:
- image: httpd
name: webserver
volumeMounts:
- mountPath: /data
name: dynamic-volume
volumes:
- name: dynamic-volume
persistentVolumeClaim:
claimName: gce-claim

摘自这篇博文的例子

提供两种类型的持久卷:Static ProvisioningDynamic Provisioning
我将简要介绍每种类型。

静态配置

使用这种方法,您需要手动创建Disk,PersistentVolumePersistentVolumeClaim。我创建了一个简单的例子来说明它是如何工作的。

首先我创建了磁盘,在GCP上我们可以使用gcloud命令:
$ gcloud compute disks create --size 10GB --region europe-west3-c test-disk
NAME       ZONE            SIZE_GB  TYPE         STATUS
test-disk  europe-west3-c  10       pd-standard  READY 
接下来,我使用下面的清单文件创建PVPVC:
--- 
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-test
spec:
accessModes:
- ReadWriteOnce  
capacity:
storage: 10Gi
gcePersistentDisk:
pdName: test-disk # This GCE PD must already exist.
fsType: ext4
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: claim-test
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi

在播放这个清单文件后,我们可以检查PVPVC的状态:

root@km:~# kubectl get pv,pvc
NAME                       CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS   REASON   AGE
persistentvolume/pv-test   10Gi       RWO            Retain           Bound    default/claim-test                           12m
NAME                               STATUS   VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/claim-test   Bound    pv-test   10Gi       RWO                           12m

最后我使用了上面的claim作为volume:

apiVersion: v1
kind: Pod
metadata:
name: web
spec:
containers:
- name: web
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx"
name: vol-test
volumes:
- name: vol-test
persistentVolumeClaim:
claimName: claim-test

我们可以检查创建的Pod来检查它是否像预期的那样工作:

root@km:~# kubectl exec -it web -- bash
root@web:/# df -h
Filesystem      Size  Used Avail Use% Mounted on
...
/dev/sdb        9.8G   37M  9.8G   1% /usr/share/nginx
...
动态配置

在这种情况下,卷在应用程序需要时自动供应。首先你需要创建StorageClass对象来定义一个提供者,例如kubernetes.io/gce-pd.
我们不需要再创建PersistenVolume了,它是由StorageClass自动为我们创建的。
我还为您创建了一个简单的示例来说明它是如何工作的。

首先,我创建了StorageClass作为默认存储类:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
annotations:
storageclass.kubernetes.io/is-default-class: "true"
name: standard
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard
fstype: ext4

然后是PVC(与前面的示例相同)-但在本例中,PV是自动创建的:

root@km:~# kubectl get pv,pvc
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                STORAGECLASS   REASON   AGE
persistentvolume/pvc-8dcd69f1-7081-45a7-8424-cc02e61a4976   10Gi       RWO            Delete           Bound    default/claim-test   standard                3m10s
NAME                               STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/claim-test   Bound    pvc-8dcd69f1-7081-45a7-8424-cc02e61a4976   10Gi       RWO            standard       3m12s

在更高级的情况下,用不同的持久磁盘类型创建多个StorageClasses可能很有用。

相关内容

  • 没有找到相关文章

最新更新