我已经在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 Provisioning
和Dynamic Provisioning
。
我将简要介绍每种类型。
使用这种方法,您需要手动创建Disk
,PersistentVolume
和PersistentVolumeClaim
。我创建了一个简单的例子来说明它是如何工作的。
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
接下来,我使用下面的清单文件创建PV
和PVC
:
---
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
在播放这个清单文件后,我们可以检查PV
和PVC
的状态:
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
可能很有用。