כיצד להתקין תוכנה על אשכולות Kubernetes עם מנהל החבילות Helm 3

הקדמה

Helm הוא מנהל חבילות עבור Kubernetes שמאפשר למפתחים ולמפעילים להגדיר ולהשתיל אפליקציות בצורה יותר קלה על קבוצות Kubernetes.

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

במדריך זה, תגדיר את Helm 3 ותלמד איך להתקין, לשדרג, לגלול אחורה ולנהל תרשימים והפצות. תלמד גם ליצור ולארוז תרשימים משלך, וגם להגדיר מאגרי תרשימים, שמארחים תרשימים שניתן להתקין מיידית.

דרישות מוקדמות

  • אשף Kubernetes עם בקרת גישה מבוססת תפקידים (RBAC) מופעלת. למידע נוסף על הוצאות, ניתן לבדוק את העמוד של הוצאות ב-Helm.

  • הכלי שורת הפקודה kubectl מותקן על המכונה המקומית שלך, מוגדר להתחברות לקבוצה שלך. ניתן לקרוא עוד על התקנת kubectl בתיעוד הרשמי.

    ניתן לבדוק את החיבור שלך עם הפקודה הבאה:

    1. kubectl cluster-info

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

    1. kubectl config get-contexts

    הפלט יציג את התצורות הזמינות:

    פלט
    CURRENT NAME CLUSTER AUTHINFO NAMESPACE * do-fra1-helm3-example do-fra1-helm3-example do-fra1-helm3-example-admin

    כאן, האסטריק (*) מציין שאנחנו מחוברים לקבוצת do-fra1-helm3-example. כדי להחליף קבוצות, הרץ:

    1. kubectl config use-context שם-ההקשר

כאשר אתה מחובר לאשכול הנכון, המשך לשלב 1 כדי להתחיל בהתקנת Helm.

שלב 1 — התקנת Helm 3

בסעיף זה, תפקידך יהיה להתקין את Helm 3 באמצעות סקריפט השורת פקודה המסופק באופן רשמי.

התחל על ידי ניווט לתיקייה /tmp, שם תאחסן את סקריפט ההתקנה על ידי הרצת:

  1. cd /tmp

הורד את הסקריפט עם הפקודה הבאה:

  1. curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3

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

הגדר את ההרשאות שלו להיות יציבות על ידי הגדרת הרשאותיו ל:

  1. chmod u+x get_helm.sh

לבסוף, הריצו את הפקודה הבאה כדי להתקין את Helm 3:

  1. ./get_helm.sh

תקבלו פלט דומה למה שלמטה:

Output
Downloading https://get.helm.sh/helm-v3.5.2-linux-amd64.tar.gz Verifying checksum... Done. Preparing to install helm into /usr/local/bin helm installed into /usr/local/bin/helm

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

שלב 2 – הגדרת כרטיסי מחסור

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

כדי לעזור לכם למצוא את המאגר הנכון, ניתן להשתמש ב־ArtifactHub.io, אתר קוד פתוח שמנוהל על ידי CNCF שמפנה קטלוג של כרטיסי Helm והמאגרים שלהם. הוא גם מעקב אחר כרטיסים פופולריים ושימושיים שפרויקטים אחרים של CNCF משתמשים בהם, לכן הוא שונה מהמאגר ה־stable שגרסאות קודמות של Helm עבדו ממנו. עבור פרויקטים נפוצים, כמו כניסות Nginx או כלים לניטור, זהו מקור מצוין.

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

תתקין את הגרסה הקהילתית בניהול הקוברנטס. חפש את ingress-nginx כדי למצוא אותה בתוצאות שלך. בחר בה כדי לגשת אל דף המידע שלה.

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

ניתן ללחוץ על הכפתור הכחול ליד פקודה כדי להעתיק אותה. עשה זאת לפקודה הראשונה, והרץ אותה:

  1. helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx

כדי להוסיף מאגר ל־Helm, עליך להריץ את helm repo add. הפרמטרים שהוא מקבל הם שם המאגר והמיקום שלו.

הפלט יהיה:

Output
"ingress-nginx" has been added to your repositories

כאשר אתה מוסיף מאגר חדש, עליך לעדכן את Helm על ידי הרצת:

  1. helm repo update

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

Output
Hang tight while we grab the latest from your chart repositories... ...Successfully got an update from the "ingress-nginx" chart repository Update Complete. ⎈Happy Helming!⎈

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

