במדריך הזה מוסבר איך להשתמש ב-Filestore multishares עבור Google Kubernetes Engine באמצעות מנהל ההתקן של GKE Filestore CSI.
לפני שמתחילים
לפני שמתחילים, צריך להשלים את שלבי ההגדרה שנדרשים כדי להשתמש ב-Filestore.
מפעילים את הדרייבר של 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 בסיסי.
משתמשים ב-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.
יוצרים פריסה עם כמה עותקים של 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בודקים את העותקים של ה-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שינוי מספר הרפליקות.
א. מריצים את הפקודה הבאה בשורת הפקודה כדי לערוך את הפריסה:
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פריסה של 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בודקים את הרפליקות והנפחים של 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.שינוי מספר הרפליקות של 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בודקים את מצב מופע Filestore.
עכשיו יש לכם פריסת Deployment עם שני תרמילי רפליקה, ו-Statefulset עם תשעה תרמילי רפליקה, ובסך הכול 10 PVC, כל אחד בגודל 100GiB. כל הכרכים נארזים במופע אחד של Filestore multishare.
א. מריצים את הפקודה הבאה
instances listמשורת הפקודה:gcloud beta filestore instances list --project=YOUR_PROJECT_ID --region=REGIONwhere:
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: ENTERPRISEwhere:
הרחבת PVC ואימות של מופע Filestore
בקטע הזה מוסבר איך להגדיל PVC קיים ולאמת את הגודל של מופע Filestore.
הרחבת 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" } }מריצים את הפקודה הבאה בשורת הפקודה כדי להגדיל את הגודל ל-500GiB:
kubectl edit pvc test-pvc-multishare-web-0הקובץ ייפתח בשורת הפקודה. מאתרים את השדה
spec.resources.requests.storageומעדכנים את הערך ל-500Gi.מריצים את הפקודה הבאה בשורת הפקודה כדי לראות את השינוי שבוצע:
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.
מריצים את הפקודה הבאה
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: ENTERPRISEwhere:
הקצאה דינמית ב-VPC משותף
Filestore CSI driver for GKE תומך בהקצאה דינמית של נפחי אחסון בפרויקט שירות ב-VPC משותף. בקטע הבא מוסבר איך להשתמש בדרייבר Filestore CSI כדי להקצות נפחים באופן דינמי במופעי Filestore multishare בפרויקט שירות ברשת VPC משותפת.
משלימים את שלבי ההגדרה של רשת VPC משותפת וגישה לשירותים פרטיים.
יצירת 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 EOFwhere:
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.
יצירת פריסה.
מריצים את הפקודה הבאה כדי ליצור משאב
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.
יוצרים 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 EOFwhere:
יצירת פריסה.
ב. מריצים את הפקודה הבאה כדי ליצור משאב
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 יחיד.
המאמרים הבאים
- יצירת מכונה וירטואלית ברשת VPC משותפת בפרויקטים של שירותים.
- השוואה בין היתרונות היחסיים של אחסון בלוקים, אחסון קבצים ואחסון אובייקטים.
- אפשרויות אחסון לעומסי עבודה של HPC ב- Google Cloud