במאמר הזה מוסבר איך ליצור אשכול Kubernetes רגיל באזור מנותק של Google Distributed Cloud (GDC). אשכול רגיל מספק אשכול Kubernetes ברמת הפרויקט, שניתן להגדרה באופן נרחב וכולל קבוצה מינימלית של שירותים מנוהלים. האשכול הרגיל מציע יותר גמישות בהגדרת השירות מאשר האשכול המשותף, אבל גם דורש יותר ניהול. מידע נוסף על אשכולות רגילים זמין במאמר הגדרות של אשכולות Kubernetes.
אשכולות רגילים הם משאבים של תחום מוגדר, ואי אפשר לפרוס אותם על פני כמה תחומים. כדי להפעיל אשכולות ביקום עם כמה אזורים, צריך ליצור אשכולות באופן ידני בכל אזור.
המסמך הזה מיועד לקהלים כמו מפתחי אפליקציות בקבוצת מפעילי האפליקציות, שאחראים על ניהול עומסי העבודה של קונטיינרים בארגון שלהם. מידע נוסף מופיע במאמר קהלים למסמכי תיעוד של GDC עם air gap.
לפני שמתחילים
כדי ליצור אשכול רגיל, צריך לבקש את ההרשאות הנדרשות ולהכין את הסביבה.
בקשת תפקידים ב-IAM
כדי לקבל את התפקידים הבאים, פנו למנהל החשבון הארגוני ב-IAM:
- אדמין IAM של פרויקט (
project-iam-admin): נותנים למשתמשים אחרים את התפקידים שנדרשים כדי לנהל את הגישה באשכולות רגילים. - אדמין של אשכול רגיל (
standard-cluster-admin): יצירת אשכולות רגילים בפרויקט.
התפקידים האלה קשורים למרחב השמות של הפרויקט.
הכנת הסביבה
- מוודאים שיש לכם את ההגדרות המתאימות כדי לגשת לאשכולות רגילים ולנהל אותם. מידע נוסף על ניהול הגישה לאשכולות רגילים
- יוצרים את קובץ ה-kubeconfig של שרת ה-API האזורי כדי לארח את האשכול.
מגדירים את משתנה הסביבה
MANAGEMENT_API_SERVERלנתיב של kubeconfig. למידע נוסף, קראו את המאמר משאבי שרת API לניהול אזורי. - כדאי לעיין במגבלות של האשכולות כדי להבין את השיקולים לגבי המשאבים.
תכנון בלוק ה-CIDR של ה-Pod
כדי להקצות את בלוק ה-CIDR של Pod בגודל המתאים לעומסי העבודה, צריך לחשב את כמות כתובות ה-IP שנדרשות לאשכול Kubernetes לפני שיוצרים אותו. אי אפשר לשנות את רוב הפרמטרים של הרשת אחרי שיוצרים את האשכול.
אשכול Kubernetes פועל לפי הלוגיקה הבאה כשהוא מקצה כתובות IP:
- Kubernetes מקצה לכל אחד מהצמתים בלוק CIDR של
/24שמורכב מ-256 כתובות. הכמות הזו תואמת למספר המקסימלי שמוגדר כברירת מחדל של 110 פודים לכל צומת באשכולות Kubernetes. - הגודל של בלוק ה-CIDR שמוקצה לצומת תלוי בערך המקסימלי של Pods לכל צומת.
- הבלוק תמיד מכיל לפחות פי שניים כתובות מהמספר המקסימלי של Pods לכל צומת.
בדוגמה הבאה מוסבר איך חושב ערך ברירת המחדל של Per node mask size= /24 כדי להכיל 110 Pods:
Maximum pods per node = 110
Total number of IP addresses required = 2 * 110 = 220
Per node mask size = /24
Number of IP addresses in a /24 = 2(32 - 24) = 256
קובעים את מסכת ה-CIDR של pod שצריך להגדיר לאשכול Kubernetes, על סמך מספר הצמתים הנדרש. כשמגדירים את טווח ה-CIDR, כדאי לתכנן מראש הוספה של צמתים לאשכול בעתיד:
Total number of nodes supported = 2(Per node mask size - pod CIDR mask)
בהתאם לערך ברירת המחדל Per node mask size= /24 , בטבלה הבאה ממופה מסכת ה-CIDR של ה-Pod למספר הצמתים הנתמכים.
| מסכת CIDR של Pod | חישוב: 2(גודל מסכה לכל צומת – מסכת CIDR) | המספר המקסימלי של צמתים נתמכים, כולל צמתים של מישור הבקרה |
|---|---|---|
| /21 | (24 - 21)2 | 8 |
| /20 | (24-20)2 | 16 |
| /19 | (24 - 19)2 | 32 |
| /18 | (24 - 18)2 | 64 |
אחרי שמחשבים את בלוק ה-CIDR של הפודים באשכול Kubernetes, מגדירים אותו כחלק מתהליך העבודה ליצירת אשכולות בקטע הבא.
יצירת אשכול רגיל
כדי ליצור אשכול רגיל:
המסוף
בכלי לבחירת פרויקטים, בוחרים את הפרויקט.
אשכולות סטנדרטיים הם משאבים ברמת הפרויקט. אם תבחרו בארגון, תצרו אשכול משותף ברמת הארגון. מידע נוסף זמין במאמר היררכיית המשאבים.
בתפריט הניווט, לוחצים על Kubernetes Engine > Clusters.
לוחצים על Create Cluster.
בשדה Name, נותנים שם לאשכול.
בוחרים את האזור שבו רוצים ליצור את האשכול.
בוחרים את גרסת Kubernetes לאשכול.
לוחצים על הבא.
קובעים את הגדרות הרשת של האשכול. אי אפשר לשנות את הגדרות הרשת האלה אחרי שיוצרים את האשכול. פרוטוקול האינטרנט שמוגדר כברירת מחדל והיחיד שנתמך באשכולות Kubernetes הוא גרסה 4 של פרוטוקול אינטרנט (IPv4).
אם רוצים ליצור צמתים ייעודיים של מאזן עומסים, מזינים את מספר הצמתים שרוצים ליצור. כברירת מחדל, אתם מקבלים אפס צמתים, והתנועה של מאזן העומסים עוברת דרך הצמתים של מישור הבקרה.
בוחרים את ה-Service CIDR (Classless Inter-Domain Routing) שבו רוצים להשתמש. לשירותים שפרסתם, כמו מאזני עומסים, מוקצות כתובות IP מהטווח הזה.
בוחרים את ה-Pod CIDR שבו רוצים להשתמש. האשכול מקצה כתובות IP מהטווח הזה ל-Pod ולמכונות הווירטואליות שלכם.
לוחצים על הבא.
בודקים את הפרטים של מאגר הצמתים שנוצר אוטומטית כברירת מחדל לאשכול. לוחצים על edit Edit כדי לשנות את מאגר הצמתים שמוגדר כברירת מחדל.
כדי ליצור מאגרי צמתים נוספים, לוחצים על Add Node Pool. כשעורכים את מאגר הצמתים שמוגדר כברירת מחדל או כשמוסיפים מאגר צמתים חדש, אפשר להתאים אותו אישית באמצעות האפשרויות הבאות:
- נותנים שם למאגר הצמתים. אי אפשר לשנות את השם אחרי שיוצרים את מאגר הצמתים.
- מציינים את מספר הצמתים העובדים שרוצים ליצור במאגר הצמתים.
בוחרים את סוג המכונה שהכי מתאים לדרישות של עומס העבודה. רשימת ההגדרות:
- סוג המכונה
- CPU
- זיכרון
לוחצים על Save.
לוחצים על Create כדי ליצור את האשכול.
יצירת אשכול רגיל יכולה להימשך עד 60 דקות.
API
יוצרים משאב בהתאמה אישית של
Clusterושומרים אותו כקובץ YAML, למשלcluster.yaml:apiVersion: cluster.gdc.goog/v1 kind: Cluster metadata: name: CLUSTER_NAME namespace: PROJECT_NAME spec: clusterNetwork: podCIDRSize: POD_CIDR serviceCIDRSize: SERVICE_CIDR initialVersion: kubernetesVersion: KUBERNETES_VERSION nodePools: - machineTypeName: MACHINE_TYPE name: NODE_POOL_NAME nodeCount: NUMBER_OF_WORKER_NODES taints: TAINTS labels: LABELS acceleratorOptions: gpuPartitionScheme: GPU_PARTITION_SCHEME releaseChannel: channel: UNSPECIFIEDמחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: שם האשכול. שם האשכול לא יכול להסתיים ב--system. הסיומת-systemשמורה לאשכולות שנוצרו על ידי GDC. -
PROJECT_NAME: שם הפרויקט שבו רוצים ליצור את האשכול. -
POD_CIDR: גודל טווחי הרשת שמהם מוקצות כתובות ה-IP הווירטואליות של הפודים. אם המדיניות לא מוגדרת, המערכת משתמשת בערך ברירת המחדל21. -
SERVICE_CIDR: גודל טווחי הרשת שמהם מוקצות כתובות ה-IP הווירטואליות של השירות. אם המדיניות לא מוגדרת, המערכת משתמשת בערך ברירת המחדל23. -
KUBERNETES_VERSION: גרסת ה-Kubernetes של האשכול, למשל1.26.5-gke.2100. כדי להציג את גרסאות Kubernetes הזמינות להגדרה, קראו את המאמר הצגת גרסאות Kubernetes הזמינות לאשכול. -
MACHINE_TYPE: סוג המכונה של צומתי העובדים במאגר הצמתים. במאמר סוגי המכונות הזמינים מפורטות האפשרויות שאפשר להגדיר. -
NODE_POOL_NAME: שם מאגר הצמתים. -
NUMBER_OF_WORKER_NODES: מספר הצמתים העובדים שצריך להקצות במאגר הצמתים. -
TAINTS: ה-taints שיוחלו על הצמתים של מאגר הצמתים הזה. השדה הזה אופציונלי. -
LABELS: התוויות שיוחלו על הצמתים במאגר הצמתים הזה. הוא מכיל רשימה של צמדי מפתח/ערך. השדה הזה אופציונלי. -
GPU_PARTITION_SCHEME: סכימת החלוקה למחיצות של ה-GPU, אם מריצים עומסי עבודה ב-GPU. השדה הזה אופציונלי. לדוגמה,mixed-2. אם השדה הזה לא מוגדר, ה-GPU לא מחולק למחיצות. מידע נוסף על פרופילים זמינים של GPU עם כמה מופעים במקביל (MIG) זמין במאמר פרופילים נתמכים של MIG.
-
מחילים את המשאב בהתאמה אישית על המכונה של GDC:
kubectl apply -f cluster.yaml --kubeconfig MANAGEMENT_API_SERVERמחליפים את
MANAGEMENT_API_SERVERבנתיב kubeconfig של שרת ה-API האזורי. אם עדיין לא יצרתם קובץ kubeconfig לשרת ה-API באזור היעד, עיינו בקטע כניסה.
יצירת אשכול רגיל יכולה להימשך עד 60 דקות.
Terraform
מכניסים את קטע הקוד הבא לקובץ תצורה של Terraform:
provider "kubernetes" { config_path = "MANAGEMENT_API_SERVER" } resource "kubernetes_manifest" "cluster-create" { manifest = { "apiVersion" = "cluster.gdc.goog/v1" "kind" = "Cluster" "metadata" = { "name" = "CLUSTER_NAME" "namespace" = "PROJECT_NAME" } "spec" = { "clusterNetwork" = { "podCIDRSize" = "POD_CIDR" "serviceCIDRSize" = "SERVICE_CIDR" } "initialVersion" = { "kubernetesVersion" = "KUBERNETES_VERSION" } "nodePools" = [{ "machineTypeName" = "MACHINE_TYPE" "name" = "NODE_POOL_NAME" "nodeCount" = "NUMBER_OF_WORKER_NODES" "taints" = "TAINTS" "labels" = "LABELS" "acceleratorOptions" = { "gpuPartitionScheme" = "GPU_PARTITION_SCHEME" } }] "releaseChannel" = { "channel" = "UNSPECIFIED" } } } }מחליפים את מה שכתוב בשדות הבאים:
-
MANAGEMENT_API_SERVER: הנתיב של kubeconfig לשרת ה-API של האזור. אם עדיין לא יצרתם קובץ kubeconfig לשרת ה-API באזור היעד, קראו את המאמר כניסה. -
CLUSTER_NAME: שם האשכול. שם האשכול לא יכול להסתיים ב--system. הסיומת-systemשמורה לאשכולות שנוצרו על ידי GDC. -
PROJECT_NAME: שם הפרויקט שבו רוצים ליצור את האשכול. -
POD_CIDR: גודל טווחי הרשת שמהם מוקצות כתובות ה-IP הווירטואליות של הפודים. אם המדיניות לא מוגדרת, המערכת משתמשת בערך ברירת המחדל21. -
SERVICE_CIDR: גודל טווחי הרשת שמהם מוקצות כתובות ה-IP הווירטואליות של השירות. אם המדיניות לא מוגדרת, המערכת משתמשת בערך ברירת המחדל23. -
KUBERNETES_VERSION: גרסת ה-Kubernetes של האשכול, למשל1.26.5-gke.2100. כדי להציג את גרסאות Kubernetes הזמינות להגדרה, קראו את המאמר הצגת גרסאות Kubernetes הזמינות לאשכול. -
MACHINE_TYPE: סוג המכונה של צומתי העובדים במאגר הצמתים. במאמר סוגי המכונות הזמינים מפורטות האפשרויות שאפשר להגדיר. -
NODE_POOL_NAME: שם מאגר הצמתים. -
NUMBER_OF_WORKER_NODES: מספר הצמתים העובדים שצריך להקצות במאגר הצמתים. -
TAINTS: ה-taints שיוחלו על הצמתים של מאגר הצמתים הזה. השדה הזה אופציונלי. -
LABELS: התוויות שיוחלו על הצמתים במאגר הצמתים הזה. הוא מכיל רשימה של צמדי מפתח/ערך. השדה הזה אופציונלי. -
GPU_PARTITION_SCHEME: סכימת החלוקה למחיצות של ה-GPU, אם מריצים עומסי עבודה ב-GPU. השדה הזה אופציונלי. לדוגמה,mixed-2. אם השדה הזה לא מוגדר, ה-GPU לא מחולק למחיצות. מידע נוסף על פרופילים זמינים של GPU עם כמה מופעים במקביל (MIG) זמין במאמר פרופילים נתמכים של MIG.
-
מחילים את האשכול הרגיל החדש באמצעות Terraform:
terraform apply
יצירת אשכול רגיל יכולה להימשך עד 60 דקות.
המאמרים הבאים
- ניהול הגישה לאשכולות רגילים
- פריסת אפליקציית קונטיינר בזמינות גבוהה
- עומסי עבודה של קונטיינרים ב-GDC
- היררכיית המשאבים
- הגדרת Cloud NAT לאשכולות רגילים