אופטימיזציה של האחסון באמצעות Filestore Multishares ל-GKE

במדריך הזה מוסבר איך להשתמש ב-Filestore multishares ל-Google Kubernetes Engine באמצעות מנהל ההתקן של GKE Filestore CSI.

לפני שמתחילים

  1. לפני שמתחילים, צריך להשלים את שלבי ההגדרה שנדרשים כדי להשתמש ב-Filestore.

  2. מפעילים את הדרייבר של GKE Filestore CSI, גרסה 1.23 ואילך:

    • גרסאות הדרייבר 1.23 עד 1.26 תומכות בעד 10 שיתופים לכל אירוע.

    • גרסאות 1.27 ואילך של מנהלי התקנים תומכות בעד 80 שיתופים לכל מופע.

    לדרישות העדכניות של מנהל התקן CSI של GKE Filestore, אפשר לעיין במאמר בנושא גישה למופעי Filestore באמצעות מנהל התקן CSI של Filestore.

שימוש בכמה שיתופי קבצים ב-Filestore עם כמה אפליקציות

בקטע הזה נסביר איך לפרוס שתי אפליקציות, אחת מסוג Deployment ואחת מסוג Statefulset, שכל אחת מהן משתמשת ב-StorageClass של Filestore multishares. בנוסף, תוכלו לראות איך GKE bin packs (תהליך לאריזת אפליקציות בצורה יעילה בצומתי GKE) מאחסן את כל הנפחים באותו מופע בסיסי של Filestore Enterprise.

  1. משתמשים ב-StorageClass שסופק על ידי GKE, ‏ enterprise-multishare-rwx, כדי ליצור מופעים שתומכים בעד 10 שיתופים.

    • אם אתם רוצים ליצור מופעים שתומכים בעד 80 שיתופים, תצטרכו ליצור StorageClass בהתאמה אישית. לצורך המדריך הזה, תשתמשו ב-StorageClass עם מגבלה של עשרה שיתופים לכל מופע.

    אחרי שמפעילים את מנהל ה-CSI של GKE Filestore, המשתמשים יכולים לגשת ל-StorageClass enterprise-multishare-rwx של שיתוף מרובה שסופק על ידי GKE עם ההגדרה הבאה. בהתבסס על StorageClass הזה, מנהל ההתקנים של GKE Filestore CSI משתמש בהקצאת נפח דינמית כדי ליצור באופן אוטומטי Persistent Volumes (PVs) עבור Persistent Volume Claims (PVCs) חדשים, בהתאם לדרישות של עומס העבודה ב-GKE:

    kubectl describe sc enterprise-multishare-rwx
    Name:                  enterprise-multishare-rwx
    IsDefaultClass:        No
    Annotations:           components.gke.io/component-name=filestorecsi,components.gke.io/component-version=0.7.2,components.gke.io/layer=addon
    Provisioner:           filestore.csi.storage.gke.io
    Parameters:            instance-storageclass-label=enterprise-multishare-rwx,multishare=true,tier=enterprise
    AllowVolumeExpansion:  True
    MountOptions:          <none>
    ReclaimPolicy:         Delete
    VolumeBindingMode:     WaitForFirstConsumer
    Events:                <none>
    

יצירת StorageClass בהתאמה אישית

אם אתם רוצים לנצל את מגבלת הקיבולת העדכנית של עד 80 שיתופים לכל מופע Filestore, אתם צריכים ליצור StorageClass בהתאמה אישית על סמך התבנית הבאה:

  apiVersion: storage.k8s.io/v1
  kind: StorageClass
  metadata:
    name: csi-filestore-multishare-128
  provisioner: filestore.csi.storage.gke.io
  parameters:
    tier: enterprise
    multishare: "true"
    max-volume-size: "128Gi"
    network: default
  allowVolumeExpansion: true

כשמשנים את השם של StorageClass, חשוב להביא בחשבון את הדרישות הבאות:

  • השם של StorageClass חייב להיות שם תת-דומיין חוקי של DNS.

  • שם ה-StorageClass של שיתוף מרובה משמש גם כתווית של מופע, ולכן צריך לפעול לפי ההנחיות למתן שמות לתוויות.

  • אם האפליקציה שלכם דורשת הקצאת נפח אחסון מיידית, צריך לכלול את מצב הקישור של נפח האחסון Immediate:

    volumeBindingMode: Immediate

    לדוגמה, אפשר להשתמש במפרט הזה אם לא רוצים שהקצאת נפח האחסון תהיה תלויה ביצירת ה-Pod באשכול GKE.

  • החל מגרסת הדרייבר 1.27, אם רוצים להקצות יותר מ-10 שיתופים לכל מופע, צריך לכלול את הפרמטר max-volume-size ולהקצות לו אחד מהערכים המקובלים מהעמודה הראשונה:

    גודל נפח מקסימלי (גודל שיתוף) מספר המניות המקסימלי לכל מופע
    ‫‎128 GiB 80
    ‫256 GiB 40
    ‫512 GiB 20
    ‫‎1,024 GiB 10

    לדוגמה, הוספת זוג הערכים max-volume-size: "128Gi" מבטיחה ש-StorageClass ימפה עד 80 שיתופים – כל אחד בטווח גודל של ‎10 GiB עד ‎128 GiB – למופע יחיד ברמה ארגונית של ‎10 TiB.

    • היכולת הזו היא תאימות לאחור למופעי Filestore שנוצרו על ידי דרייבר GKE Filestore CSI בגרסאות 1.23 עד 1.26.

    • מופעים קיימים יכולים ליצור PVC חדשים או שיתופים חדשים עם גודל שיתוף מינימלי מורחב של 10 GiB.

    • גרסה 1.27 ואילך של מנהל התקן CSI של GKE Filestore מזהה מופעי Enterprise מדור קודם ומקצה להם גודל שיתוף מקסימלי שמוגדר כברירת מחדל של ‎1,024 GiB ‏ (‎1 TiB). כתוצאה מכך, מקרים קודמים מוגבלים למספר מקסימלי של 10 שיתופים לכל מקרה.

    מידע נוסף זמין במאמר בנושא Filestore multishares for GKE.

  1. יצירת פריסה עם כמה עותקים של Pod באמצעות PVC אחד.

    יוצרים קובץ תצורה ב-YAML שדומה לקובץ הבא:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-multishare
      labels:
        app: nginx
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - mountPath: /usr/share/nginx/html
              name: mypvc
          volumes:
          - name: mypvc
            persistentVolumeClaim:
              claimName: test-pvc-fs
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: test-pvc-fs
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: enterprise-multishare-rwx
      resources:
        requests:
          storage: 100Gi
    
    EOF
    
  2. בודקים את העותקים של ה-Pod.

    א. מריצים את הפקודה הבאה בשורת הפקודה כדי לבדוק את הסטטוס של ה-PVC:

    kubectl get pvc
    

    אמורה להופיע תגובה שדומה לזו:

    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-fs   Bound    pvc-056d769d-a709-4bb2-b6d3-0361871b27a2   100Gi      RWX            enterprise-multishare-rwx  35m
    

    ב. מריצים את הפקודה הבאה בשורת הפקודה כדי לבדוק את סטטוס ה-Pod:

    kubectl get pod
    

    אמורה להופיע תגובה שדומה לזו:

    NAME                                     READY   STATUS    RESTARTS   AGE
    web-server-multishare-76c9ffb4b5-2dhml   1/1     Running   0          35m
    web-server-multishare-76c9ffb4b5-7mtcb   1/1     Running   0          35m
    web-server-multishare-76c9ffb4b5-csdbd   1/1     Running   0          35m
    web-server-multishare-76c9ffb4b5-rgx82   1/1     Running   0          35m
    web-server-multishare-76c9ffb4b5-zjl27   1/1     Running   0          35m
    
  3. שינוי מספר הרפליקות.

    א. מריצים את הפקודה הבאה בשורת הפקודה כדי לערוך את הפריסה:

    kubectl edit deployment web-server-multishare
    

    ב. הקובץ ייפתח בשורת הפקודה. מאתרים את השדה spec.replicas ומעדכנים את הערך ל-10.

    ג. מריצים את הפקודה הבאה בשורת הפקודה כדי לראות את השינוי שבוצע:

    kubectl get pod
    

    אמורה להופיע תגובה שדומה לזו:

    NAME                                     READY   STATUS    RESTARTS   AGE
    web-server-multishare-76c9ffb4b5-2dhml   1/1     Running   0          36m
    web-server-multishare-76c9ffb4b5-5ctkf   1/1     Running   0          3s
    web-server-multishare-76c9ffb4b5-7mtcb   1/1     Running   0          36m
    web-server-multishare-76c9ffb4b5-8dwmw   1/1     Running   0          2s
    web-server-multishare-76c9ffb4b5-csdbd   1/1     Running   0          36m
    web-server-multishare-76c9ffb4b5-lndcq   1/1     Running   0          2s
    web-server-multishare-76c9ffb4b5-rgx82   1/1     Running   0          36m
    web-server-multishare-76c9ffb4b5-vtd6p   1/1     Running   0          3s
    web-server-multishare-76c9ffb4b5-xm49s   1/1     Running   0          3s
    web-server-multishare-76c9ffb4b5-zjl27   1/1     Running   0          36m
    

    שימו לב ש-10 פודים פועלים.

    ד. מריצים את הפקודה הבאה בשורת הפקודה:

    kubectl get deployment
    

    אמורה להופיע תגובה שדומה לזו:

    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    web-server-multishare   10/10   10           10          36m
    

    ה. מריצים את הפקודה הבאה בשורת הפקודה כדי לבדוק את סטטוס הכרך של ה-PVC:

    kubectl get pvc
    

    אמורה להופיע תגובה שדומה לזו:

    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-fs   Bound    pvc-056d769d-a709-4bb2-b6d3-0361871b27a2   100Gi      RWX            enterprise-multishare-rwx  37m
    

    ו. מריצים את הפקודה הבאה בשורת הפקודה כדי לערוך את הפריסה:

    kubectl edit deployment web-server-multishare
    

    ז. הקובץ ייפתח בשורת הפקודה. מאתרים את השדה spec.replicas ומעדכנים את הערך ל-2.

    ח. מריצים את הפקודה הבאה בשורת הפקודה כדי לראות את השינוי שבוצע:

    kubectl get pod
    

    אמורה להופיע תגובה שדומה לזו:

    NAME                                     READY   STATUS    RESTARTS   AGE
    web-server-multishare-76c9ffb4b5-2dhml   1/1     Running   0          38m
    web-server-multishare-76c9ffb4b5-7mtcb   1/1     Running   0          38m
    
  4. פורסים Statefulset.

    פריסת אפליקציה שנייה שמשתפת את מופע Filestore הבסיסי.

    כדי לעשות זאת, צריך להקצות נפח של 200GiB ולאמת שהיא משתמשת באותו מופע Filestore בסיסי כמו האפליקציה הראשונה.

    לאחר מכן, תגדילו את האפליקציה ל-9 רפליקות באמצעות 900GiB בסך הכול (9 רפליקות באמצעות 100GiB כל אחת) ותאמתו ש-GKE משתמש באותו מופע של Filestore על ידי שיתוף המופע.

    יוצרים קובץ הגדרות ב-YAML שדומה לקובץ הבא:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      serviceName: "nginx"
      replicas: 2
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: registry.k8s.io/nginx-slim:0.8
            ports:
            - containerPort: 80
              name: web
            volumeMounts:
            - name: test-pvc-multishare
              mountPath: /usr/share/nginx/html
      volumeClaimTemplates:
      - metadata:
          name: test-pvc-multishare
        spec:
          accessModes: [ "ReadWriteMany" ]
          storageClassName: enterprise-multishare-rwx
          resources:
            requests:
              storage: 100Gi
    
    EOF
    
    
  5. בודקים את הרפליקות והנפחים של Statefulset.

    מריצים את הפקודה הבאה בשורת הפקודה:

    kubectl get pod
    

    אמורה להופיע תגובה שדומה לזו:

    NAME                                     READY   STATUS    RESTARTS   AGE
    web-0                                    1/1     Running   0          4m48s
    web-1                                    1/1     Running   0          3m32s
    web-server-multishare-76c9ffb4b5-2dhml   1/1     Running   0          57m
    web-server-multishare-76c9ffb4b5-7mtcb   1/1     Running   0          57m
    

    שימו לב ששני הפודים הראשונים משויכים ל-Statefulset. שני הפודים האחרונים משויכים לפריסה.

    מריצים את הפקודה הבאה בשורת הפקודה:

    kubectl get statefulset
    

    אמורה להופיע תגובה שדומה לזו:

    NAME   READY   AGE
    web    2/2     2m8s
    

    מריצים את הפקודה הבאה בשורת הפקודה:

    kubectl get pvc
    

    אמורה להופיע תגובה שדומה לזו:

    NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-fs                 Bound    pvc-056d769d-a709-4bb2-b6d3-0361871b27a2   100Gi      RWX            enterprise-multishare-rwx   54m
    test-pvc-multishare-web-0   Bound    pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7   100Gi      RWX            enterprise-multishare-rwx   114s
    test-pvc-multishare-web-1   Bound    pvc-8b37cd6e-d764-4d38-80d7-d74228536cfe   100Gi      RWX            enterprise-multishare-rwx   38s
    

    ה-PVC‏ test-pvc-fs משויך לפריסה web-server-multishare.

    ה-PVC‏ test-pvc-multishare-web-0 ו-test-pvc-multishare-web-1 משויכים ל-Statefulset.

  6. שינוי מספר העותקים של Statefulset.

    מגדילים את מספר העותקים לתשעה. ככל שהמספר עולה, כך נוצרים ה-PVC המתאימים.

    א. מריצים את הפקודה הבאה בשורת הפקודה:

    kubectl  edit statefulset web
    

    ב. הקובץ ייפתח בשורת הפקודה. מאתרים את השדה spec.replicas ומעדכנים את הערך ל-9.

    ג. מריצים את הפקודה הבאה בשורת הפקודה כדי לראות את השינוי שבוצע:

    kubectl get statefulset
    

    אמורה להופיע תגובה שדומה לזו:

    NAME   READY   AGE
    web    9/9     13m
    

    ד. מריצים את הפקודה הבאה בשורת הפקודה:

    kubectl get deployment
    

    אמורה להופיע תגובה שדומה לזו:

    NAME                    READY   UP-TO-DATE   AVAILABLE   AGE
    web-server-multishare   2/2     2            2           65m
    

    ה. מריצים את הפקודה הבאה בשורת הפקודה:

    kubectl get pvc
    

    אמורה להופיע תגובה שדומה לזו:

    NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-fs                 Bound    pvc-056d769d-a709-4bb2-b6d3-0361871b27a2   100Gi      RWX            enterprise-multishare-rwx   65m
    test-pvc-multishare-web-0   Bound    pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7   100Gi      RWX            enterprise-multishare-rwx   13m
    test-pvc-multishare-web-1   Bound    pvc-8b37cd6e-d764-4d38-80d7-d74228536cfe   100Gi      RWX            enterprise-multishare-rwx   12m
    test-pvc-multishare-web-2   Bound    pvc-3fcbd132-939f-4364-807a-7c8ac6a3e64e   100Gi      RWX            enterprise-multishare-rwx   5m12s
    test-pvc-multishare-web-3   Bound    pvc-5894afa5-2502-4ee7-9d5c-b7378cb85479   100Gi      RWX            enterprise-multishare-rwx   4m57s
    test-pvc-multishare-web-4   Bound    pvc-ebbe452b-bc8f-4624-a830-a2094cce0d67   100Gi      RWX            enterprise-multishare-rwx   4m36s
    test-pvc-multishare-web-5   Bound    pvc-5a73a698-d174-44cb-a3a1-e767966c3417   100Gi      RWX            enterprise-multishare-rwx   4m20s
    test-pvc-multishare-web-6   Bound    pvc-102da6a9-2ca6-4f9e-9896-8fe14709db7a   100Gi      RWX            enterprise-multishare-rwx   3m55s
    test-pvc-multishare-web-7   Bound    pvc-160e81cd-c5bf-4ae6-966e-518e8249e02d   100Gi      RWX            enterprise-multishare-rwx   3m38s
    test-pvc-multishare-web-8   Bound    pvc-9b52d773-2e9a-40de-881c-dc06945ba3d7   100Gi      RWX            enterprise-multishare-rwx   118s
    
  7. מאמתים את מצב מופע Filestore.

    עכשיו יש לכם Deployment עם שני פודים של רפליקות, ו-Statefulset עם תשעה פודים של רפליקות, ובסך הכול 10 PVC, כל אחד בגודל 100GiB. כל אמצעי האחסון נארזים במופע יחיד של Filestore multishare.

    א. מריצים את הפקודה הבאה instances list משורת הפקודה:

    gcloud beta filestore instances list --project=YOUR_PROJECT_ID --region=REGION
    

    where:

    • YOUR_PROJECT_ID: שם הפרויקט שבו נעשה שימוש. לדוגמה, my-project.

    • REGION הוא שם האזור שבו נעשה שימוש. לדוגמה, us-central1.

    אמורה להופיע תגובה שדומה לזו:

    INSTANCE_NAME                            LOCATION     TIER        CAPACITY_GB  FILE_SHARE_NAME  IP_ADDRESS   STATE  CREATE_TIME
    fs-a767cef8-738e-4c8e-b70b-09cbb872d016  us-central1  ENTERPRISE  1024         N/A              10.192.53.2  READY  2022-06-21T21:15:30
    

    ב. מריצים את הפקודה הבאה instances describe משורת הפקודה:

    gcloud filestore instances describe fs-a767cef8-738e-4c8e-b70b-09cbb872d016 --project=YOUR_PROJECT_ID --region=REGION
    capacityGb: '1024'
    capacityStepSizeGb: '256'
    createTime: '2022-06-21T21:15:30.464237089Z'
    labels:
      storage_gke_io_created-by: filestore_csi_storage_gke_io
      storage_gke_io_storage-class-id: enterprise-multishare-rwx
    maxCapacityGb: '10240'
    maxShareCount: '10'
    multiShareEnabled: true
    name: projects/YOUR_PROJECT_ID/locations/REGION/instances/fs-a767cef8-738e-4c8e-b70b-09cbb872d016
    networks:
    - connectMode: DIRECT_PEERING
      ipAddresses:
      - 10.192.53.2
      modes:
      - MODE_IPV4
      network: csi-filestore-test-network
      reservedIpRange: 10.192.53.0/26
    state: READY
    tier: ENTERPRISE
    
    

    where:

    • YOUR_PROJECT_ID: שם הפרויקט שבו נעשה שימוש. לדוגמה, my-project.

    • REGION הוא שם האזור שבו נעשה שימוש. לדוגמה, us-central1.

הרחבת PVC ואימות של מופע Filestore

בקטע הזה מוסבר איך להרחיב PVC קיים ולאמת את הגודל של מופע Filestore.

  1. הרחבת PVC.

    נפח ה-PVCs – שמגובה על ידי שיתופים במופע Filestore multishare – יכול לגדול עד לגודל המקסימלי שצוין בפרמטר max-volume-size. כדי לוודא זאת, מרחיבים את אחד מהנפחים שמשויכים ל-Statefulset בזמן שה-Pod משתמש בו.

    מריצים את הפקודה הבאה משורת הפקודה כדי לבדוק את הגודל הנוכחי של PVC של העותק מספר 0:

    kubectl get pvc test-pvc-multishare-web-0 -o json
    {
        "apiVersion": "v1",
        "kind": "PersistentVolumeClaim",
        "metadata": {
            "annotations": {
                "pv.kubernetes.io/bind-completed": "yes",
                "pv.kubernetes.io/bound-by-controller": "yes",
                "volume.beta.kubernetes.io/storage-provisioner": "filestore.csi.storage.gke.io",
                "volume.kubernetes.io/storage-provisioner": "filestore.csi.storage.gke.io"
            },
            "creationTimestamp": "2022-06-21T22:07:42Z",
            "finalizers": [
                "kubernetes.io/pvc-protection"
            ],
            "labels": {
                "app": "nginx"
            },
            "name": "test-pvc-multishare-web-0",
            "namespace": "default",
            "resourceVersion": "48395",
            "uid": "7aa21b5a-5343-4547-b7d7-414c16af15a7"
        },
        "spec": {
            "accessModes": [
                "ReadWriteMany"
            ],
            "resources": {
                "requests": {
                    "storage": "100Gi"
                }
            },
            "storageClassName": "enterprise-multishare-rwx",
            "volumeMode": "Filesystem",
            "volumeName": "pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7"
        },
        "status": {
            "accessModes": [
                "ReadWriteMany"
            ],
            "capacity": {
                "storage": "100Gi"
            },
            "phase": "Bound"
        }
    }
    
    
  2. מריצים את הפקודה הבאה בשורת הפקודה כדי להגדיל את הגודל ל-500GiB:

    kubectl edit pvc test-pvc-multishare-web-0
    
  3. הקובץ ייפתח בשורת הפקודה. מאתרים את השדה spec.resources.requests.storage ומעדכנים את הערך ל-500Gi.

  4. מריצים את הפקודה הבאה בשורת הפקודה כדי לראות את השינוי שבוצע:

    kubectl get pvc test-pvc-multishare-web-0
    

    אמורה להופיע תגובה שדומה לזו:

    NAME                        STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS               AGE
    test-pvc-multishare-web-0   Bound    pvc-7aa21b5a-5343-4547-b7d7-414c16af15a7   500Gi      RWX            enterprise-multishare-rwx   28m
    

    הדרייבר של Filestore CSI קיבל את הבקשה, קודם הרחיב את מופע Filestore הבסיסי ואז הרחיב את השיתוף שמגבה את ה-PVC.

    במקרה הזה, מנהל ההתקן של Filestore CSI הרחיב אוטומטית את המופע ל-1,536Gi כדי להתאים לגודל השיתוף החדש של 500Gi.

  5. מריצים את הפקודה הבאה instances describe משורת הפקודה כדי לוודא את הקיבולת של מופע Filestore:

    gcloud filestore instances describe fs-a767cef8-738e-4c8e-b70b-09cbb872d016 --project=YOUR_PROJECT_ID --region=REGION
    capacityGb: '1536'
    capacityStepSizeGb: '256'
    createTime: '2022-06-21T21:15:30.464237089Z'
    labels:
      storage_gke_io_created-by: filestore_csi_storage_gke_io
      storage_gke_io_storage-class-id: enterprise-multishare-rwx
    maxCapacityGb: '10240'
    maxShareCount: '10'
    multiShareEnabled: true
    name: projects/YOUR_PROJECT_ID/locations/us-central1/instances/fs-a767cef8-738e-4c8e-b70b-09cbb872d016
    networks:
    - connectMode: DIRECT_PEERING
      ipAddresses:
      - 10.192.53.2
      modes:
      - MODE_IPV4
      network: csi-filestore-test-network
      reservedIpRange: 10.192.53.0/26
    state: READY
    tier: ENTERPRISE
    

    where:

    • YOUR_PROJECT_ID: שם הפרויקט שבו נעשה שימוש. לדוגמה, my-project.

    • REGION הוא שם האזור שבו נעשה שימוש. לדוגמה, us-central1.

הקצאת משאבים דינמית ב-VPC משותף

הדרייבר של Filestore CSI ל-GKE תומך בהקצאה דינמית של נפחים בפרויקט שירות ב-VPC משותף. בקטע הבא מוסבר איך להשתמש בדרייבר Filestore CSI כדי להקצות נפחים באופן דינמי במופעי Filestore multishare בפרויקט שירות ברשת VPC משותפת.

  1. משלימים את שלבי ההגדרה של רשת VPC משותפת וגישה לשירותים פרטיים.

  2. יצירת StorageClass כדי להקצות באופן דינמי נפחי אחסון שמגובים על ידי מופע של Filestore multishares ב-VPC משותף.

    מריצים את הפקודה הבאה כדי לפרוס משאב StorageClass:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-filestore-multishare-sharedvpc
    provisioner: filestore.csi.storage.gke.io
    parameters:
      network: "projects/HOST_PROJECT_ID/global/networks/SHARED_VPC_NAME"
      connect-mode: PRIVATE_SERVICE_ACCESS
      tier: enterprise
      multishare: "true"
    allowVolumeExpansion: true
    
    EOF
    

    where:

    • HOST_PROJECT_ID הוא המזהה או השם של הפרויקט המארח של רשת ה-VPC המשותפת. לדוגמה, my-host-project.

    • SHARED_VPC_NAME השם של רשת ה-VPC המשותפת. לדוגמה, my-shared-vpc.

    אם רוצים לפרוס את המשאב בטווח כתובות IP שמורות, מוסיפים את השורה הבאה לפרמטרים שמשמשים בפקודה:

    reserved-ip-range: RESERVED_NAME
    

    כאשר RESERVED_NAME הוא השם של טווח כתובות ה-IP השמור שבו אפשר להקצות מופע Filestore. לדוגמה, filestore-reserved-ip-range. אם מציינים טווח כתובות IP שמורות, צריך לציין טווח כתובות עם שם ולא ערך CIDR ישיר.

    מידע נוסף זמין במאמרים בנושא הקצאת טווחים של כתובות IP או הגדרה של טווח כתובות IP שמורות. דוגמה ליצירת שם שמור באמצעות מסוף Google Cloud מופיעה במאמר יצירת הקצאת כתובת IP.

  3. יצירת פריסה.

    מריצים את הפקודה הבאה כדי ליצור משאב Deployment:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-multishare
      labels:
        app: nginx
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - mountPath: /usr/share/nginx/html
              name: mypvc
          volumes:
          - name: mypvc
            persistentVolumeClaim:
              claimName: test-pvc-fs-sharedvpc
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: test-pvc-fs-sharedvpc
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: csi-filestore-multishare-sharedvpc
      resources:
        requests:
          storage: 100Gi
    
    EOF
    

