להשתמש בכח של כמה עוגות יחד

16/9/2021, לפני 19 ימים

כמו שכתבתי בפוסט קודם יש לי, כעובד מיקרוסופט, 150$ בחודש לשימוש באז’ור. בהתחלה חשבתי שזה המון, אבל מסתבר שלא, ולהחזיק שרתים על קוברנטיס מנוהל זה די יקר, במיוחד אם לא שמים לב לבחירות שעושים, למשל על אילו מכונות בדיוק ה Nodes רצים, כמה מכונות כאלו מופעלות וכו’.

אחרי ששילמתי קצת קנס על למידה, הצלחתי לגרום למה שרץ לעמוד בתקציב (בינתיים…) , אבל זה נתן לי את הרעיון הבא: למה בעצם לא להקים שרת קוברנטיס לבד בבית?

טוב, האמת שהתשובה לזה די ברורה: האינטרנט שלי בבית חרא. אין לי סיבים, לצערי, עדיין, ככה שהמהירות ממש לא קרובה ללהיות סימטרית, וההעלאה עלובה, כלומר, שאם הרבה יותר מדי אנשים יכנסו בבת אחת לאתר, זה פשוט לא יעבוד. אבל, זה עדיין אתגר מעניין לעשות.

התחלתי את המחקר לקראת הפרויקט במחשבה שאני הולך להשתמש בהפצה מלאה של קוברנטיס ולהריץ הכל על הרספברייפי 4. אבל, בהמשך למדתי שזה ממש לא מומלץ, ושעדיף להשתמש בהפצות אחרות של קוברנטיס, כמו micro8k, או מה שאני בחרתי להשתמש בו - k3s. שתי ההפצות נועדו לרוץ על מכשירים חלשים (יחסית. הרספברייפי 4 עם 4 ג’יגה ממש לא חלש), אבל בחרתי די אקראית ב k3s, בעיקר כי פחדתי שמיקרו8קיי קשור מדי לאובונטו, כיוון ששניהם מופצים ע”י קנוניקל, ואני כמובן הולך להתקין את הכל על ההפצה האהובה עלי, ArchLimux או במקרה הספציפי הזה, ArchLinux Arm, שמהווה גירסה המתאימה למעבדי ARM של ארצ’.

הוראות ההתקנה של ההפצה לרספבריפיי 4 לא מאוד ארוכות, אבל למה לעשות משהו ידנית אם אפשר להפוך אותו לאוטומטי, במיוחד שהזמנתי כבר עוד 3 ראספברי, ולא בא לי לעבוד כמו חמור. אז מצאתי באינטרנט ריפוזיטורי חביב של בחור ספרדי בשם Pablo Navais, שכבר עשה הכל לפני, ויצר סקריפט ממש מגניב כדי לעשות את הדברים פשוטים יותר.

לצערי, הסקריפט עשה הרבה דברים שלא ברור לי למה לעשות אותם, כמו להתקין קרנל לבד במקום להשתמש במה שההפצה נותנת, ולכן, אחרי ששלחתי לו PR שתיקן לו באג שהיה עשוי להיות הרסני (ולמחוק לך את המחשב), עשיתי פורק, ותיקנתי את הסקריפט כך שיתקין את המערכת כפי שאני הייתי רוצה, ויותר בצמוד להוראות הרשמיות. כל הכבוד לקוד פתוח!

אבל, כמובן שגם אחרי ההתקנה של המערכת, צריך להתקין עוד המון דברים. ולשנות ולהתאים שהכל יעבוד חלק בקלות. למזלי, אותו בחור ספרדי דאג גם לזה, באמצעות שימוש בכלי בשם Ansible, שנועד לעזור לעשות אוטומציה בדיוק לדברים האלו. גם כאן, “נאלצתי” ללשנות המון כדי שהכל יתאים לצרכי, ולקח לי יום שלם, כולל להישאר ער עד 3 בלילה (כי אני לא מסוגל להפסיק עבודה באמצע) כדי שהכל יעבוד כמו שאני רוצה.

לשמחתי, זה השתלם, והתוצאה:

❯ kubectl get nodes -o wide
NAME          STATUS   ROLES                  AGE    VERSION        INTERNAL-IP     EXTERNAL-IP   OS-IMAGE         KERNEL-VERSION   CONTAINER-RUNTIME
k3s-master    Ready    control-plane,master   127m   v1.21.4+k3s1   192.168.1.113   <none>        Arch Linux ARM   5.11.4-1-ARCH    containerd://1.4.9-k3s1
k3s-node-01   Ready    worker                 52m    v1.21.4+k3s1   192.168.1.106   <none>        Arch Linux ARM   5.11.4-1-ARCH    containerd://1.4.9-k3s1

התוכניות לעתיד:

  • להוסיף עוד 2 מכונות: הן כבר הגיעו, מחכה לסוויצ’ וכבלים שצריכים להגיע.
  • להדפיס בתלת מימד מארז נוח לכל העסק הזה. מזל שאחי הקטן לומד הנדסת מכונות והוא בדיוק בחופשת סמסטר.
  • לכתוב בלוג יותר מפורט על מה ואיך.

הערות, מענות וכו'
נכתב על ידי אסף ספיר מתכנת, לשעבר פרמדיק ואח.
© Assaf Sapir, 2021, Built with Gatsby. Hosted with GitHub Pages.
Source code on my GitHub.