התקנה של kubectl והגדרת גישה לאשכול

בדף הזה מוסבר איך להתקין את כלי שורת הפקודה kubectl שמשמש לניהול אשכולות Google Kubernetes Engine ‏ (GKE) ולגישה אליהם. ההגדרה נדרשת אם מפעילים כמה אשכולות ב-kubectl. Cloud de Confiance by S3NS

תלמדו את הנושאים הבאים:

הדף הזה מיועד לאדמינים של IT, למפעילים ולמפתחים שמגדירים, מנטרים ומנהלים תשתית ענן, כולל הקצאה והגדרה של משאבי ענן. מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שמוזכרים במסמכי התיעוד זמין במאמר תפקידי משתמשים נפוצים ומשימות ב-GKE. Cloud de Confiance by S3NS

לפני שקוראים את הדף הזה, חשוב לוודא שמכירים את Kubernetes kubectl.

לפני שמתחילים

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

  • מפעילים את ממשק ה-API של Google Kubernetes Engine.
  • הפעלת Google Kubernetes Engine API
  • אם רוצים להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את ה-CLI של gcloud. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.
  • מוודאים שיש לכם אשכול קיים במצב Autopilot או במצב Standard. כדי ליצור אשכול חדש, אפשר לעיין במאמר בנושא יצירת אשכול Autopilot.

התקנת kubectl

אפשר להתקין את kubectl באמצעות Google Cloud CLI או מנהל חבילות חיצוני, כמו apt או yum.

gcloud

  1. מתקינים את הרכיב kubectl:

    gcloud components install kubectl
    
  2. כדי לוודא ש-kubectl מותקן, בודקים אם מותקנת הגרסה העדכנית ביותר:

    kubectl version --client
    

apt

  1. מוודאים שמאגר cloud-sdk קיים:

    grep -rhE ^deb /etc/apt/sources.list* | grep "cloud-sdk"

    הפלט אמור להיראות כך:

    deb  [signed-by=/usr/share/keyrings/cloud.google.gpg]  https://packages.cloud.google.com/apt cloud-sdk main
    
  2. אם מאגר cloud-sdk לא מופיע ברשימה, מתקינים את ה-CLI של gcloud.

  3. מתקינים את הרכיב kubectl:

    apt-get update
    apt-get install -y kubectl
  4. כדי לוודא ש-kubectl מותקן, בודקים אם מותקנת הגרסה העדכנית:

    kubectl version --client

yum

  1. מוודאים שמאגר cloud-sdk קיים:

    yum repolist | grep "google-cloud-sdk"

    הפלט אמור להיראות כך:

    google-cloud-sdk    Google Cloud SDK    2,205
    
  2. מתקינים את הרכיב kubectl:

    yum install -y kubectl
  3. כדי לוודא ש-kubectl מותקן, בודקים אם מותקנת הגרסה העדכנית ביותר:

    kubectl version --client

התקנת פלאגינים נדרשים

kubectl ולקוחות אחרים של Kubernetes דורשים פלאגין אימות, gke-gcloud-auth-plugin, שמשתמש במסגרת Client-go Credential Plugins כדי לספק אסימוני אימות לתקשורת עם אשכולות GKE.

לפני שגרסה 1.26 של Kubernetes תופץ, ה-CLI של gcloud יתחיל לדרוש שהקובץ הבינארי gke-gcloud-auth-plugin יהיה מותקן. אם הפלאגין לא מותקן, התקנות קיימות של kubectl או של לקוחות Kubernetes מותאמים אישית אחרים מפסיקות לפעול.

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

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

gke-gcloud-auth-plugin --version

אם בפלט מוצג מידע על הגרסה, דלגו על הקטע הזה.

אפשר להתקין את תוסף האימות באמצעות ה-CLI של gcloud או מנהל חבילות חיצוני כמו apt או yum.

gcloud

מתקינים את הקובץ הבינארי gke-gcloud-auth-plugin:

  gcloud components install gke-gcloud-auth-plugin

apt

מתקינים את הקובץ הבינארי gke-gcloud-auth-plugin:

  apt-get install google-cloud-sdk-gke-gcloud-auth-plugin

yum

מתקינים את הקובץ הבינארי gke-gcloud-auth-plugin:

  yum install google-cloud-sdk-gke-gcloud-auth-plugin

מאמתים את ההתקנה של הקובץ הבינארי gke-gcloud-auth-plugin:

  1. בודקים את הגרסה הבינארית של gke-gcloud-auth-plugin:

    gke-gcloud-auth-plugin --version
    
  2. מעדכנים את ההגדרה של kubectl כדי להשתמש בפלאגין:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION
    

    מחליפים את מה שכתוב בשדות הבאים:

    • CLUSTER_NAME: השם של האשכול.
    • CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור זמין לאשכולות אזוריים.
  3. מריצים את הפקודה הבאה כדי לוודא שההגדרה תקינה:

    kubectl get namespaces
    

    הפלט אמור להיראות כך:

    NAME              STATUS   AGE
    default           Active   51d
    kube-node-lease   Active   51d
    kube-public       Active   51d
    kube-system       Active   51d
    

מידע נוסף על הפלאגין הזה זמין ב-Kubernetes KEP.

אינטראקציה עם kubectl

ב-Kubernetes נעשה שימוש בקובץ YAML שנקרא kubeconfig כדי לאחסן את פרטי האימות של האשכול עבור kubectl. כברירת מחדל, הקובץ נשמר במיקום $HOME/.kube/config.