מכונות Filestore שמופעל בהן CMEK

אפשר ליצור נפחי GKE שמארחים מופעי Filestore עם שיתוף מרובה שמופעל בהם CMEK. בקטע הזה מוסבר איך להגדיר מפתח הצפנה בניהול הלקוח (CMEK) למופע Filestore.

אפשר לספק את פרטי המפתח בניהול הלקוח ב-StorageClass. כל מופע שנוצר באופן דינמי על ידי מנהל ההתקנים של Filestore CSI, שמפנה אל StorageClass הזה, יופעל בו CMEK.

  1. יוצרים StorageClass עם הפעלה של CMEK.

    א. מריצים את הפקודה הבאה:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: csi-filestore-multishare-cmek
    provisioner: filestore.csi.storage.gke.io
    parameters:
      tier: enterprise
      multishare: "true"
      instance-encryption-kms-key: projects/KEY_PROJECT_ID/locations/REGION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
    
    allowVolumeExpansion: true
    
    EOF
    

    where:

    • KEY_PROJECT_ID הוא שם הפרויקט שבו נמצא המפתח. לדוגמה, my-key-project.

    • REGION הוא שם האזור שבו נעשה שימוש. לדוגמה, us-central1.

    • RING_NAME השם של אוסף המפתחות. לדוגמה, my-key-ring-name.

    • KEY_NAME שם המפתח. לדוגמה, my-key-name.

  2. יצירת פריסה.

    ב. מריצים את הפקודה הבאה כדי ליצור משאב Deployment:

    cat <<EOF | kubectl apply -f -
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: web-server-multishare
      labels:
        app: nginx
    spec:
      replicas: 5
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx
            volumeMounts:
            - mountPath: /usr/share/nginx/html
              name: mypvc
          volumes:
          - name: mypvc
            persistentVolumeClaim:
              claimName: test-pvc-fs-cmek
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: test-pvc-fs-cmek
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: csi-filestore-multishare-cmek
      resources:
        requests:
          storage: 100Gi
    
    EOF
    

