簡體   English   中英

在 GCP 上運行 Kubernetes 集群時可以使用哪些持久卷存儲解決方案?

[英]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 ProvisioningDynamic Provisioning預置。
我將簡要介紹這些類型中的每一種。

Static 配置

使用這種方法,您需要手動創建DiskPersistentVolumePersistentVolumeClaim 我為您創建了一個簡單的示例來說明它是如何工作的。

首先我創建了磁盤,在 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

最后,我將上述聲明用作音量:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM