באמצעות הלם וקוברנטס

1. סקירה כללית

הלם הוא מנהל חבילות ליישומי Kubernetes. במדריך זה נבין את יסודות הלם וכיצד הם מהווים כלי רב עוצמה לעבודה עם משאבי Kubernetes.

במהלך השנים האחרונות קוברנטס גדלה מאוד, וכך גם המערכת האקולוגית שתומכת בה. לאחרונה הוכרז על הלם כפרויקט דגירה של קרן Cloud Native Computing (CNCF), שמראה את הפופולריות הגוברת שלו בקרב משתמשי Kubernetes.

2. רקע

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

  1. מְכוֹלָה: מיכל מתייחס לווירטואליזציה ברמת מערכת ההפעלה. מכולות מרובות פועלות בתוך מערכת הפעלה במקומות משתמש מבודדים. לתוכניות הפועלות בתוך מיכל יש גישה רק למשאבים שהוקצו למכולה.
  2. Docker: Docker היא תוכנית פופולרית ליצירה והפעלה של מכולות. זה מגיע עם Docker Daemon, שהיא התוכנית הראשית שמנהלת מכולות. Docker Daemon מציע גישה לתכונות שלו באמצעות Docker Engine API, המשמש את ממשק שורת הפקודה של Docker (CLI). אנא עיין במאמר זה לתיאור מפורט יותר של Docker.
  3. קוברנטס: Kubernetes היא תוכנית פופולרית לתזמורת מכולות. למרות שהוא נועד לעבוד עם מכולות שונות, משתמשים בדרך כלל ב- Docker. הוא מציע מבחר רחב של תכונות כולל אוטומציה של פריסה, קנה מידה ופעולות על פני מקבץ מארחים. יש מאמר זה סיקור מעולה של קוברנטס לצורך התייחסות נוספת.

3. אדריכלות הגה

להלם יש ארכיטקטורה פשוטה למדי, המורכבת מלקוח ושרת באשכולות:

  • שרת טילר: הלם מנהל את יישום Kubernetes באמצעות רכיב שנקרא Tiller Server מותקן בתוך אשכול Kubernates. Tiller מקיים אינטראקציה עם שרת ה- API של Kubernetes להתקנה, שדרוג, שאילתה והסרת משאבי Kubernetes.
  • לקוח הלם: הלם מספק ממשק שורת פקודה למשתמשים לעבוד עם תרשימי הלם. לקוח הלם אחראי על אינטראקציה עם שרת הטילר לביצוע פעולות שונות כמו התקנת, שדרוג ותרשימי החזרה.

4. טבלאות הגה

הלם מנהל חבילות משאבים של Kubernetes באמצעות תרשימים.

נראה עוד על תרשימים כשאנחנו יוצרים אותם בקרוב, אך לעת עתה, תרשים אינו אלא סט מידע הנחוץ ליצירת יישום Kubernetes, בהינתן אשכול Kubernetes:

  • א תרשים הוא אוסף קבצים מאורגן במבנה ספרייה ספציפי
  • מידע התצורה הקשור לתרשים מנוהל בתצורה
  • סוף כל סוף, מופע פועל של תרשים עם תצורה ספציפית נקרא שחרור

5. הגדרה

נצטרך להגדיר מראש כמה דברים כדי שנפתח את תרשים ההגה הראשון שלנו.

ראשית, כדי להתחיל לעבוד עם הלם, אנו זקוקים לאשכול Kubernetes. לצורך הדרכה זו נשתמש Minikube, המציעה דרך מצוינת לעבוד עם מקבץ Kubernetes בצומת יחיד באופן מקומי. ב- Windows, כעת ניתן להשתמש ב- Hyper-V כ- Hypervisor המקורי להפעלת Minikube. עיין במאמר זה להבנת הגדרת Minikube בפרטים נוספים.

ונצטרך יישום בסיסי לניהול באשכול Kubernetes. לצורך הדרכה זו, נשתמש ביישום Spring Spring פשוט הארוז כמיכל Docker. לתיאור מפורט יותר של אריזת יישום כזה כמיכל Docker, עיין במאמר זה.

