![](/img/trans.png)
[英]How can I mount an EFS volume to a kubernetes cluster running on AWS ubuntu18 instances as Persistent Volume?
[英]What Persistent Volume storage solutions I can use when I run my Kubernetes cluster on GCP?
我已經在 GCP 計算引擎上部署了我的 Kubernetes 集群,並擁有 3 個主節點和 3 個工作節點(它不是 GKE 集群)。 誰能建議我可以為我的集群使用哪些存儲選項? 如果我在 GCP 上創建一個虛擬磁盤,我可以將該磁盤用作持久存儲嗎?
您可以使用GCE 持久磁盤存儲 Class 。
以下是創建存儲 class 的方法:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: ssd
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-ssd
然后您執行以下操作來創建 PV 和 PVC 並附加到您的 pod。
---
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
。 我為您創建了一個簡單的示例來說明它是如何工作的。
首先我創建了磁盤,在 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
接下來我使用這個清單文件創建了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
最后,我將上述聲明用作音量:
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
object 來定義配置器,例如kubernetes.io/gce-pd
。
我們不再需要創建PersistenVolume
,它是由StorageClass
自動為我們創建的。
我還為您創建了簡單的示例來說明它是如何工作的。
首先,我創建StorageClass
作為默認存儲 class:
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
可能會很有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.