GKE ב-AWS פורס באופן אוטומטי את Container Storage Interface (CSI) Amazon Elastic Block Store (EBS) ו-Amazon Elastic File Store (EFS).
הגרסאות של EBS CSI Driver ו-EFS CSI Driver קשורות לגרסה של GKE ב-AWS Kubernetes. בדרך כלל, גרסת הדרייבר היא הגרסה העדכנית ביותר שזמינה כשגרסת GKE יוצאת. כשמשדרגים את האשכול, מנהלי ההתקנים מתעדכנים אוטומטית.
שימוש ב-StorageClass שמוגדר כברירת מחדל
יצירת PersistentVolumeClaim בלי השדה spec.storageClassName מספקת נפח של כונני SSD לשימוש כללי (gp2) באמצעות ברירת המחדל של GKE ב-AWS EBS CSI Driver StorageClass.
קובץ ה-YAML הבא יוצר PersistentVolumeClaim (PVC) בשם mypvc בגודל של 30 גיביבייט.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
שימוש ב-StorageClass אחר שהותקן מראש
מנהל התקן ה-CSI של GKE ב-AWS EBS כולל גם את premium-rwo StorageClass, שמקצה נפחי אחסון של Provisioned IOPS SSD volumes (io1) volumes עם תפוקה גבוהה יותר.
כדי להשתמש בו, צריך לציין אותו ב-spec.storageClassName של ה-PVC.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageClassName: premium-rwo
שימוש ב-StorageClass מותאם אישית
אם אף אחת מהאפשרויות האלה לא מתאימה לצרכים שלכם, אתם יכולים ליצור StorageClass נוסף לנפחי EBS או להשתמש ב-Container Storage Interface (ממשק אחסון למכולות, CSI).premium-rwo
בוחרים אם משתמשים בנפח EBS או במנהל התקן אחר של CSI.
EBS Volume
בכרטיסייה הזו מוסבר איך ליצור StorageClass מותאם אישית משלכם שמציין סוג נפח EBS, סוג מערכת קבצים ופרמטרים אחרים. פרמטרים נוספים של StorageClass זמינים בדף של GKE ב-AWS EBS CSI Driver ב-GitHub.
כדי להגדיר StorageClass בהתאמה אישית, מעתיקים את מניפסט ה-YAML הבא לקובץ בשם
my-custom-class.yaml.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: ebs.csi.aws.com allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumerמחליפים את
CLASS_NAMEבשם של StorageClass חדש.לדוגמה, קובץ ה-YAML הבא יוצר StorageClass חדש שמקצה נפחי EBS מסוג Throughput Optimized HDD בפורמט של מערכת הקבצים XFS.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-class provisioner: ebs.csi.aws.com allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1StorageClass מותאם אישית של EFS
בכרטיסייה הזו מוסבר איך ליצור StorageClass בהתאמה אישית עבור מנהל הקצאות (provisioner) של מנהל התקן EFS CSI. במאמר שימוש במשאב EFS מופיעה רשימה של הדרישות המוקדמות ל-StorageClass הזה. בדף EFS CSI Driver מפורטים פרמטרים נוספים של StorageClass מעבר לאלה שמופיעים במניפסט הבא.
מעתיקים את מניפסט ה-YAML הבא לקובץ בשם
my-custom-class.yaml.kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: <var>EFS_STORAGE_CLASS_NAME</var> provisioner: efs.csi.aws.com mountOptions: - tls parameters: provisioningMode: efs-ap fileSystemId: EFS_ID directoryPerms: "700"מחליפים את:
- EFS_STORAGE_CLASS_NAME בשם של
StorageClass. - EFS_ID עם מזהה מערכת הקבצים של EFS – לדוגמה, fs-12345678a.
CSI Driver
אפשר לציין מנהל התקן אחר של CSI בשדה
provisioner.כדי ליצור StorageClass עם מנהל התקן אחר של CSI, אפשר להשתמש בדוגמה הבאה של YAML.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: ...מחליפים את מה שכתוב בשדות הבאים:
-
CSI_DRIVER_NAMEמחליפים בשם של מנהל ההתקן של CSI – לדוגמה,csi.example.com -
CLASS_NAMEעם השם של StorageClass – לדוגמה,my-custom-class
מגדירים את שדות המשנה בקטע
parametersבהתאם לדרייבר ה-CSI.- EFS_STORAGE_CLASS_NAME בשם של
מחילים את ה-YAML על האשכול.
kubectl apply -f my-custom-class.yaml
יצירת PersistentVolumeClaim עם StorageClass בהתאמה אישית
אחרי שיוצרים StorageClass בהתאמה אישית, אפשר לציין אותו ב-PVC. בדוגמה שלמטה נוצר PVC בשם
my-pvcשמפנה אל StorageClass בשםmy-custom-class.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 30Gi storageClassName: my-custom-class
הגדרת StorageClass כברירת מחדל
ב-GKE on AWS נעשה שימוש ב-StorageClass שמוגדר כברירת מחדל בשם standard-rwo, שמקצה כרכים של gp2 EBS. אפשר לשנות את ברירת המחדל ל-StorageClass אחר.
כדי לשנות את ברירת המחדל של StorageClass:
מעדכנים את ההערה
is-default-classשלstandard-rwoStorageClass עםkubectl patch.kubectl patch storageclass standard-rwo -p \ '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'יוצרים StorageClass חדש עם ההערה
storageclass.kubernetes.io/is-default-class: true.בדוגמה הבאה של StorageClass נעשה שימוש בדרייבר
ebs.csi.aws.com. כדי להתקין עוד מנהל התקן לאחסון, אפשר לעיין במאמר בנושא התקנה של מנהלי התקן נוספים של CSI.מעתיקים את קוד ה-YAML הבא לקובץ בשם
my-custom-class.yaml.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME annotations: storageclass.kubernetes.io/is-default-class: true provisioner: ebs.csi.aws.com allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: type: EBS_VOLUME_TYPEמחליפים את מה שכתוב בשדות הבאים:
-
EBS_VOLUME_TYPE: סוג נפח האחסון ב-AWS EBS שנוצר על ידי StorageClass. -
CLASS_NAMEבשם של StorageClass החדש
לדוגמה, קובץ ה-YAML הבא יוצר StorageClass חדש שמוגדר כברירת מחדל ומקצה נפחי SSD למטרות כלליות (gp3).
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: my-custom-default-class annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.aws.com allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer parameters: type: gp3-
מחילים את הכיתה החדשה בהתאמה אישית על האשכול.
kubectl apply -f my-custom-class.yaml
אחרי שמחילים את המניפסט הזה, GKE ב-AWS משתמש ב-my-custom-default-class StorageClass לבקשות חדשות לאחסון.
הפניה ל-StorageClass ב-StatefulSet
כדי להשתמש ב-StorageClass החדש, צריך להפנות אליו ב-volumeClaimTemplates של StatefulSet.
כשמפנים אל StorageClass במפרט volumeClaimTemplates של StatefulSet, Kubernetes מספק אחסון יציב באמצעות PersistentVolumes (PVs).
Kubernetes קורא למנהל ההקצאות שמוגדר ב-StorageClass כדי ליצור נפח אחסון חדש. אחרי שהנפח מוקצה, Kubernetes יוצר באופן אוטומטי PV.
ההפניה הבאה של StatefulSet מתייחסת ל-StorageClass my-custom-class ומקצה נפח אחסון של גיביבייט אחד:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: web
spec:
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: registry.k8s.io/nginx-slim:0.8
volumeMounts:
- name: www
mountPath: /usr/share/nginx/html
volumeClaimTemplates: # This is the specification in which you reference the StorageClass
- metadata:
name: www
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi
storageClassName: my-custom-class # This field references the existing StorageClass
המאמרים הבאים
מידע על נפחים קבועים והקצאה דינמית ב-GKE
התקנת מנהלי התקנים נוספים של CSI ב-GKE ב-AWS.
כדי לפרוס את עומס העבודה הראשון, אפשר להיעזר במדריך למתחילים.