kubeconfig מכיל קבוצה של פרמטרים של גישה שנקראת contexts. כל הקשר מכיל אשכול Kubernetes, משתמש ומרחב שמות אופציונלי שמוגדר כברירת מחדל. ‫kubectl מתייחס להקשרים כשמריצים פקודות.

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

  • בוחרים את האשכול שאליו kubectl מתקשר.
  • מגדירים את האשכול שמוגדר כברירת מחדל ל-kubectl על ידי הגדרת ההקשר הנוכחי בקובץ kubeconfig.
  • מריצים פקודות kubectl מול אשכול ספציפי באמצעות הדגל --cluster.

הצגת kubeconfig

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

kubectl config view

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

הצגת ההקשר הנוכחי של kubectl

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

כשיוצרים אשכול באמצעות gcloud container clusters create-auto, נוסף באופן אוטומטי רשומה לקובץ kubeconfig בסביבה שלכם, וההקשר הנוכחי משתנה לאשכול הזה. לדוגמה:

gcloud container clusters create-auto my-cluster
Creating my-cluster...done
Fetching cluster endpoint and auth data.
kubeconfig entry generated for my-cluster

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

kubectl config current-context

פרטי אשכול החנויות של kubectl

כשיוצרים אשכול באמצעות מסוף Cloud de Confiance או באמצעות gcloud CLI ממחשב אחר, קובץ kubeconfig של הסביבה לא מתעדכן. בנוסף, אם חבר בצוות הפרויקט משתמש ב-CLI של gcloud כדי ליצור אשכול מהמחשב שלו, ה-kubeconfig שלו מתעדכן אבל ה-kubeconfig שלכם לא. הרשומה kubeconfig כוללת את אחד מהערכים הבאים:

כדי ליצור הקשר kubeconfig בסביבה שלכם, צריך לוודא שיש לכם הרשאה מסוג container.clusters.get. תפקיד ה-IAM עם ההרשאות המינימליות שכולל את ההרשאה הזו הוא container.clusterViewer.

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

gcloud container clusters get-credentials CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION

מחליפים את מה שכתוב בשדות הבאים:

  • CLUSTER_NAME: השם של האשכול.
  • CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור זמין לאשכולות אזוריים.

יצירת רשומה של kubeconfig באמצעות כתובת IP פנימית של אשכול

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

  • כתובת ה-IP החיצונית (אם הפעלתם את נקודת הקצה החיצונית)
  • כתובת ה-IP הפנימית
  • כתובת ה-DNS (אם הגישה ל-IP מושבתת)

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

  • כדי להשתמש בנקודת הקצה הקנונית כברירת מחדל, מריצים את הפקודה gcloud container clusters get-credentials. הפקודה הזו משתמשת בכתובת ה-IP בשדה endpoint של הגדרות האשכול.

  • כדי להשתמש בנקודת הקצה הפנימית מבוססת ה-IP של האשכול, מריצים את הפקודה הבאה:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --internal-ip
    

    מחליפים את CLUSTER_NAME בשם האשכול.

  • כדי להשתמש בנקודת הקצה מבוססת ה-DNS עבור האשכול, מריצים את הפקודה הבאה:

    gcloud container clusters get-credentials CLUSTER_NAME \
        --dns-endpoint
    

התוכן של קובץ התצורה שנוצר משתנה בהתאם לנקודת הקצה שבה אתם משתמשים כדי להתחבר לאשכול:

  • נקודת קצה מבוססת DNS: מכיוון ששירות ממשק הקצה של Google‏ (GFE) שמארח את נקודת הקצה מבוססת ה-DNS מציג את האישור שנחתם על ידי רשות אישורים ציבורית (CA), הערך kubeconfig לא כולל את השדה certificate-authority-data.
  • נקודות קצה מבוססות IP: שרת ה-API מציג אישור שחתום על ידי CA בסיסי של האשכול, ולכן הרשומה kubeconfig כוללת את השדה certificate-authority-data. השדה הזה מכיל את האישור הציבורי של ה-CA הבסיסי של האשכול בקידוד base-64. הלקוחות יכולים להשתמש בו כדי לאמת את אישור שרת ה-API.

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

הגדרת אשכול ברירת מחדל לפקודות של kubectl

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

gcloud container clusters get-credentials CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION

מחליפים את מה שכתוב בשדות הבאים:

  • CLUSTER_NAME: השם של האשכול.
  • CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור זמין לאשכולות אזוריים.

לדוגמה, נניח שיש פרויקט עם שני אשכולות, my-cluster ו-my-new-cluster. ההקשר הנוכחי הוא my-new-cluster, אבל רוצה להריץ את כל הפקודות kubectl על my-cluster. כדי להחליף את ההקשר הנוכחי מ-my-new-cluster ל-my-cluster, מריצים את הפקודה הבאה:

gcloud container clusters get-credentials CLUSTER_NAME \
    --location=CONTROL_PLANE_LOCATION

הפעלת פקודות kubectl ספציפיות באשכול מסוים

כדי להריץ פקודות ספציפיות של kubectl מול אשכול ספציפי, משתמשים ב---cluster=CLUSTER_NAME.

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

kubectl run my-app --image us-docker.pkg.dev/my-project/my-repo/my-app:1.0 --cluster my-new-cluster

המאמרים הבאים