✕ סגור 
צור קשר
תודה על ההתעניינות .

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form

הכירו את Docker Swarm: האח הקטן והחכם של קוברנטיס

דב אמיר
|
קלה
|
Dec 25, 2018
alt="facebook"alt="linkedin"
להרשמה לניוזלטר

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

?האם קוברנטיס מתאים לכל פרויקט מבוסס קונטיינרים

החיסרון העיקרי של קוברנטיס הוא המורכבות ועקומת הלמידה שלו.

מורכבות זו נובעת מכמה סיבות:

• צריך להכיר גם את "שפת" דוקר וגם את "שפת" קוברנטיס

• יש הרבה "חלקים זזים" בתשתית (kube-apiserver, etcd, kube-scheduler, kube-controller-manage,  kubelet ,kube-proxy וכו')

• יש המון סוגי אובייקטים (service , pod, deployment, replicaset)

• כמות עצומה של פיצ'רים שלא תמיד צריך

• אקוסיסטם רחב

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

אז  האם פרויקטים כאלה צריכים לוותר על  Container Orchestration Framework?

כמובן שהתשובה היא לא.

במאמר זה אדבר תחילה על היתרונות של פתרונות לניהול קונטיינרים (אורקסטרטורים) באופן כללי.

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

?אז למה אני צריך אורקסטרטור

קיימים סוגים רבים של אורקסטרטורים כמו שניתן להבין מההרצאה הבאה

אורקסטרטורים הם באופן כללי מערכות לניהול קונטיינרים, אשר כמעט כולם נותנים את היתרונות הבאים:

• Scheduling - הרצה אוטומטית של הקונטיינרים בשרתים תוך ניצול מיטבי של המשאבים.

• cloud agnostic - עובדים באותו אופן בכל ענן או סביבת on-premise

• High availability - הרצה מחדש של קונטיינרים תקולים

• rolling updates

• Container Monitoring

Docker swarm

Docker Swarm הוא האורקסטרטור הרשמי של חברת Docker, ולפיכך הוא קיים built-in בכל התקנה של דוקר.

הוא גם משתמש באותו שפה ופורמטים של דוקר (docker command line \ docker compose), כך שמי שעובד עם דוקר יכול ליהנות מהיתרונות של Docker Swarm ללא התקנה ולימוד של מערכות אחרות.

מודל הפעולה של Docker Swarm הוא גם מאוד פשוט. ב- Swarm צמצמו את סוגי הקומפוננטות ואובייקטים מעשרות רבות (בקוברנטיס) ל- 3 בלבד:

Manager - מהל את ה cluster, בתמונה למטה יש manger ראשי ו 2 רפליקות

Worker node - מכונה שמשתתפת ב cluster ורצים בה קונטיינרים

Container - דוקר קונטיינר שכולנו אוהבים ומכירים.

הרצת קלסטר

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

1. יש להכין מספר שרתים, אפשר גם אחד, ולוודא שהפורטים הבאים פתוחים: 2377,7946 ,4789. השרתים יכולים להיות על כל ענן, על כמה עננים שונים, או on-premise.

2. להיכנס לשרת אחד שיהיה ה manager (עם ip חיצוני לדוגמא  x.x.x.x) ולהריץ:

$ docker swarm init --advertise-addr  x.x.x.x

3. הפקודה הקודמת תייצר את ה swarm manager ותחזיר הוראות איך לצרף שרתים נוספים ל cluster שאותו ינהל ה manager.

הפלט יראה כך:

docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s   x.x.x.x:2377

את הפלט הנ"ל נריץ בכל  השרתים האחרים כדי לצרף אותם ל cluster.

4. כדי לראות את השרתים שמשתתפים ב- cluster נכנס שוב ל- manager ונריץ:

$ docker node ls

ID  HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

e32e23r34f5gg6hjhtyjhtyhr    worker2   Ready   Active

erg56y7j87k8rj7jhh56h6hj5    worker1   Ready   Active

T43t54y76i889ol9luyjyhjyj *  manager1  Ready   Active        Leader

5. כעת כל שנותר הוא להריץ כמה קונטיינרים ב- cluster בעזרת הפקודה הבאה לדוגמא:

docker service create --replicas 2 --name helloworld nginx

docker service create --replicas 1 --name myredis redis

כאשר service הוא קבוצה של קונטיינרים מאותו הסוג.

6. כדי לראות את הקונטיינרים שרצים ב- cluster נריץ:

$ docker service ls

ID  NAME  SCALE  IMAGE   COMMAND

f54fg55g5g5g  helloworld  2/2    nginx

E32e2323r44r  myredis     1/1    redis

7. עוד כמה פקודות שימושיות:

• לשנות scale  של service

$ docker service scale helloworld=5

• לראות את כל ה- metadata  של קונטיינר

$ docker service inspect helloworld

• למחוק קבוצת קונטיינרים

$ docker service rm helloworld

בסקריפט הזה יש דוגמה נוספת להרצת docker swarm  על 3 שרתים, אחד ב AWS , אחד ב AZURE ואחד ON-PREMISE.

במדריך זה ראינו איך אפשר בכמה דקות להרים cloud agnostic docker cluster עם אורקסטרטור.

ניתן לראות בתמונה דוגמה לקלסטר docker swarm עם כלי UI פשוט שאני השתתפתי בכתיבתו:

docker swarm visualizer.

קיימים מספר כלים נוספים  למוניטורינג וניהול של docker swarm, שמאפשרים להריץ קונטיינרים, לעשות ssh ולראות לוגים מ- web UI  כמו

https://swarmpit.io

https://portainer.io

מאת: דב אמיר, Cloud architect and senior developer at DataRails

https://github.com/DovAmir

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

?האם קוברנטיס מתאים לכל פרויקט מבוסס קונטיינרים

החיסרון העיקרי של קוברנטיס הוא המורכבות ועקומת הלמידה שלו.

מורכבות זו נובעת מכמה סיבות:

• צריך להכיר גם את "שפת" דוקר וגם את "שפת" קוברנטיס

• יש הרבה "חלקים זזים" בתשתית (kube-apiserver, etcd, kube-scheduler, kube-controller-manage,  kubelet ,kube-proxy וכו')

• יש המון סוגי אובייקטים (service , pod, deployment, replicaset)

• כמות עצומה של פיצ'רים שלא תמיד צריך

• אקוסיסטם רחב

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

אז  האם פרויקטים כאלה צריכים לוותר על  Container Orchestration Framework?

כמובן שהתשובה היא לא.

במאמר זה אדבר תחילה על היתרונות של פתרונות לניהול קונטיינרים (אורקסטרטורים) באופן כללי.

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

?אז למה אני צריך אורקסטרטור

קיימים סוגים רבים של אורקסטרטורים כמו שניתן להבין מההרצאה הבאה

אורקסטרטורים הם באופן כללי מערכות לניהול קונטיינרים, אשר כמעט כולם נותנים את היתרונות הבאים:

• Scheduling - הרצה אוטומטית של הקונטיינרים בשרתים תוך ניצול מיטבי של המשאבים.

• cloud agnostic - עובדים באותו אופן בכל ענן או סביבת on-premise

• High availability - הרצה מחדש של קונטיינרים תקולים

• rolling updates

• Container Monitoring

Docker swarm

Docker Swarm הוא האורקסטרטור הרשמי של חברת Docker, ולפיכך הוא קיים built-in בכל התקנה של דוקר.

הוא גם משתמש באותו שפה ופורמטים של דוקר (docker command line \ docker compose), כך שמי שעובד עם דוקר יכול ליהנות מהיתרונות של Docker Swarm ללא התקנה ולימוד של מערכות אחרות.

מודל הפעולה של Docker Swarm הוא גם מאוד פשוט. ב- Swarm צמצמו את סוגי הקומפוננטות ואובייקטים מעשרות רבות (בקוברנטיס) ל- 3 בלבד:

Manager - מהל את ה cluster, בתמונה למטה יש manger ראשי ו 2 רפליקות

Worker node - מכונה שמשתתפת ב cluster ורצים בה קונטיינרים

Container - דוקר קונטיינר שכולנו אוהבים ומכירים.

הרצת קלסטר

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

1. יש להכין מספר שרתים, אפשר גם אחד, ולוודא שהפורטים הבאים פתוחים: 2377,7946 ,4789. השרתים יכולים להיות על כל ענן, על כמה עננים שונים, או on-premise.

2. להיכנס לשרת אחד שיהיה ה manager (עם ip חיצוני לדוגמא  x.x.x.x) ולהריץ:

$ docker swarm init --advertise-addr  x.x.x.x

3. הפקודה הקודמת תייצר את ה swarm manager ותחזיר הוראות איך לצרף שרתים נוספים ל cluster שאותו ינהל ה manager.

הפלט יראה כך:

docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s   x.x.x.x:2377

את הפלט הנ"ל נריץ בכל  השרתים האחרים כדי לצרף אותם ל cluster.

4. כדי לראות את השרתים שמשתתפים ב- cluster נכנס שוב ל- manager ונריץ:

$ docker node ls

ID  HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS

e32e23r34f5gg6hjhtyjhtyhr    worker2   Ready   Active

erg56y7j87k8rj7jhh56h6hj5    worker1   Ready   Active

T43t54y76i889ol9luyjyhjyj *  manager1  Ready   Active        Leader

5. כעת כל שנותר הוא להריץ כמה קונטיינרים ב- cluster בעזרת הפקודה הבאה לדוגמא:

docker service create --replicas 2 --name helloworld nginx

docker service create --replicas 1 --name myredis redis

כאשר service הוא קבוצה של קונטיינרים מאותו הסוג.

6. כדי לראות את הקונטיינרים שרצים ב- cluster נריץ:

$ docker service ls

ID  NAME  SCALE  IMAGE   COMMAND

f54fg55g5g5g  helloworld  2/2    nginx

E32e2323r44r  myredis     1/1    redis

7. עוד כמה פקודות שימושיות:

• לשנות scale  של service

$ docker service scale helloworld=5

• לראות את כל ה- metadata  של קונטיינר

$ docker service inspect helloworld

• למחוק קבוצת קונטיינרים

$ docker service rm helloworld

בסקריפט הזה יש דוגמה נוספת להרצת docker swarm  על 3 שרתים, אחד ב AWS , אחד ב AZURE ואחד ON-PREMISE.

במדריך זה ראינו איך אפשר בכמה דקות להרים cloud agnostic docker cluster עם אורקסטרטור.

ניתן לראות בתמונה דוגמה לקלסטר docker swarm עם כלי UI פשוט שאני השתתפתי בכתיבתו:

docker swarm visualizer.

קיימים מספר כלים נוספים  למוניטורינג וניהול של docker swarm, שמאפשרים להריץ קונטיינרים, לעשות ssh ולראות לוגים מ- web UI  כמו

https://swarmpit.io

https://portainer.io

מאת: דב אמיר, Cloud architect and senior developer at DataRails

https://github.com/DovAmir

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
דב אמיר
בואו נעבוד ביחד
צרו קשר