6. התקנת ההגה

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

באמצעות Chocolaty, זוהי פקודה פשוטה בשורה אחת להתקין את הלם:

choco להתקין kubernetes-helm

זה מתקין את לקוח ההלם באופן מקומי.

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

מידע על אשכול kubectl

ואז נוכל לאתחל את ההלם באמצעות ה- Helm CLI עצמו:

ראש ההגה

7. פיתוח התרשים הראשון שלנו

כעת אנו מוכנים לפתח את תרשים ההגה הראשון שלנו עם תבניות וערכים.

7.1. יצירת תרשים

Helm CLI, שהתקנו קודם, הוא די שימושי ביצירת תרשים:

ההגה ליצור שלום עולם

שים לב כי שם התרשים המופיע כאן יהיה שם הספרייה בה נוצר התרשים ומאוחסנים.

בואו נראה במהירות את מבנה הספריות שנוצר עבורנו:

שלום עולם / Chart.yaml ערכים.yaml תבניות / תרשימים / .helmignore

בואו להבין את הרלוונטיות של קבצים ותיקיות אלה שנוצרו עבורנו:

  • Chart.yaml: זהו הקובץ הראשי שמכיל את תיאור התרשים שלנו
  • ערכים.יאמל: זהו הקובץ המכיל את ערכי ברירת המחדל עבור התרשים שלנו
  • תבניות: זו הספרייה בה מוגדרים משאבי Kubernetes כתבניות
  • תרשימים: זוהי ספריה אופציונאלית שעשויה להכיל תרשימי משנה
  • .הלימיניור: זה המקום בו אנו יכולים להגדיר דפוסים להתעלם מהם בעת האריזה (דומה בקונספט ל- .gitignore)

7.2. יצירת תבנית

אם נראה בתוך ספריית התבניות, נבחין בכך כמה תבניות למשאבי Kubernetes נפוצים כבר נוצרו בשבילנו:

שלום עולם / תבניות / deployment.yaml service.yaml ingress.yaml ......

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

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

בואו נערוך את הקובץ deployment.yaml בתוך ה תבניות המדריך להיראות כמו:

apiVersion: אפליקציות / v1 סוג: מטא נתונים לפריסה: שם: {{כולל "שלום-עולם. fullname". }} תוויות: app.kubernetes.io/name: {{כוללות "hello-world.name". }} helm.sh/chart: {{כוללים "שלום-עולם. תרשים". }} app.kubernetes.io/instance: {{.Release.Name}} app.kubernetes.io/managed-by: {{.Release.Service}} מפרט: העתקים: {{.Values.replicaCount}} בורר: matchLabels: app.kubernetes.io/name: {{כוללים "hello-world.name". }} תבנית app.kubernetes.io/instance: {{.Release.Name}}: מטא נתונים: תוויות: app.kubernetes.io/name: {{כוללות "hello-world.name". }} app.kubernetes.io/instance: {{.Release.Name}} מפרט: מכולות: - שם: {{.Chart.Name}} תמונה: "{{.Values.image.repository}}: {{. Values.image.tag}} "יציאות imagePullPolicy: {{.Values.image.pullPolicy}}: - שם: container container http: פרוטוקול 8080: TCP

באופן דומה, בואו נערוך את הקובץ service.yaml להראות כמו:

apiVersion: v1 kind: מטא נתונים של שירות: שם: {{כוללים "שלום-עולם. fullname". }} תוויות: app.kubernetes.io/name: {{כוללות "hello-world.name". }} helm.sh/chart: {{כוללים "שלום-עולם. תרשים". }} app.kubernetes.io/instance: {{.Release.Name}} app.kubernetes.io/managed-by: {{.Release.Service}} מפרט: סוג: {{.Values.service.type}} יציאות: - יציאה: {{.Values.service.port}} targetPort: פרוטוקול http: שם TCP: http בורר: app.kubernetes.io/name: {{כולל "hello-world.name". }} app.kubernetes.io/instance: {{.Release.Name}}

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

