יצירת עומסי עבודה ללא שמירת מצב

במאמר הזה מוסבר איך ליצור ולנהל עומסי עבודה ללא שמירת מצב (stateless) באשכול Kubernetes עם פער אוויר ב-Google Distributed Cloud ‏(GDC). עומסי עבודה ללא שמירת מצב מאפשרים לשנות את קנה המידה של פריסת האפליקציה בהתאם לדרישות של עומס העבודה, בלי לנהל אחסון מתמיד באשכול Kubernetes כדי לאחסן נתונים או את מצב האפליקציה. המסמך הזה יעזור לכם להתחיל לבצע אופטימיזציה ולהתאים את הזמינות של האפליקציה בצורה יעילה.

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

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

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

בקשת תפקידים ב-IAM

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

תפקידים משותפים באשכול

כדי ליצור, למחוק, לערוך או להציג עומסי עבודה בלי שמירת מצב באשכול משותף, בקשו מהאדמין של הפרויקט ב-IAM להקצות לכם את התפקיד אדמין של מרחב שמות (namespace-admin). התפקיד הזה קשור למרחב השמות של הפרויקט.

תפקידים רגילים באשכול

כדי ליצור, למחוק, לערוך או להציג עומסי עבודה ללא שמירת מצב באשכול רגיל, בקשו מהאדמין של הפרויקט ב-IAM להקצות לכם את התפקיד פיתוח אשכולות (cluster-developer). התפקיד הזה קשור למרחב השמות של הפרויקט.

הכנת הסביבה

כדי להריץ פקודות באשכול Kubernetes באמצעות ה-API, צריך לוודא שיש לכם את המשאבים הבאים:

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

  • נכנסים לחשבון ויוצרים את קובץ kubeconfig לאשכול Kubernetes.

  • בהוראות הבאות, מחליפים את KUBERNETES_CLUSTER_KUBECONFIG בנתיב kubeconfig של אשכול Kubernetes.

יצירת פריסה

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

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

kubectl --kubeconfig KUBERNETES_CLUSTER_KUBECONFIG -n NAMESPACE \
    apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: DEPLOYMENT_NAME
spec:
  replicas: NUMBER_OF_REPLICAS
  selector:
    matchLabels:
      run: APP_NAME
  template:
    metadata:
      labels: # The labels given to each pod in the deployment, which are used
              # to manage all pods in the deployment.
        run: APP_NAME
    spec: # The pod specification, which defines how each pod runs in the deployment.
      containers:
      - name: CONTAINER_NAME
        image: CONTAINER_IMAGE
EOF

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

  • ‫KUBERNETES_CLUSTER_KUBECONFIG: קובץ ה-kubeconfig של אשכול Kubernetes שאליו פורסים את עומסי העבודה של הקונטיינר.

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

  • ‫DEPLOYMENT_NAME: השם של האובייקט Deployment.

  • ‫APP_NAME: שם האפליקציה שרוצים להריץ בפריסה.

  • ‫NUMBER_OF_REPLICAS: מספר האובייקטים המשוכפלים של Pod שהפריסה מנהלת.

  • ‫CONTAINER_NAME: שם הקונטיינר.

  • ‫CONTAINER_IMAGE: השם של קובץ האימג' של הקונטיינר. צריך לכלול את הנתיב של Container Registry ואת גרסת האימג', למשל REGISTRY_PATH/hello-app:1.0. מידע נוסף על הגדרת הנתיב של Container Registry זמין בסקירה הכללית על Managed Harbor Service.

לדוגמה:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app
spec:
  replicas: 3
  selector:
    matchLabels:
      run: my-app
  template:
    metadata:
      labels:
        run: my-app
    spec:
      containers:
      - name: hello-app
        image: REGISTRY_PATH/hello-app:1.0

אם אתם פורסים עומסי עבודה של GPU בקונטיינרים, תוכלו לקרוא מידע נוסף במאמר ניהול עומסי עבודה של קונטיינרים של GPU.

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