גרסאות 1.6 ואילך של GKE ב-AWS תומכות ב-Elastic File System (EFS) של AWS באמצעות EFS CSI Driver. בנושא הזה מוסבר איך לטעון מערכת קבצים קיימת של EFS כ-PersistentVolume באשכולות המשתמשים.
לפני שמתחילים
כדי לבצע את השלבים במאמר הזה, אתם צריכים:
- מערכת קבצים קיימת של EFS באותו AWS VPC שבו מותקן GKE on AWS.
- לפחות יעד הרכבה אחד של EFS באותו AWS VPC כמו ההתקנה של GKE on AWS.
- כל יעדי ההרכבה של EFS צריכים להיות שייכים לאחד מהבאים:
- רשתות המשנה הפרטיות להתקנה של GKE ב-AWS. כברירת מחדל, ב-GKE ב-AWS נוצרות רשתות משנה בשם
gke-CLUSTER_ID-private-AWS_ZONE, כאשר CLUSTER_ID הוא מזהה אשכול המשתמש ו-AWS_ZONE הוא אזור הזמינות ב-AWS. - קבוצת האבטחה של מאגר הצמתים.
כברירת מחדל, מערכת GKE on AWS יוצרת מאגרי צמתים בשם
gke-CLUSTER_ID-nodepool, כאשר CLUSTER_ID הוא מזהה אשכול המשתמשים.
- רשתות המשנה הפרטיות להתקנה של GKE ב-AWS. כברירת מחדל, ב-GKE ב-AWS נוצרות רשתות משנה בשם
- בספריית
anthos-aws, משתמשים ב-anthos-gkeכדי להחליף הקשר לאשכול המשתמשים. מחליפים את CLUSTER_NAME בשם אשכול המשתמש.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
שימוש ב-PersistentVolume של EFS
כדי להשתמש במערכת קבצים של EFS כ-PersistentVolume עם אשכולות המשתמשים, צריך קודם ליצור PersistentVolume ואז ליצור PersistentVolumeClaim שאליו מפנים בעומס העבודה.
יצירת נפח אחסון מתמיד
כדי ליצור PersistentVolume באמצעות מנהל התקן EFS CSI, מבצעים את השלבים הבאים.
בספריית
anthos-aws, משתמשים ב-anthos-gkeכדי להחליף הקשר לאשכול המשתמשים. מחליפים את CLUSTER_NAME בשם אשכול המשתמש.cd anthos-aws env HTTPS_PROXY=http://localhost:8118 \ anthos-gke aws clusters get-credentials CLUSTER_NAME
ההגדרה של PersistentVolume שבה אתם משתמשים תלויה בשאלה אם אתם מתחברים ישירות ל-Elastic File System או דרך נקודת גישה. בוחרים אם להתחבר ישירות ל-Elastic File System או דרך נקודת גישה.
חיבור ישיר
מעתיקים את מניפסט ה-YAML הבא לקובץ בשם
efs-volume.yaml. קובץ המניפסט מפנה לסוג האחסון EFS שיצרתם קודם.apiVersion: v1 kind: PersistentVolume metadata: name: VOLUME_NAME spec: capacity: # Note: storage capacity is not used by the EFS CSI driver. # It is required by the PersistentVolume spec. storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" # storageClassName is not required, see note in the following section. claimRef: name: CLAIM_NAME namespace: default csi: driver: efs.csi.aws.com volumeHandle: EFS_FILE_SYSTEM_IDמחליפים את מה שכתוב בשדות הבאים:
- VOLUME_NAME בשם של הנפח המתמיד.
- CLAIM_NAME בשם שרוצים להשתמש בו בשביל PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID עם מזהה מערכת הקבצים של EFS. לדוגמה,
fs-12345678a.
נקודת גישה
מעתיקים את מניפסט ה-YAML הבא לקובץ בשם
efs-volume.yaml. קובץ המניפסט מפנה לסוג האחסון EFS שיצרתם קודם.apiVersion: v1 kind: PersistentVolume metadata: name: VOLUME_NAME spec: capacity: # Note: storage capacity is not used by the EFS CSI driver. # It is required by the PersistentVolume spec. storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain storageClassName: "" # storageClassName is not required, see note in the following section. claimRef: name: CLAIM_NAME namespace: default csi: driver: efs.csi.aws.com volumeHandle: EFS_FILE_SYSTEM_ID::ACCESS_POINT_IDמחליפים את מה שכתוב בשדות הבאים:
- VOLUME_NAME בשם של הנפח המתמיד.
- CLAIM_NAME בשם שרוצים להשתמש בו בשביל PersistentVolumeClaim.
- EFS_FILE_SYSTEM_ID עם מזהה מערכת הקבצים של EFS. לדוגמה,
fs-12345678a. - ACCESS_POINT_ID עם המזהה של נקודת הגישה. לדוגמה,
fsap-1234567890abcde.
מחילים את קובץ ה-YAML על אשכול המשתמשים.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-volume.yamlהפלט מאשר את היצירה של PersistentVolume.
persistentvolume/VOLUME_NAME created
יצירת PersistentVolumeClaim
כדי להשתמש במערכת הקבצים של EFS עם עומסי העבודה, צריך ליצור PersistentVolumeClaim.
כדי ליצור את PersistentVolumeClaim, מעתיקים את מניפסט ה-YAML הבא לקובץ בשם
efs-claim.yaml.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: CLAIM_NAME spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 5Giמחליפים את CLAIM_NAME בשם של PersistentVolumeClaim. לדוגמה,
efs-claim1.מחילים את קובץ ה-YAML על אשכול המשתמשים.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-claim.yamlהפלט מאשר את היצירה של PersistentVolumeClaim.
persistentvolumeclaim/CLAIM_NAME created
יצירת StatefulSet
אחרי שיוצרים PersistentVolumeClaim, אפשר להשתמש בו בעומס עבודה.
בשלבים שבקטע הזה נוצרת דוגמה ל-StatefulSet עם מערכת הקבצים EFS שמוצמדת אליו. אפשר גם להשתמש ב-PersistentVolumeClaim עם סוגים אחרים של עומסי עבודה, כמו Pods ו-Deployments, על ידי הפניה לתביעה ב-spec.volumes.
כדי ליצור StatefulSet שמעלה את מערכת הקבצים של EFS שאליה מתייחס PersistentVolumeClaim, מבצעים את השלבים הבאים.
מעתיקים את מניפסט ה-YAML הבא לקובץ בשם
efs-statefulset.yaml. קובץ המניפסט לדוגמה הזה מפעיל קונטיינר של Ubuntu Linux שמעלה את מערכת הקבצים של EFS ב-/efs-data. הקונטיינר כותב כל חמש שניות לקובץ במערכת הקבצים EFS בשםout.txt.apiVersion: apps/v1 kind: StatefulSet metadata: name: efs-shell spec: selector: matchLabels: app: test-efs serviceName: efs-app replicas: 1 template: metadata: labels: app: test-efs spec: terminationGracePeriodSeconds: 10 containers: - name: linux image: ubuntu:bionic command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) >> /efs-data/out.txt; sleep 5; done"] volumeMounts: - name: efs-volume mountPath: /efs-data volumes: - name: efs-volume persistentVolumeClaim: claimName: CLAIM_NAMEמחליפים את מה שכתוב בשדות הבאים:
- CLAIM_NAME בשם של PersistentVolumeClaim שציינתם קודם. לדוגמה,
efs-claim1.
- CLAIM_NAME בשם של PersistentVolumeClaim שציינתם קודם. לדוגמה,
מחילים את קובץ ה-YAML על אשכול המשתמשים.
env HTTPS_PROXY=http://localhost:8118 \ kubectl apply -f efs-statefulset.yamlהפלט מאשר את היצירה של StatefulSet.
statefulset.apps/efs-shell createdיכול להיות שיעברו כמה דקות עד שקובץ אימג' של קונטיינר יורד ויופעל.
מאשרים שה-Pod של StatefulSet נמצא בסטטוס
Runningבאמצעותkubectl get pods.env HTTPS_PROXY=http://localhost:8118 \ kubectl get pods -l app=test-efsהפלט כולל את השם של ה-Pod והסטטוס שלו. בתשובה הבאה, שם ה-Pod הוא
efs-shell-0.NAME READY STATUS RESTARTS AGE efs-shell-0 1/1 Running 0 1mאחרי שה-Pod יהיה במצב Running, משתמשים ב-
kubectl execכדי להתחבר ל-Pod שמארח את ה-StatefulSet.env HTTPS_PROXY=http://localhost:8118 \ kubectl exec -it efs-shell-0 -- bashהפקודה
kubectlמפעילה מעטפת ב-Pod.כדי לוודא שמערכת הקבצים של EFS נטענה, בודקים את התוכן של הקובץ
out.txtבאמצעות הפקודהtail.tail /efs-data/out.txtהפלט מכיל שעות עדכניות ב-UTC.
מתנתקים מה-Pod באמצעות הפקודה
exit.exitהמעטפת חוזרת למכונה המקומית.
כדי להסיר את ה-StatefulSet, משתמשים ב-
kubectl delete.env HTTPS_PROXY=http://localhost:8118 \ kubectl delete -f efs-statefulset.yaml
סידור וארגון
כדי להסיר את המשאבים שיצרתם בקטעים הקודמים, מריצים את הפקודות הבאות:
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-statefulset.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-claim.yaml
env HTTPS_PROXY=http://localhost:8118 \
kubectl delete -f efs-volume.yaml
המאמרים הבאים
aws-efs-csi-driverדוגמאות לשימוש בנפחי EFS