מבוא
כשעובדים עם ארכיטקטורת מיקרו-שירותים המבוססת על Podman, לעיתים קרובות נדרש לנהל באופן דינמי קונטיינרים עזר בתוך פוד. אחד התרחישים הנפוצים ביותר כולל מנהרות SSH לשירותים מרוחקים: מסדי נתונים, ממשקי API ומערכות ניטור. במאמר זה אתאר את תבנית "קונטיינר sidecar זמני" ואת המימוש שלה ב-Python.
ארכיטקטורת הפוד
הפוד שלנו ב-Podman מורכב משלושה רכיבים עיקריים: Valkey (fork של Redis) לתור המשימות, עובד RQ לעיבוד משימות, ומנהרת SSH זמנית שמופעלת לפי דרישה. כל הקונטיינרים נמצאים בפוד אחד, מה שמשמעו מרחב רשת משותף — מנהרה שנפתחת בקונטיינר ה-sidecar נגישה לעובד דרך localhost.
# יצירת פוד עם העברת פורטים
podman pod create --name jira-stack -p 6379:6379 -p 8080:8080
# הפעלת Valkey בפוד
podman run -d --pod jira-stack --name valkey docker.io/valkey/valkey:8
# הפעלת העובד
podman run -d --pod jira-stack --name worker localhost/jira-worker:latest
מנהל הקשר של Python למחזור חיי הקונטיינר
המרכיב המרכזי של תבנית זו הוא מנהל הקשר (context manager) של Python שמטפל בהפעלה ועצירה של קונטיינר ה-sidecar. זה מבטיח ניקוי נכון של משאבים גם כשמתרחשות שגיאות.
class EphemeralContainer:
def init(self, name, pod_name):
self.name = name
self.pod_name = pod_name
def enter(self):
subprocess.run(
[“podman”, “start”, self.name],
check=True
)
self._wait_healthy()
return self
def exit(self, *args):
subprocess.run(
[“podman”, “stop”, “-t”, “5”, self.name]
)
שימוש במשימות RQ
כעת אנחנו יכולים להשתמש במנהל ההקשר בעיבוד משימות. העובד מפעיל את מנהרת ה-SSH לפני ביצוע משימה ומבטיח את כיבויה לאחר סיום. מנהרת ה-SSH פעילה רק כשנדרשת, מה שחוסך משאבי מערכת.
Containerfile למנהרת SSH
קונטיינר המנהרה כולל לקוח SSH וסקריפט חיבור עם חיבור מחדש אוטומטי. ה-HEALTHCHECK מבטיח שהמנהרה פעילה לפני שהעובד מנסה להשתמש בה.
בדיקות תקינות וניטור
חיוני להגדיר בדיקות תקינות לקונטיינרי sidecar. Podman תומך בהוראות healthcheck מובנות ב-Containerfile. מנהל ההקשר שלנו ממתין לעבור את בדיקת התקינות לפני שממשיך — זה מונע מצבים שבהם העובד מנסה להשתמש בחיבור שטרם הוקם.
טיפול בשגיאות והפעלה מחדש של העובד
כשעובד מופעל מחדש, כל הקונטיינרים הזמניים חייבים להיעצר כראוי. אנחנו מוסיפים מטפל סיגנלים ותהליך ניקוי בהפעלה שעוצר קונטיינרי sidecar שנשארו מהסשן הקודם. שיטת exit של מנהל ההקשר מבטיחה ניקוי בסיום רגיל וגם בחריגות.
סיכום
תבנית ה-sidecar הזמני מאפשרת לחסוך משאבים על ידי הפעלת שירותי עזר רק כשנדרש. מנהל ההקשר של Python מבטיח ניהול מחזור חיים אמין, ופודים של Podman מספקים מרחב רשת משותף לתקשורת בין קונטיינרים. גישה זו יעילה במיוחד למנהרות SSH, חיבורי מסד נתונים וחיבורים אחרים עתירי משאבים.