אופטימיזציה של האחסון באמצעות 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 עם מגבלה של עשרה שיתופים לכל מופע.

    אחרי שמפעילים את מנהל ההתקן GKE Filestore CSI, המשתמשים יכולים לגשת ל-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, או גרסה מתקדמת יותר, מזהה מופעים ארגוניים מדור קודם ומקצה להם גודל שיתוף מקסימלי שמוגדר כברירת מחדל של ‎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 הבסיסי.

    כדי לעשות זאת, צריך להקצות 200GB של נפח אחסון ולוודא שהאפליקציה משתמשת באותו מופע 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.

    נפחי אחסון קבועים (PVC) – שמגובים על ידי שיתופים במופע 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 driver for 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 יחיד.

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