שימוש במאגר תמונות פרטי
כברירת מחדל, להתקנה של GKE ב-Azure יש גישה לקובצי אימג' ציבוריים של קונטיינרים. בנושא הזה מוסבר איך להשתמש ב-GKE ב-Azure עם מאגר פרטי של קובצי אימג' של קונטיינר, כמו Artifact Registry.
לפני שמתחילים
כדי לבצע את השלבים בדף הזה, קודם צריך לבצע את הפעולות הבאות:
- יצירת אשכול.
- יצירת מאגר צמתים
יצירת קובץ אימג' של Docker והעברה שלו בדחיפה ל-Artifact Registry. בדוגמאות שבדף הזה נעשה שימוש בקונטיינר
hello-app. כדי ליצור את הקונטיינר הזה, פועלים לפי השלבים ליצירת קובץ אימג' של קונטיינר והעברת קובץ האימג' של Docker בדחיפה ל-Artifact Registry, שמופיעים במאמרי העזרה של GKE on Google Cloud .
בדיקת תמונות ב-Artifact Registry
כדי להשלים את שאר השלבים, צריך קובץ אימג' של קונטיינר. כדי לקבל את השם של קובץ האימג' בקונטיינר, פועלים לפי השלבים הבאים:
מגדירים את כלי שורת הפקודה של Docker לאימות ב-Artifact Registry באמצעות Google Cloud SDK:
gcloud auth configure-dockerכלי שורת הפקודה
gcloudרושם כלי עזר לפרטי כניסה לכל מאגרי Docker שנתמכים על ידי Google.מוודאים ש-Artifact Registry כולל תמונה עם הפקודה
docker images.docker imagesDocker מתחבר ל-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).
כדי ליצור חשבון שירות חדש:
יוצרים חשבון שירות של IAM באמצעות Google Cloud CLI.
gcloud iam service-accounts create ACCOUNT_NAMEמחליפים את ACCOUNT_NAME בשם של חשבון השירות החדש Google Cloud.
מעניקים לחשבון השירות הרשאות ל-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
מורידים את המפתח של חשבון השירות.
gcloud iam service-accounts keys create registry-access-key.json \ --iam-account ACCOUNT_NAME@PROJECT_NAME.iam.gserviceaccount.comמחליפים את מה שכתוב בשדות הבאים:
PROJECT_NAMEACCOUNT_NAME
עכשיו אפשר להגדיר את אשכול המשתמשים להתחבר אל Artifact Registry.
שמירת המפתח באשכול
כדי לספק את המפתח לאימות ב-Artifact Registry, שומרים את המפתח של חשבון השירות כסוד ב-Kubernetes באופן הבא:
אפשר להשתמש ב-
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_NAMEACCOUNT_NAME
-
מוחקים את העותק המקומי של המפתח של חשבון השירות.
rm registry-access-key.json
עכשיו אפשר להפנות אל הסוד הזה בעומסי העבודה.
יצירת עומס עבודה עם תמונה פרטית
כדי להשתמש בתמונה ממאגר קונטיינרים פרטי עם עומס עבודה, צריך להגדיר את השדה spec.imagePullSecrets לשם הסוד. השדה הזה נמצא במיקומים שונים ב-Pods וב-Deployments.
יצירת Pod
כדי ליצור Pod שיכול לגשת למאגר התמונות של הקונטיינר, מגדירים את השדה spec.imagePullSecrets לשם הסוד.
יוצרים 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 LOCATIONPROJECT_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-
מחילים את ההגדרה על האשכול באמצעות הפקודה
kubectl.kubectl apply -f hello-pod.yamlמוודאים שה-pod פועל באמצעות הפקודה
kubectl get.kubectl get pod/hello-podהתשובה כוללת פוד אחד עם סטטוס
Running.NAME READY STATUS RESTARTS AGE hello-pod 1/1 Running 0 15s
יצירת פריסה
כדי להשתמש במאגר פרטי בפריסה, מציינים את
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מחליפים את מה שכתוב בשדות הבאים:
LOCATIONPROJECT_NAME
מחילים את ההגדרה על האשכול באמצעות הפקודה
kubectl.kubectl apply -f hello-deployment.yamlמוודאים שהפריסה פועלת עם
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
המאמרים הבאים
- קראו את סקירה כללית על Artifact Registry.