הלם עושה שימוש בשפת התבנית Go ומרחיב אותה למשהו שנקרא שפת תבנית Helm. במהלך ההערכה, כל קובץ בתוך ספריית התבניות מוגש למנוע התבנית. זה המקום בו הנחיית התבניות מזריקה ערכים בפועל בתבניות.

7.3. מתן ערכים

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

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

אנחנו יכולים להשתמש בקובץ ערכים.יאמל בתרשים שלנו להעביר ערכים למנוע התבנית של התבניות דרך ערכי האובייקט המובנים. בואו לשנות את ערכים.יאמל להראות כמו:

replicaCount: תמונה אחת: מאגר: "שלום עולם" תג: "1.0" pullPolicy: שירות IfNotPresent: סוג: יציאת NodePort: 80

עם זאת, שים לב כיצד ניתן היה לגשת לערכים אלה בתוך תבניות באמצעות נקודות המפרידות בין מרחבי שמות. השתמשנו במאגר התמונות והתג כ- "שלום עולם" ו- "1.0", זה חייב להתאים לתג התמונה של העגינה שיצרנו ליישום Spring Boot שלנו.

8. הבנת פקודות ההגה

עם כל מה שנעשה עד כה, אנו מוכנים לשחק עם הגרף שלנו. בואו נראה מהן הפקודות השונות הזמינות ב- Helm CLI כדי להפוך את זה למהנה!

8.1. הלם מוך

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

מחרוזת הגה ./hello-world ==> Linting ./hello-world 1 תרשימים מבודדים, ללא כשלים

8.2 תבנית הגה

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

תבנית ההגה ./hello-world --- # מקור: hello-world / templates / service.yaml apiVersion: v1 kind: metadata service: name: release-name-hello-world labels: app.kubernetes.io/name: hello -world helm.sh/chart: hello-world-0.1.0 app.kubernetes.io/instance: שם שחרור app.kubernetes.io/managed-by: מפרט טילר: סוג: יציאות NodePort: - יציאה: 80 targetPort: פרוטוקול http: שם TCP: http בורר: app.kubernetes.io/name: שלום עולם app.kubernetes.io/instance: שם שחרור --- # מקור: שלום עולם / תבניות / deployment.yaml api גרסה: אפליקציות / סוג v1: מטא נתונים של פריסה: שם: תוויות שחרור-שלום-עולם: app.kubernetes.io/name: שלום-עולם helm.sh/chart: שלום-עולם-0.1.0 app.kubernetes.io/instance: שחרור -name app.kubernetes.io/managed-by: מפרט טילר: העתקים: 1 בורר: matchLabels: app.kubernetes.io/name: שלום-עולם app.kubernetes.io/instance: תבנית שם שחרור: מטא נתונים: תוויות: app.kubernetes.io/name: שלום עולם app.kubernetes.io/instance: שם פרטי שחרור: מכולות: - na אני: שלום עולם תמונה: "שלום עולם: 1.0" imagePullPolicy: יציאות אם לא נוכחות: - שם: http container נמל: 8080 פרוטוקול: TCP

8.3. הגה התקנה

לאחר שנוודא שהתרשים יהיה בסדר, סוף סוף נוכל להריץ פקודה זו להתקנת התרשים באשכול Kubernetes:

helm install - שם שלום עולם ./hello-world שם: שלום עולם הפעם האחרונה: יום שני 25 בפברואר 15:29:59 2019 NAMESPACE: סטטוס ברירת מחדל: משאבים מפוזרים: ==> v1 / שירות שם סוג CLUSTER-IP חיצוני -IP PORT (S) AGE שלום עולם NodePort 10.110.63.169 80: 30439 / TCP 1s ==> v1 / פריסה שם רצוי נכון לעכשיו גיל זמין hello-world 1 0 0 0 1s ==> v1 / Pod (קשור) שם מחדש STATUS RESTARTS AGE hello-world-7758b9cdf8-cs798 0/1 בהמתנה 0 0 שניות

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

8.4. הלם גט

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

helm ls - כל שם ביקורת עדכון תרשים סטטוס אפליקציית גרסת שמות מקום שלום עולם 1 שני פברואר 25 15:29:59 2019 פרוס שלום עולם-0.1.0 1.0 ברירת מחדל