שלב 3 — מתקין תרשים של Helm

במקטע הקודם, הוספת את המאגר עבור תרשים ה־ingress-nginx. כעת תתקין אותו בקבוצת הקלאסטר שלך.

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

  1. helm show values chart_name

כדי להציג את המשתנים הזמינים עבור ingress-nginx, החלף את chart_name:

  1. helm show values ingress-nginx/ingress-nginx

הפלט יהיה ארוך ויציג את תוכן values.yaml עבור ingress-nginx.

כדי להתקין תרשים, ניתן להשתמש ב־helm install:

  1. helm install release_name repository/chart_name

A release is a deployed instance of the chart, and here you’re calling it ingress-nginx.

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

  1. helm install ingress-nginx/ingress-nginx --set variable_name=variable_value

ניתן לחזור על --set עבור כמה משתנים שנדרש. מאחר שאנו לא נבצע אישור כעת, ניתן להתקין כך כמו שהוא על ידי הרצת:

  1. helm install ingress-nginx ingress-nginx/ingress-nginx

הפלט יהיה דומה למה שלמטה:

Output
NAME: ingress-nginx LAST DEPLOYED: Wed Feb 24 10:12:37 2021 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: The ingress-nginx controller has been installed. It may take a few minutes for the LoadBalancer IP to be available. You can watch the status by running 'kubectl --namespace default get services -o wide -w ingress-nginx-controller' ...

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

כדי לבדוק את התרשימים שהופעלו, ניתן להשתמש ב־helm list:

  1. helm list

תמצא כי ingress-nginx הוא התרשים היחיד שהופעל כרגע:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ingress-nginx default 1 2021-02-24 10:12:37.281049711 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0

ניתן למצוא את השירותים שיש לך באשכול שלך על ידי הרצת:

  1. kubectl get services

הפלט יהיה דומה לזה:

Output
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer 10.245.211.81 46.101.68.67 80:30704/TCP,443:30700/TCP 7m19s ingress-nginx-controller-admission ClusterIP 10.245.50.17 <none> 443/TCP 7m19s kubernetes ClusterIP 10.245.0.1 <none> 443/TCP 83m

עכשיו שהגעת לשחרור באשכול שלך, תשנה את התצורה שלו במהלך השחרור.

שלב 4 — עדכון שחרור

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

התרשים ingress-nginx מספק את המשתנה controller.replicaCount ששולט במספר הפודים של הקונטרולר ששוחררו. בברירת מחדל, הוא מוגדר לאחד, כמו שתוכל לוודא ברשימת הפודים הזמינים:

  1. kubectl get pods

תמצא שיש רק אחד:

Output
NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 12m

אם ברצונך לשחרר עוד כדי לקבל גומלין (לדוגמה, שלושה), תוכל להשתמש בפקודת upgrade ולהגדיר את המשתנה ל-3 על ידי הרצת:

  1. helm upgrade ingress-nginx ingress-nginx/ingress-nginx --set controller.replicaCount=3 --reuse-values

כמו כן, תעביר --reuse-values, שמורה ל-Helm לבצע את השינויים שלך בעקבות השחרור שנשחרר, ולשמור על ההגדרה הקודמת.

בפלט, Helm יגביר את התיקון כדי לסמן כי השחרור עודכן:

Output
NAME: ingress-nginx LAST DEPLOYED: Wed Feb 24 12:07:54 2021 NAMESPACE: default STATUS: deployed REVISION: 2 TEST SUITE: None NOTES: ...

ניתן לרשום את הפודים הזמינים על ידי הרצת:

  1. kubectl get pods

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

Output
NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7fc74cf778-4hk9g 1/1 Running 0 18s ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 22m ingress-nginx-controller-7fc74cf778-wz595 1/1 Running 0 18s

הבא תגלגל אחורה את השינויים ותמחק את השחרורים לגמרי.

שלב 5 — גלגול חזרה ומחיקת שחרור

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

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

כדי לגלגל חזרה של שחרור, עליך להשתמש ב־helm rollback:

  1. helm rollback release_name release_revision

תוכל להשתמש בו כדי לבטל את השינויים שביצעת ל־ingress-nginx על ידי גלגול חזרה לגרסה 1:

  1. helm rollback ingress-nginx 1

תקבל את הפלט הבא, המציין שהפעולה הייתה מוצלחת:

