קובץ #cloud-config נקרא כמו סקריפט מלמעלה למטה, אבל cloud-init לא מריץ אותו כך. המשתמשים והקבצים קיימים לפני שהחבילות מותקנות, runcmd רץ כמעט בסוף, ובעלייה הבאה כמעט שום דבר לא רץ בכלל.
הסדר מסביר את ההפתעות הרגילות: פקודה שרצה לפני שהחבילה שלה קיימת, או שינוי ב-user-data שאין לו השפעה על שרת שכבר עלה.
נסו בעצמכם
Detect
ds-identifyLocal
cloud-init-local.serviceNetwork
cloud-init-network.servicebootcmdרץwrite_filesרץusersרץssh_authorized_keysרץ
Config
cloud-config.serviceruncmdכותב את הסקריפט
Final
cloud-final.servicepackagesרץruncmdרץfinal_messageרץ
עלייה ראשונה: 8 מתוך 8 מודולים רצים.
שלב אחר שלב
בתחילת האתחול,
ds-identifyבודק על איזו פלטפורמה השרת רץ ומפעיל את cloud-init. בשלב Local (cloud-init-local.service) cloud-init מוצא את מקור הנתונים המקומי, קורא את מזהה ה-instance ובעלייה ראשונה כותב את הגדרות הרשת לפני שהרשת עולה.כשהרשת עולה, שלב Network (
cloud-init-network.service) מעבד את ה-user-data ומריץ את המודולים הראשונים:bootcmd, write_files, usersומפתחות ה-SSH. המשתמש שלכם והמפתח שלו קיימים מכאן והלאה.שלב Config (
cloud-config.service) מריץ את מודולי ההגדרה. runcmdהוא אחד מהם, אבל הוא רק כותב את הפקודות שלכם לסקריפט; שום דבר בו עוד לא רץ.שלב Final (
cloud-final.service) רץ אחרון באתחול. הוא מתקין אתpackages, אחר כךscripts_userמריץ את סקריפט ה-runcmd, והודעת הסיום נכתבת ללוג. פקודה ב-runcmdיכולה להניח שהחבילות כבר מותקנות.ב-reboot מזהה ה-instance זהה לזה שבמטמון, ולכן זו לא עלייה ראשונה. מודולים שרצים פעם אחת לכל instance (משתמשים, קבצים, חבילות,
runcmd) מדולגים; רק מודולים שרצים בכל אתחול, כמוbootcmd, רצים שוב. עריכת user-data בשרת שכבר רץ לא משנה דבר עד ש-instance חדש עולה או ש-cloud-init cleanמאפס את המטמון.
ערכים לדוגמה המודולים המוצגים הם ברירות המחדל של cloud.cfg ב-Ubuntu; הפצות אחרות יכולות לסדר אותם אחרת.
מה התרשים מראה
התרשים הוא ציר זמן של חמשת שלבי האתחול, Detect, Local, Network, Config ו-Final, כל אחד עם יחידת ה-systemd שלו והמודולים שהוא מריץ עבור מפתחות ה-user-data: bootcmd, write_files, users, ssh_authorized_keys, runcmd, packages ו-final_message. השלב הנוכחי מודגש.
בקר אחד עובר בין העלייה הראשונה לעלייה מאוחרת יותר של אותו instance. בעלייה מאוחרת, כל מודול שרץ פעם אחת לכל instance מסומן "מדולג"; bootcmd ו-final_message עדיין רצים.
נסו בכלי
מה לא מכוסה כאן
בגרסאות ישנות של cloud-init היחידה של שלב Network נקראת cloud-init.service. Boothooks, vendor-data ו-part-handlers לא מוצגים, ו-manual_cache_clean משנה את האופן שבו עלייה ראשונה מזוהה.
עמודים קשורים
מקורות
האופן שבו ANAROQ מתעד מקורות לנתונים ולמספרים מתואר במתודולוגיה. למתודולוגיה