שימוש במאגר תמונות פרטי

כברירת מחדל, להתקנה של GKE ב-Azure יש גישה לקובצי אימג' ציבוריים של קונטיינרים. בנושא הזה מוסבר איך להשתמש ב-GKE ב-Azure עם מאגר פרטי של קובצי אימג' של קונטיינר, כמו Artifact Registry.

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

כדי לבצע את השלבים בדף הזה, קודם צריך לבצע את הפעולות הבאות:

בדיקת תמונות ב-Artifact Registry

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

  1. מגדירים את כלי שורת הפקודה של Docker לאימות ב-Artifact Registry באמצעות Google Cloud SDK:

    gcloud auth configure-docker
    

    כלי שורת הפקודה gcloud רושם כלי עזר לפרטי כניסה לכל מאגרי Docker שנתמכים על ידי Google.

  2. מוודאים ש-Artifact Registry כולל תמונה עם הפקודה docker images.

    docker images
    

    ‫Docker מתחבר ל-Artifact Registry ומחזיר את התמונות שזמינות במאגר. לדוגמה, בתגובה שלמטה מוצג קובץ אימג' של קונטיינר בשם hello-app במאגר PROJECT_NAME ב-us-west1-docker.pkg.dev.

    REPOSITORY                                                            TAG          IMAGE ID       CREATED          SIZE
    us-west1-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app   v1           f7cfe0d58569   21 minutes ago   11.5MB
    

אם אין לכם קובץ אימג' של קונטיינר מוכן, צרו אותו לפי השלבים במאמר פריסת אפליקציה בקונטיינרים.

יצירת חשבון שירות

האימות של האשכולות מתבצע באמצעות חשבון שירות לניהול זהויות והרשאות גישה (IAM).

כדי ליצור חשבון שירות חדש:

  1. יוצרים חשבון שירות של IAM באמצעות Google Cloud CLI.

    gcloud iam service-accounts create ACCOUNT_NAME
    

    מחליפים את ACCOUNT_NAME בשם של חשבון השירות החדש Google Cloud.

  2. מעניקים לחשבון השירות הרשאות ל-Artifact Registry.

    gcloud projects add-iam-policy-binding PROJECT_NAME \
      --member serviceAccount:ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \
      --role roles/artifactregistry.reader
    

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

    • PROJECT_NAME עם הפרויקט Google Cloud
    • ACCOUNT_NAME עם שם חשבון השירות שלכם Google Cloud
  3. מורידים את המפתח של חשבון השירות.

    gcloud iam service-accounts keys create registry-access-key.json \
      --iam-account ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com
    

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

    • PROJECT_NAME
    • ACCOUNT_NAME

עכשיו אפשר להגדיר את אשכול המשתמשים להתחבר אל Artifact Registry.

שמירת המפתח באשכול

כדי לספק את המפתח לאימות ב-Artifact Registry, שומרים את המפתח של חשבון השירות כסוד ב-Kubernetes באופן הבא:

  1. אפשר להשתמש ב-kubectl כדי ליצור את הסוד.

      kubectl create secret docker-registry registry-secret \
      --docker-server=LOCATION-docker.pkg.dev \
      --docker-username=_json_key \
      --docker-email=ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.com \
      --docker-password="$(cat registry-access-key.json)"
    

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

    • LOCATION: המיקום האזורי או הרב-אזורי של המאגר.
    • PROJECT_NAME
    • ACCOUNT_NAME
  2. מוחקים את העותק המקומי של המפתח של חשבון השירות.

    rm registry-access-key.json
    

עכשיו אפשר להפנות אל הסוד הזה בעומסי העבודה.

יצירת עומס עבודה עם תמונה פרטית

כדי להשתמש בתמונה ממאגר קונטיינרים פרטי עם עומס עבודה, צריך להגדיר את השדה spec.imagePullSecrets לשם הסוד. השדה הזה נמצא במיקומים שונים ב-Pods וב-Deployments.

יצירת Pod

כדי ליצור Pod שיכול לגשת למאגר התמונות של הקונטיינר, מגדירים את השדה spec.imagePullSecrets לשם הסוד.

  1. יוצרים Pod שמציין את spec.imagePullSecrets.

    apiVersion: v1
    kind: Pod
    metadata:
      name: POD_NAME
    spec:
      containers:
      - name: CONTAINER_NAME
        image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1
      imagePullSecrets:
      - name: registry-secret
    

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

    • POD_NAME: השם של ה-Pod
    • CONTAINER_NAME: השם של הקונטיינר בתוך ה-Pod
    • LOCATION
    • PROJECT_NAME

    לדוגמה, כדי למשוך את התמונה hello-app, מעתיקים את קובץ ה-YAML הבא לקובץ בשם hello-pod.yaml.

    apiVersion: v1
    kind: Pod
    metadata:
      name: hello-pod
    spec:
      containers:
      - name: hello-container
        image: us-west1-docker.pkg.dev/example-project/hello-repo/hello-app:v1
      imagePullSecrets:
      - name: registry-secret
    
  2. מחילים את ההגדרה על האשכול באמצעות הפקודה kubectl.

    kubectl apply -f hello-pod.yaml
    
  3. מוודאים שה-pod פועל באמצעות הפקודה kubectl get.

    kubectl get pod/hello-pod
    

    התשובה כוללת פוד אחד עם סטטוס Running.

    NAME        READY   STATUS    RESTARTS   AGE
    hello-pod   1/1     Running   0          15s
    

יצירת פריסה

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

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

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: hello-app-deployment
    spec:
      selector:
        matchLabels:
          app: products
          department: sales
      replicas: 3
      template:
        metadata:
          labels:
            app: products
            department: sales
        spec:
          containers:
          - name: hello
            image: LOCATION-docker.pkg.dev/PROJECT_NAME/hello-repo/hello-app:v1
            env:
            - name: "PORT"
              value: "50001"
          imagePullSecrets:
          - name: registry-secret
    

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

    • LOCATION
    • PROJECT_NAME
  2. מחילים את ההגדרה על האשכול באמצעות הפקודה kubectl.

    kubectl apply -f hello-deployment.yaml
    
  3. מוודאים שהפריסה פועלת עם kubectl pods.

    kubectl get pods --selector=app=products
    

    הפלט מציג שלושה פודים של Running.

    NAME                                    READY   STATUS    RESTARTS   AGE
    hello-app-deployment-67d9c6d98c-b69f2   1/1     Running   0          14m
    hello-app-deployment-67d9c6d98c-d6k5c   1/1     Running   0          14m
    hello-app-deployment-67d9c6d98c-p2md5   1/1     Running   0          14m
    

הסרת המשאבים

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

kubectl apply -f hello-pod.yaml
kubectl delete -f hello-deployment.yaml

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