Output
Rollback was a success! Happy Helming!

תוכל לבדוק את הגרסה הנוכחית על ידי רשימת השחרורים:

  1. helm list

תגלה כי הגרסה כעת היא 3, ולא 1:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION ingress-nginx default 3 2021-02-24 12:43:21.523664768 +0000 UTC deployed ingress-nginx-3.23.0 0.44.0

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

  1. kubectl get pods

תגלה כי יש רק אחד:

Output
NAME READY STATUS RESTARTS AGE ingress-nginx-controller-7fc74cf778-kjtst 1/1 Running 0 41m

כדי למחוק שחרור ואת כל הגרסאות שלו, תוכל להשתמש ב־helm delete:

  1. helm delete release_name

מכיוון שאין עוד צורך בו, נא למחוק את ingress-nginx באמצעות הפקודה הבאה:

  1. helm delete ingress-nginx

הפלט יהיה:

Output
release "ingress-nginx" uninstalled

ניתן לרשום את השחרורים כדי לוודא שאין שום אחד:

  1. helm list

הטבלה הפלטה לא תכיל שורות:

Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION

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

שלב 6 — (אופציונלי) יצירת תרשימים מותאמים אישית

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

תיצרו תרשים חדש בשם example-chart. הריצו את הפקודה הבאה כדי ליצור אותו:

  1. helm create example-chart

זה ייצור ספריית חדשה בשם example-chart עם הקבצים והמבנה הבאים:

example-chart/
charts/
templates/
├─ tests/
│  ├─ test-connection.yaml
├─ deployment.yaml
├─ hpa.yaml
├─ ingress.yaml
├─ NOTES.txt
├─ service.yaml
├─ serviceaccount.yaml
├─ _helpers.tpl
Chart.yaml
values.yaml

ההגדרות של המשאב שהתרשים שלך יתקין באשכולות היעד נמצאות בתיקיית templates. ההגדרות הברירת מחדל שיצר Helm כנקודת התחלה מאפשרות להפעיל בקר Ingress של Nginx. אף על פי שסיומת הקובץ היא YAML, הם משתמשים בתחביר הטמפלטים של Go כדי להישאר ניתנים להתאמה באמצעות משתנים חשופים שאתה יכול לעבור. ניתן לאמת זאת על ידי הצגת תוכן של service.yaml על ידי הרצת:

  1. cat example-chart/templates/service.yaml

תמצאו כי יש לו הפניות טמפלט ליצירת ערכים שסובבים בסוגריים כפולים:

Output
apiVersion
: v1 kind: Service metadata: name: {{ include "mychart.fullname" . }} labels: {{- include "mychart.labels" . | nindent 4 }} spec: type: {{ .Values.service.type }} ports: - port: {{ .Values.service.port }} targetPort: http protocol: TCP name: http selector: {{- include "mychart.selectorLabels" . | nindent 4 }}

המשתנים שהוזכרו חשופים למשתמש ומוגדרים ב־values.yaml. הטקסט NOTES שHelm מציג לאחר ההתקנה מאוחסן ב־NOTES.txt, וכן נטמפל. מטא-נתוני התרשים, כגון שם, גרסה, וגרסת התוכנה שמותקנת, מפורטים ב־Chart.yaml:

example-chart/Chart.yaml
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes

...
type: application

...
version: 0.1.0

...
appVersion: "1.16.0"

כדי לבדוק מה Helm ינסה להתקין, ניתן לעבור ב־--dry-run ו־--debug ל־helm install ולצבוע לתיקיית התרשים:

  1. helm install example-chart --dry-run --debug ./example-chart

הפלט יהיה ארוך ויכיל את כל ההגדרות הסופיות של המשאבים שיתווספו לאשן העבודה שלך. בעוד שאתה עובד על התרשים שלך, אפשר להשתמש ב־helm upgrade כדי להעלות גרסאות חדשות ל־Kubernetes.

כאשר הגיע הזמן לשתף את התרשים המוכן שלך, ניתן לארוז אותו להפצה על ידי הרצת:

  1. helm package ./example-chart

הפלט יהיה:

Output
Successfully packaged chart and saved it to: .../example-chart-0.1.0.tgz

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

  1. helm install example-chart example-chart-0.1.0.tgz

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

מסקנה

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

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-software-on-kubernetes-clusters-with-the-helm-3-package-manager