מיפוי של PVC למכונות Filestore

בקטע הזה מוסבר איך למפות את ה-PVC למופעי Filestore.

במכונות Filestore multishare, כל PVC מתארח במכונת Filestore על ידי מנהל ההתקן Filestore CSI. הפרטים של מופע Filestore הבסיסי שמארח את הנפח והשיתוף שמייצג את הנפח של Kubernetes, מתועדים בשדה volumeHandle של מפרט הנפחים המתמידים. הפורמט של נקודת האחיזה של עוצמת הקול הוא כדלקמן:

modeMultishare/<storageclass-prefix>/<project>/<region>/<filestore-instance-name>/<filestore-share-name>

אפשר להשתמש בפקודה kubectl הבאה כדי לקבוע במהירות את המיפויים בין PVC,‏ PV, מופע Filestore ושיתוף Filestore.

מריצים את הפקודה הבאה בשורת הפקודה:

kubectl get pv -o jsonpath='{range .items[*]}{"pv="}{.metadata.name}{",pvc="}{.spec.claimRef.name}{",volumeHandle="}{.spec.csi.volumeHandle}{"\n"}{end}'

אמורה להופיע תגובה שדומה לזו:

pv=pvc-67ad9abd-f25e-4130-b7ca-64d28bd29525,pvc=test-pvc-multishare,volumeHandle=modeMultishare/csi-filestore-multishare-sharedvpc/YOUR_PROJECT_ID/us-central1/fs-2109f680-3f04-4ada-b4bc-2a1c7fc47b88/pvc_67ad9abd_f25e_4130_b7ca_64d28bd29525

pv=pvc-c80f4de0-9916-4957-b8ae-b21206650ac0,pvc=test-pvc-fs-sharedvpc,volumeHandle=modeMultishare/csi-filestore-multishare-sharedvpc/YOUR_PROJECT_ID/us-central1/fs-2109f680-3f04-4ada-b4bc-2a1c7fc47b88/pvc_c80f4de0_9916_4957_b8ae_b21206650ac0

where:

  • YOUR_PROJECT_ID הוא שם הפרויקט שבו נעשה שימוש. לדוגמה, my-project.

שימו לב ששני כרכים מתמידים באשכול מתארחים במופע Filestore יחיד.

המאמרים הבאים