בהתחשב בצורך בבניית תשתית במהלך מספר סביבות ובהבטחת סטנדרטיזציה וניהול יעיל, נעשה חשוב לספק את הסביבות באופן בטוח. על מנת להשיג את זה, חשוב לאמץ גישה של תשתית בלתי-משנהת, בה הסביבות מסופקות כקוד.
המטרה של המאמר הזה היא להדגים גישה אפשרית להשיג זאת על-ידי שימוש במבנהים של GitLab כדי לאלץ טבלאות וסטנדרטים, בעזרת Terraform כדי ליישם ולשמר סטנדרטים על שרתים, ובעזרת Ansible לספק ולהגדיר תוכנה, בשימוש במודל שיתוף על ידי אחד בתי-האקסיבורים. כדי לנהל את מצב המכונות בעזרת Terraform, אנחנו משתמשים ב MinIO, בגלל שהוא מאפשר את היישום הזה במקום.
עיצוב הארכיטקטורה

שלב 1
התהליך תמיד מתחיל על-ידי הגשת בעיה סטנדרטית, בה ספציפיות השימוש במודל הסירה, האם דרושה רישיון מגינה על השרת, והאם זה בניית חדשה או רק עידכון משאבים.
שלב 2
המפעיל מסקור את הבעיה ומתחיל את התהליך. כל השיחות והזמן השקיע מתעד בתוך הבעיה.
שלב 3
מיזם חדש מופעל ב GitLab על בסיס התשתית שייצר מהתבנית הזו. המיזם מונח בקבוצה המתאימה ב GitLab, בה הוא משתרע את המשתנות הסטנדרטיות הדרושות ליצירת תשתית סטנדרטית.
שלב 4
כשהמיזם נוצר, צריך רק ל指定 את האינטרנט של התשתית שיוצרה בסביבת הבעיה מסוגלת (KVM, VMware). אחרי התכנון עם Terraform, מוצעים את המשאבים הדרושים, כולל הוספת תגיות אם נדרש, עבור Veeam לבצע חיסון בהתבסס על מדיניות תגיות. אחרי ההשלמה, מאחסן באגרה את מצב התשתית הנוצרה.
שלב 5
השלב הבא מרכז על ביצוע משימות סטנדרטיות עבור כל השרתים, כמו זיהוים אותם, עדכונים לפקים, התקנת היישומים הנחוצים, והרשמה של המארח ב Zabbix עבור השגחה בסיסית על המערכת העיסקית והשיבק. לפי קבוצת המשאבים, מיועדים מפתחות גישה מתאימים לצוותים האחראיים. לדוגמה, מנהלי בases מקבלים מפתחות גישה עבור שרתי בסיסים.
שלב 6
על ידי הבחירה במודל המוצע, מבצעים את תהליך התקנה וההגדרה של כל הערמה. בדומה, מועצמים מוצעים, ומידע פרטי מועצמים נרשמים ב Vault במקרה נדרש.
שלב 7
עם היישומה הנוכחית מופעלת בסביבה החדשה, ניתן לבצע מעקבות ספציפיות עבור כל ערימה, בעזרת רשימת השרת החדש בקונסול. פרומתהיוס, במקביל, מזהה את המקומות בהם הוא צריך לאסוף מידע. לכל ערימה יש מעבדת השימוש במעקבות שמוגדרת בראש, וההבדל הוא רק בשם הפרוייקט שנוצר.
שלב 8
התשתית החדשה נסגלת לבקשן. במקרה של בases, מידע הפרטים ניתן באופן ישיר בואלקטורים בואלקטורים.
מבנה הפרוייקט
המבנה הארגון בגיטלאב מארגון כך:
- /infrastructure/: קבוצת הגוף, בה צריכים להאחסן הם משתני הסביבה הגלובליים והערכים הבריריים.
- /infrastructure/gitlab-models: מודלי העגילה, בהם ישנם שני פרוייקטים עיקריים
- ansible-pipelines: פרוייקט שמושקע בשימוש בערימות וברכיבת תפקידים.
בתמונה העליונה, אנו רואים דוגמה למשימות משותפות. במבנה, היא ממוקמת במסלול:/infrastructure/gitlab-models/ansible-pipelines/common-task/provision.yml
- terraform-pipelines: עגילות למודלים התשתיות הזמינים, כמו vSphere, KVM, AWS ועוד.
בתמונה העליונה, יש לנו דוגמא לערך שנמצא בתוך קבוצת terraform-pipelines, כמו kvm-terraform-pipeline.yml
. כפי שאנחנו יכולים לראות, זוהי מודל של GitLab CI שאמור להתרחב בערך של שירוף ערכים.
- /infrastructure/templates: בקבוצה הזו, יש לנו הפרוייקטים המבואיים, שישמשו ליצירת הערכים של השירוף.
- /infrastructure/provision/ansible/roles: בפרוייקט הזה, יש רק תפקידים של Ansible, שמאפשרים לנו למרוצץ ולעדכן את התפקידים בדרך אינטגרלית.
- /infrastructure/dependencies-iac: במאגר הזה נמצאים התלויות הפלטפורמה, כמו דוקרפים לTerraform וAnsible, שמובטחים שהגרסאות של הכלים והספקים הנחוצים לא יישנות.
- /infrastructure/modules/: המודלים האותים שנוצרו לTerraform נאחסים במאגר זה, ולכל פרוייקט יש את התיקייה המייצגת אותו.
- /infrastructure/on-premise/: בקבוצה הזאת מתחזקים ומורחבים התשתיות הנוצרות, והם מחולקים על פי סביבה, מרכז נתונים, ערך, ופרוייקט. בתמונה, אנחנו יכולים לראות את המעמד של הקבוצות והתתקופות הבאות עד לפרוייקט הסופי. בכל אחת מהרמות האלה, אנחנו יכולים לשנות את הערכים הקשורים בקבוצות.
issues-ops: ברשימה הזו יש מודל בעיה שניתן לבחור אחר צרכים ספציפיים. בדרך
ברגע שהבעיה נוצרת, הצוות DevSecOps יכול להתחיל בהגדרת הסביבה. כדי לעשות זאת, הם פשוט צריכים לנווט לקבוצה המתאימה, במקרה זה, infrastructure/on-premise/staging/dc1/loadbalancer/nginx, וליצור פרוייקט חדש על פי שלט. הם אז צריכים לספק את שמת הפרוייקט שייצורו ולהעניק את המשתנים הנחוצים.
בתבנית כלשהי, הקובץ .gitlab-ci.yml
הנחוץ ליצירת הסביבה היא כבר מורכבת. במקרה של NGINX, היא מוגדרת בצורה זו.
בהגדרה זו, גם השיווקים ליצירת המערכת והשיווקים לAnsible כבר בודקים, וזה מובטח שה rolls הבריריים כבר מוטעות בתוך הפרוייקטים האלה. בנוסף, אנחנו מספקים שלבים להרחבת המודל. אם צריך להתקין rolls נוספים, ניתן פשוט להוסיף את החלק המתאים, וזה מאפשר גישה מודולירית, בסגנון בלוקים בניה.
בתמונה בתחתית, אנחנו רואים את הערימה שבה התנהלה הייצור של הסביבה הבקשית. תשמעו שauthorized_keys
וcommon
ניצרו, למרות שהם לא נצרעו במונחים פשוטים ב .gitlab-ci.yml
. זה בגלל שיש לנו rolls סטנדרטיים שמגיעים משלט האנסיבל הניצר, וזה מוודא שה rolls הבריריים מוישמים על מנת כל הפרוייקטים.
סיכום
הפלטפורמה הבסיסית תרמתה בעיקר לשמירה ולאמץ הנחות מפתח בגלל שהיא דורשת מודל מוגדר מראש שצריך להתכונן, לבדיקה, ליישם ולהפוך לשיטת דפוס לפני שהיא יכולה להיות יצרנית לתשתית חדשה. התהליך הזה מובטח שבכל פעם שאנחנו צריכים לספק משאבים בסביבה, אנחנו מקבלים סטנדרטים מהימנים, ניסוי הגדלה בסביבות אלה, ומוודאים שהם יכולים להישנות באמצעות הרעיון הזה אם זה נדרש.
אחד האתגרים העיקריים הוא לשמור על המודלים עדכנים ומואמדים, בעיקר כשהיישומים מתפתחים וגרסאות המערכת העיסקית משתנות. חשוב לזכור שבשימוש בתשתית כקוד, כל השינויים צריכים להיות באמצעותה, וזה מובטח את הסדרה הגדולה של ההגדרות והביטוי האבידני של הסביבה. כשזה לא מבצע את זה, יכולה להיות הפלטפורמה משחזרת את הסביבה למצב המוגדר, שיכול להחמיץ שינויים ידניים.
המודל הנוסף שנעשה במאמר זה גיוסטי, וישים לב שהוא יישאר נכון גם לסביבות פנימיות ולסביבות רבות-ענן, וזה מוביל פתרון יעיל לתשתיות היברידיות.
Source:
https://dzone.com/articles/implement-an-iac-platform-with-terraform-ansible-gitlab