8.5. שדרוג ההגה

מה אם שינינו את התרשים שלנו ונצטרך להתקין את הגרסה המעודכנת? פקודה זו עוזרת לנו לשדרג גרסה לגרסה שצוינה או עדכנית של התרשים או התצורה:

שדרוג ההגה שלום עולם ./hello-world שחרור "שלום עולם" שודרג. הלמינג שמח! הפעם האחרונה: יום שני 25 בפברואר 15:36:04 2019 NAMESPACE: סטטוס ברירת מחדל: משאבים מפוזרים: ==> v1 / שירות שם סוג CLUSTER-IP יציאת IP חיצונית (ים) AGE שלום עולם NodePort 10.110.63.169 80: 30439 / TCP 6m5s ==> v1 / פריסת שם מבוקש זרם עדכני זמין גיל שלום עולם 1 1 1 1 6m5s ==> v1 / פוד (קשור) שם מוכן סטטוס התחלה מחדש שלום שלום-עולם-7758b9cdf8-cs798 1/1 פועל 0 6m4s

8.6. הלם החזרת

תמיד יכול לקרות ששחרור השתבש ויש לקחת אותו בחזרה. זו הפקודה להחזיר גרסה לגרסה הקודמת:

ההגה להחזיר שלום-עולם 1 החזרה הייתה הצלחה! הלמינג שמח!

8.7. מחיקת ההגה

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

מחיקת ההגה - מחק שחרור שלום-עולם "שלום-עולם"

אלה רק חלק מהפקודות הזמינות לעבודה עם תרשימים ומהדורות בהלם.

9. חלוקת תרשימים

אמנם תבניות הן כלי רב עוצמה שהלם מביא לעולם ניהול משאבי Kubernetes, אך זה לא היתרון היחיד בשימוש ב- Helm. כפי שראינו בסעיף הקודם, הלם משמש כמנהל חבילות ליישום Kubernetes והופך את ההתקנה, השאילתות, השדרוג והמחיקה של גרסאות למדי חלקות.

בנוסף לזה, הלם מגיע עם פקודות כחלק מ- CLI שלה לארוז, לפרסם ולהביא יישומי Kubernetes כתרשימים:

9.1. חבילת ההגה

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

חבילת ההגה ./hello-world תרשים ארוז בהצלחה ושמר אותו ב: \ hello-world \ hello-world-0.1.0.tgz

שים לב שהוא מייצר ארכיון במחשב שלך שניתן להפיץ ידנית או דרך מאגרי תרשימים ציבוריים או פרטיים.

9.2. הלם רפו

לבסוף, אנו זקוקים למנגנון לעבודה עם מאגרים משותפים כדי לשתף פעולה. Repo מקבץ חבורה של פקודות שבהן אנו יכולים להשתמש כדי להוסיף, להסיר, לרשום או לאחסן מאגרי תרשימים. בואו נראה איך נוכל להשתמש בהם.

אנו יכולים ליצור מאגר git ולהשתמש בו כדי לתפקד כמאגר התרשימים שלנו. הדרישה היחידה היא שיהיה לה index.yaml קוֹבֶץ.

אנחנו יכולים ליצור index.yaml לרשימת התרשימים שלנו:

אינדקס ריפו של ההגה my-repo / --url //.github.io/my-repo

זה מייצר את index.yaml קובץ, שעלינו לדחוף למאגר יחד עם ארכיוני התרשים.

לאחר יצירת מאגר התרשימים בהצלחה, בהמשך, נוכל להוסיף מרחוק ריפו זה:

רפו רו הוסף את my-repo //my-pages.github.io/my-repo

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

ההגה להתקין את my-repo / hello-world --name = hello-world

ישנן לא מעט פקודות שירות הזמינות לעבודה עם מאגרי תרשימים.

10. מסקנה

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

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

לבסוף, דנו באפשרויות להפצת חבילות הלם דרך מאגרים.


$config[zx-auto] not found$config[zx-overlay] not found