בדף הזה מוסבר איך להשתמש במערכות קבצים ברשת CIFS/SMB עם Cloud Run.
אם אתם משתמשים ב-NFS, ב-Filestore או ב-Cloud Storage FUSE ב-Cloud Run, כדאי לעיין בדפים הבאים:
- הגדרת נפח NFS עבור שירותים, משימות או מאגרי עובדים.
- הגדרת נפח האחסון ב-Cloud Storage עבור שירותים, משימות או מאגרי עובדים.
מגבלות
כשמשתמשים ב-
smbnetfs, צריך לציין את סביבת ההפעלה מהדור השני.בגלל ההגבלה של סביבת ההפעלה של Cloud Run, אי אפשר לטעון CIFS/SMB ישירות בתוך Cloud Run. עם זאת, אפשר להשתמש בלקוחות SMB שלא מסתמכים על טעינת ליבה, כמו
smbnetfs(מבוסס FUSE) אוsmbclient.Cloud Run נועד להתרחב במהירות למספר גדול של מופעים. עם זאת, רוב מערכות הקבצים ברשת לא מיועדות לשימוש בו-זמני על ידי מספר גדול של לקוחות. בשירותי Cloud Run, כדאי להשתמש בתכונה maximum instances כדי להגביל את מספר המופעים של Cloud Run.
שימוש ב-smbnetfs
smbnetfs היא מערכת קבצים מבוססת-FUSE שמאפשרת לטעון שיתופי SMB כחלק מהיררכיית מערכת הקבצים המקומית.
כדי להשתמש ב-smbnetfs עם Cloud Run, צריך לעדכן את קובץ ה-Docker כדי להתקין את smbnetfs ואת התלות שלו, ולהגדיר פרטי כניסה.
הגדרה של smbnetfs בקובץ Dockerfile
מוסיפים את ההוראות הבאות לקובץ Docker:
# Install smbnetfs, fuse and other dependencies
RUN apt-get update && apt-get install -y smbnetfs fuse && rm -rf /var/lib/apt/lists/*
# Setup smbnetfs configuration
RUN mkdir -p ~/.smb
# Check if files exist before copying, as strict locations might vary or be missing in minimal images
RUN [ -f /etc/smbnetfs.conf ] && cp /etc/smbnetfs.conf ~/.smb/ || echo "smbnetfs.conf not found"
# Create the auth file
# In production, use mechanisms like [Secret Manager](/run/docs/configuring/services/secrets) to handle credentials
# securely instead of placing them directly in the Dockerfile.
RUN echo 'auth "<smb-server-ip>" "<smb-username>" "<smb-password>"' > ~/.smb/smbnetfs.auth
RUN chmod 600 ~/.smb/smbnetfs.auth
# Create the host file
RUN echo 'host <smb-server-ip> visible=true' > ~/.smb/smbnetfs.host
RUN chmod 600 ~/.smb/smbnetfs.host
# Enable the includes in the main config if they exist
RUN if [ -f ~/.smb/smbnetfs.conf ]; then \
sed -i 's/^#include "smbnetfs.auth"/include "smbnetfs.auth"/' ~/.smb/smbnetfs.conf && \
sed -i 's/^#include "smbnetfs.host"/include "smbnetfs.host"/' ~/.smb/smbnetfs.conf; \
fi
מחליפים את <smb-server-ip>, <smb-username> ו-<smb-password> בפרטי החיבור של שרת ה-SMB.
צירוף שיתוף ה-SMB במהלך הפעלת המאגר
מריצים את smbnetfs כדי לטעון את השיתוף כשהקונטיינר מתחיל לפעול ולפני שהאפליקציה מתחילה לפעול. אם הקונטיינר פועל כמשתמש שאינו משתמש root, יכול להיות שתצטרכו לשנות את ההרשאות או את ההגדרה של FUSE.
יוצרים נקודת טעינה כמו
/mnt/smb, כמו שמוצג בפקודה הבאה:mkdir /mnt/smbטוענים את מערכת הקבצים של SMB באמצעות הפקודה
smbnetfs:smbnetfs /mnt/smbניגשים לשיתוף בקטע
/mnt/smb/<smb-server-ip>/<share-name>, כמו שמוצג בפקודה הבאה:ls /mnt/smb/smb-server-ip/share-name
פתרון בעיות
יכול להיות שתיתקלו בשגיאות קלט/פלט כשכותבים לקבצים באמצעות הדגל O_APPEND עם smbnetfs. פרטים נוספים זמינים בדיון ב-Stack Overflow.
שימוש ב-smbclient
smbclient הוא כלי שורת פקודה שמספק ממשק דמוי FTP לגישה לשיתופי SMB. אפשר להשתמש בו כדי להעביר קבצים או להריץ פקודות בשרת SMB.
כדי להימנע מהזנת פרטי הכניסה בכל פקודה, אפשר לאחסן אותם בקובץ.
שומרים את פרטי הכניסה בקובץ, למשל
smb-cred.txt:username = <smb-username> password = <smb-password>במקום קובץ פרטי כניסה, אפשר לספק פרטי כניסה לכל פקודה באמצעות האפשרות
-Uאו--user. לדוגמה:--user=[DOMAIN\]USERNAME[%PASSWORD].כדי לציין את קובץ פרטי הכניסה, משתמשים בכלי
smbclientעם הדגל-A. לדוגמה, כדי להציג רשימת קבצים בשיתוף, מריצים את הפקודה הבאה:smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'ls'
כדי לשנות קבצים באמצעות הכלי smbclient, צריך להוריד את הקובץ, לשנות אותו באופן מקומי ואז להעלות אותו בחזרה לתיקייה המשותפת, כמו שמוסבר בשלבים הבאים.
מורידים קובץ על ידי הפעלת הפקודה get:
smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'get remote local'
משנים את הקובץ באופן מקומי.
אחרי השינוי, מעלים את הקובץ על ידי הפעלת פקודת put:
smbclient //smb-server-ip/share-name -A smb-cred.txt -c 'put local remote'
כשמשתמשים בכלי smbclient, שרת ה-SMB מזהה אתכם באמצעות פרטי הכניסה שאתם מספקים. כך השרת יכול להחיל את הרשאות הגישה הנכונות לקבצים.
רשימה מלאה של פקודות smbclient זמינה במסמכים הרשמיים של smbclient.