ייבוא נפח EBS קיים

סקירה כללית

אם כבר יש לכם נפח אחסון של AWS Elastic Block Store ‏ (EBS) שאתם רוצים לייבא ל-GKE ב-AWS, אתם יכולים ליצור אובייקט PersistentVolume ‏ (PV) ולשריין אותו ל-PersistentVolumeClaim ‏ (PVC) ספציפי.

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

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

  • בספריית anthos-aws, משתמשים ב-anthos-gke כדי להחליף הקשר לאשכול המשתמשים.
    ‫
    cd anthos-aws
    env HTTPS_PROXY=http://localhost:8118 \
      anthos-gke aws clusters get-credentials CLUSTER_NAME
    מחליפים את CLUSTER_NAME בשם אשכול המשתמש.

יצירת PersistentVolume עבור נפח EBS קיים

אפשר לייבא נפח EBS קיים על ידי ציון PV חדש.

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

    • ‫volume-capacity: גודל הכרך. לדוגמה, 30Gi. מידע נוסף על הגדרת נפח אחסון ב-Kubernetes זמין במאמר בנושא משמעות הזיכרון.
    • ‫storage-class-name: השם של StorageClass שמקצה את נפח האחסון. לדוגמה, אפשר להשתמש ב-standard-rwo שמוגדר כברירת מחדל.

    • ‫ebs-id: EBS volume id. לדוגמה, vol-05786ec9ec9526b67.

    • ‫fs-type: מערכת הקבצים של אמצעי האחסון. לדוגמה, ext4.

    • ‫zone: אזור הזמינות ב-AWS שמארח את נפח ה-EBS. לדוגמה, us-east-1c.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: volume-name
      annotations:
        pv.kubernetes.io/provisioned-by: ebs.csi.aws.com
    spec:
      capacity:
        storage: volume-capacity
      accessModes:
        - ReadWriteOnce
      persistentVolumeReclaimPolicy: Retain
      storageClassName: storage-class-name
      claimRef:
        name: my-pvc
        namespace: default
      csi:
        driver: ebs.csi.aws.com
        volumeHandle: ebs-volume-id
        fsType: file-system-type
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: topology.ebs.csi.aws.com/zone
              operator: In
              values:
              - zone
    
  2. החלת ה-YAML על האשכול

    kubectl apply -f existing-volume.yaml
    
  3. אישור יצירת ה-PV

    kubectl describe pv volume-name
    

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

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

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

קובץ ה-YAML שבהמשך יוצר PVC ומצרף אותו ל-Pod שמריץ את שרת האינטרנט Nginx. מעתיקים אותו לקובץ בשם nginx.yaml ומחליפים את הערכים כדי להשלים את ההגדרה:

  • ‫storage-class: השם של StorageClass מ-PersistentVolume שיצרתם קודם. לדוגמה, standard-rwo.
  • ‫volume-name: השם של אמצעי האחסון שיצרתם קודם.
  • ‫volume-capacity: גודל הכרך. לדוגמה, 30Gi.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: storage-class-name
  volumeName: volume-name
  accessModes:
    - ReadWriteOnce
  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
  1. החלת ה-YAML על האשכול

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

    kubectl describe pod web-server
    

שימוש בכרכים מוצפנים של EBS

אם אמצעי האחסון של EBS מוצפן באמצעות AWS Key Management Service‏ (KMS), צריך להעניק לתפקיד AWS IAM של מישור הבקרה של GKE on AWS גישה למפתח KMS.

כדי לקבל את שם תפקיד ה-IAM ב-AWS, מבצעים את השלבים הבאים:

  1. עוברים לספרייה עם ההגדרה של GKE ב-AWS. יצרתם את הספרייה הזו כשהתקנתם את שירות הניהול.

    cd anthos-aws

  2. בוחרים אם יצרתם את סביבת GKE ב-AWS באמצעות הכלי anthos-gke או אם יצרתם את פרופילי AWS IAM באופן ידני.

    הכלי anthos-gke

    משתמשים בפקודה terraform output ומחפשים את הערך של iamInstanceProfile.

    terraform output | grep iamInstanceProfile
    

    אם יצרתם את סביבת GKE ב-AWS באמצעות הכלי anthos- gke, הפלט ייראה כך:

      iamInstanceProfile: gke-CLUSTER_ID-controlplane
      iamInstanceProfile: gke-CLUSTER_ID-nodepool
    

    כאשר CLUSTER_ID הוא המזהה של האשכול. מעתיקים את הערך של gke-CLUSTER_ID-controlplane לשלב הבא.

    נוצר באופן ידני

    בודקים את הפלט של terraform output באמצעות הפקודה הבאה:

    terraform output | less
    

    גוללים בפלט ומחפשים את iamInstanceProfile אחרי ההגדרה של AWSCluster.

    kind: AWSCluster
    metadata:
      name: cluster-0
    spec:
      ...
      controlPlane:
       ...
        iamInstanceProfile: INSTANCE_PROFILE_NAME
    

    מעתיקים את הערך של INSTANCE_PROFILE_NAME לשלב הבא.

  3. כדי להעניק למישור הבקרה גישה לנפחי ה-EBS, צריך להוסיף את gke-xxxxxx-controlplane פרופיל ה-IAM של AWS כמשתמש מפתח למפתח ה-AWS KMS שמשמש להצפנת נפח ה-EBS.

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