שימוש בשיתוף קבצים ב-Azure

‫GKE ב-Azure תומך בהרכבה של שיתופי Azure Files. אם כבר יש לכם שיתוף קבצים ב-Azure שאתם רוצים להשתמש בו עם GKE ב-Azure, אתם יכולים ליצור אובייקט PersistentVolume ‏ (PV) ולשמור אותו ל-PersistentVolumeClaim ‏ (PVC) ספציפי.

בדף הזה מוסבר איך ליצור PV באמצעות שיתוף קיים שמלא בנתונים, ואיך להשתמש ב-PV ב-Pod.

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

שמירת פרטי חשבון האחסון ב-Azure

‫GKE ב-Azure מאחסן מידע לגישה לחשבון האחסון שלכם ב-Azure בסוד. אם לא יצרתם סוד באשכול, אתם צריכים להוסיף אחד. אם הסוד הזה קיים באשכול, אפשר לדלג אל יצירת PersistentVolume לשיתוף קיים.

  1. כדי ליצור את הסוד, מעתיקים את המניפסט הבא לקובץ בשם azure-service-account-key.yaml.

    ---
    apiVersion: v1
    kind: Secret
    metadata:
      name: azure-secret-account-key
    type: Opaque
    stringData:
      accountname: STORAGE_ACCOUNT_NAME
      accountkey: STORAGE_ACCOUNT_KEY
    

    מחליפים את מה שכתוב בשדות הבאים:

    • STORAGE_ACCOUNT_NAME: השם של חשבון האחסון שלכם ב-Azure
    • STORAGE_ACCOUNT_KEY: המפתח של חשבון האחסון שלכם ב-Azure
  2. מחילים את הקובץ על האשכול באמצעות הכלי kubectl:

    kubectl apply -f azure-service-account-key.yaml
    

יצירת PersistentVolume לשיתוף קיים

מייבאים שיתוף קבצים קיים ב-Azure על ידי ציון PV חדש באשכול. כדי ליצור את ה-PV:

  1. מעתיקים את קוד ה-YAML הבא לקובץ בשם existing-volume.yaml:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: VOLUME_NAME
    spec:
      capacity:
        storage: VOLUME_CAPACITY
      storageClassName: standard-rwx
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      csi:
        driver: file.csi.azure.com
        readOnly: false
        volumeHandle: VOLUME_ID
    

    מחליפים את מה שכתוב בשדות הבאים:

    • VOLUME_NAME: שם לנפח האחסון
    • VOLUME_CAPACITY: גודל הכרך. לדוגמה, 30Gi. מידע נוסף על הגדרת נפח אחסון ב-Kubernetes זמין במאמר בנושא משמעות הזיכרון.
    • VOLUME_ID: מזהה ייחודי לנפח, בפורמט של מחרוזת RESOURCE_GROUP_NAME#STORAGE_ACCOUNT_NAME#FILESHARE_NAME#, כאשר
    • FILE_SHARE_NAME: שם שיתוף הקבצים ב-Azure

    אם חשבון האחסון נמצא בקבוצת משאבים שונה מהאשכול, צריך להוסיף הפניה לסוד שמכיל את מפתח חשבון האחסון. כדי להוסיף את ההפניה, מוסיפים את הטקסט הבא לקטע spec.csi:

    # Optional. Only required if your storageAccount is in a different resource group than the cluster.
        nodeStageSecretRef:
          name: NODE_STAGE_SECRET_NAME
          namespace: NODE_STAGE_SECRET_NAMESPACE
    

    מחליפים את מה שכתוב בשדות הבאים:

    • NODE_STAGE_SECRET_NAME: השם של הסוד
    • NODE_STAGE_SECRET_NAMESPACE Namespace שמכיל את הסוד
  2. מחילים את ה-YAML על האשכול.

    kubectl apply -f existing-volume.yaml
    
  3. מאשרים את יצירת ה-PV באמצעות kubectl describe pv.

    kubectl describe pv VOLUME_NAME
    

    הפלט של הפקודה הזו כולל את הסטטוס של ה-PV.

שימוש בנפח עם PersistentVolumeClaim ו-Pod

אחרי שמייבאים את אמצעי האחסון, אפשר ליצור PVC ו-Pod שמבצעים mount ל-PVC.

  1. קובץ ה-YAML הבא יוצר PVC ומצרף אותו ל-Pod שמריץ את שרת האינטרנט Nginx. מעתיקים אותו לקובץ בשם nginx.yaml:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      storageClassName: STORAGE_CLASS_NAME
      volumeName: VOLUME_NAME
      accessModes:
        - ACCESS_MODE
      resources:
        requests:
          storage: VOLUME_CAPACITY
    ---
    
    apiVersion: v1
    kind: Pod
    metadata:
      name: web-server
    spec:
      containers:
       - name: web-server
         image: nginx
         volumeMounts:
           - mountPath: /var/lib/www/html
             name: data
      volumes:
       - name: data
         persistentVolumeClaim:
           claimName: my-pvc
    

    מחליפים את מה שכתוב בשדות הבאים:

    • STORAGE_CLASS: השם של StorageClass מ-PersistentVolume שיצרתם קודם. לדוגמה, standard-rwo.
    • ACCESS_MODE: מצב הגישה של אמצעי האחסון. במקרה של Azure Disk, משתמשים ב-ReadWriteOnce. במקרה של Azure File, משתמשים ב-ReadWriteMany.
    • VOLUME_CAPACITY: גודל הכרך. לדוגמה, 30Gi.
  2. מחילים את ה-YAML על האשכול.

    kubectl apply -f nginx.yaml
    
  3. בודקים את הסטטוס של מופע Nginx עם kubectl describe. הפלט צריך לכלול את הערך Running של STATUS.

    kubectl describe pod web-server
    
  4. כדי למחוק את ה-Pod, משתמשים בפקודה kubectl delete.

    kubectl delete -f nginx.yaml
    

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