GKE on AWS פורס באופן אוטומטי את מנהל ההתקן של Container Storage Interface (CSI) עבור Amazon Elastic Block Store (EBS) כדי להקצות ולנהל נפחי אחסון של Amazon EBS באשכולות.
הגרסה של מנהל ההתקן של GKE ב-AWS EBS CSI קשורה לגרסה של GKE ב-AWS Kubernetes. בדרך כלל, גרסת הדרייבר היא הגרסה העדכנית ביותר שזמינה כשגרסת GKE יוצאת. כשמשדרגים את האשכול, מנהלי ההתקנים מתעדכנים אוטומטית.
איך משתמשים ב-StorageClass שמוגדר כברירת מחדל
אם יוצרים PersistentVolumeClaim בלי להגדיר את השדה spec.storageClassName, נפח gp2 מוקצה באמצעות StorageClass של מנהל התקן CSI של GKE on AWS EBS כברירת מחדל.
קובץ ה-YAML הבא יוצר PersistentVolumeClaim (PVC) בשם mypvc בגודל של 30 גיביבייט.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
איך משתמשים ב-StorageClass אחר שהותקן מראש
GKE on AWS EBS CSI Driver כולל גם את premium-rwo StorageClass, שמקצה io1 נפחי אחסון עם תפוקה גבוהה יותר.
כדי להשתמש בו, צריך לציין אותו ב-spec.storageclassName של ה-PVC.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mypvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 30Gi
storageclassName: premium-rwo
איך משתמשים ב-StorageClass מותאם אישית
אפשר ליצור StorageClasses נוספים לנפחי EBS או להשתמש במנהלי התקנים של Container Storage Interface (CSI).
בוחרים אם משתמשים בנפח EBS או במנהל התקן CSI ספציפי.
EBS Volume
אתם יכולים ליצור StorageClass מותאם אישית משלכם שמציין סוג נפח EBS, סוג מערכת קבצים ופרמטרים אחרים. אפשר למצוא פרמטרים נוספים של StorageClass בדף GitHub של GKE on AWS EBS CSI Driver.
כדי להגדיר StorageClass בהתאמה אישית, מעתיקים את מניפסט ה-YAML הבא לקובץ בשם
my-custom-class.yaml.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: ebs.csi.aws.com 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 volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1CSI Driver
אפשר לציין מנהל התקן אחר של CSI בשדה
provisioner.כדי ליצור StorageClass עם מנהל התקן אחר של CSI, אפשר להשתמש בדוגמה הבאה של YAML.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: CLASS_NAME provisioner: CSI_DRIVER_NAME volumeBindingMode: WaitForFirstConsumer parameters: ...מחליפים את מה שכתוב בשדות הבאים:
-
CSI_DRIVER_NAMEמחליפים בשם של מנהל ההתקן של CSI – לדוגמה,csi.example.com -
CLASS_NAMEעם השם של StorageClass – לדוגמה,my-custom-class
מגדירים את שדות המשנה בקטע
parametersבהתאם לדרייבר ה-CSI.-
מחילים את ה-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 volumeBindingMode: WaitForFirstConsumer parameters: type: EBS_VOLUME_TYPEמחליפים את מה שכתוב בשדות הבאים:
-
EBS_VOLUME_TYPE: סוג נפח האחסון ב-AWS EBS שנוצר על ידי StorageClass. -
CLASS_NAMEבשם של StorageClass החדש
לדוגמה, קובץ ה-YAML הבא יוצר StorageClass חדש שמוגדר כברירת מחדל ומקצה נפחי EBS מסוג Throughput Optimized HDD בפורמט של מערכת הקבצים XFS.
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 volumeBindingMode: WaitForFirstConsumer parameters: csi.storage.k8s.io/fsType: xfs type: st1-
מחילים את הכיתה החדשה בהתאמה אישית על האשכול.
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
מתקינים מנהלי התקנים של אחסון באשכול GKE on AWS.
כדי לפרוס את עומס העבודה הראשון, אפשר להיעזר במדריך למתחילים.