פרוס באופן ידני את היישום המקורי בענן שלך ב- Azure Kubernetes Service
כדי שתוכל להפוך את פריסות אתר האינטרנט לאוטומטיות, עליך לפרוס את היישום eShop הקיים באופן ידני בשירות Azure Kubernetes (AKS). עליך ליצור את משאבי Azure ולפרוס את היישום ב- AKS באמצעות פקודות CLI של Azure וקבצי Script של Bash. לבסוף, עליך ליצור מנהל שירות של Azure Active Directory (Azure AD) כדי לאפשר לפעולות GitHub לפרוס ב- AKS וב- Azure Container Registry.
הפקודות יוצרות את המשאבים הבאים כדי לפרוס גירסה מעודכנת של היישום eShop.
- הקצה רישום של Azure Container Registry (ACR) ולאחר מכן דחוף תמונות לרישום.
- הקצה משאבים לאשכול AKS ולאחר מכן פרוס את הגורמים המכילים באשכול.
- בדוק את הפריסה.
- צור מנהלים של שירות כדי לאפשר לפעולות GitHub לפרוס ב- AKS וב- Azure Container Registry.
Important
ודא שהשלמת את הדרישות המוקדמות לפני שתתחיל.
פתח את סביבת הפיתוח
באפשרותך לבחור להשתמש במרווח קוד של GitHub המארח את התרגיל, או להשלים את התרגיל באופן מקומי ב- Visual Studio Code.
הגדרת GitHub Codespaces
מזלג https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops מאגר לחשבון GitHub שלך. לאחר מכן, במזלג החדש שלך:
- בחר קוד.
- בחר את הכרטיסייה Codespaces .
- בחר את + כדי ליצור את מרחב הקוד שלך.
ל- GitHub נדרשות כמה דקות כדי ליצור ולהגדיר את מרחב הקוד. לאחר השלמת התהליך, תוכל לראות את קבצי הקוד עבור התרגיל.
אופציונלי: הגדרת קוד Visual Studio
כדי להשתמש ב- Visual Studio Code, מזלג את מאגר https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops לחשבון GitHub שלך ושכפל אותו באופן מקומי. Then:
- התקן את כל דרישות המערכת כדי להפעיל את הגורם המכיל של Dev ב- Visual Studio Code.
- ודא ש- Docker פועל.
- בחלון Visual Studio Code חדש, פתח את התיקיה של המאגר המשוכפל
- הקש Ctrl+Shift+P כדי לפתוח את לוח הפקודות.
- חיפוש: >גורמים מכילים של פיתוח: בנה מחדש ופתח מחדש ב- Container
- Visual Studio Code יוצר את הגורם המכיל של הפיתוח באופן מקומי.
בניית קונטיינרים
בחלונית המסוף, הפעל את הפקודה CLI זו של dotnet:
dotnet publish /p:PublishProfile=DefaultContainer
יצירת המשאבים של Azure
בחלונית המסוף, היכנס ל- Azure באמצעות הפקודה CLI זו של Azure:
az login --use-device-codeהצג את מנוי Azure שנבחר.
az account show -o tableאם נבחר מנוי שגוי, השתמש בפקודה חשבון az כדי לבחור את המנוי הנכון.
הפעל את הפקודה הבאה של ממשק שורת הפקודה של Azure כדי לקבל רשימה של אזורי Azure ואת השם המשויך לה:
az account list-locations -o tableאתר אזור הקרוב ביותר אליך והשתמש בו בשלב הבא על-ידי החלפת
[Closest Azure region]הפעל הצהרות Bash אלה:
export LOCATION=[Closest Azure region] export RESOURCE_GROUP=rg-eshop export CLUSTER_NAME=aks-eshop export ACR_NAME=acseshop$SRANDOMהפקודות הקודמות יוצרות משתני סביבה שבהם תשתמש בפקודות ה- CLI הבאות של Azure. עליך לשנות את המיקום לאזור Azure הקרוב אליך כגון eastus. אם אתה מעוניין בשם אחר עבור קבוצת המשאבים, אשכול AKS או ACR, שנה ערכים אלה. כדי להציג את המאגרים החדשים שלך בפורטל Azure, הקצה את עצמך כמנהל מערכת של אוטומציית תאימות היישומים של בפקד Access (IAM) רישום הגורם המכיל.
הפעל פקודות CLI אלה של Azure:
az group create --name $RESOURCE_GROUP --location $LOCATION az acr create --resource-group $RESOURCE_GROUP --name $ACR_NAME --sku Basic az acr login --name $ACR_NAMEאם אתה מקבל שגיאת אימות בעת
az acr login --name $ACR_Nameהפעלתה, עליך להפעיל את משתמש הניהולברישום הגורם המכיל החדש שנוצר ב- Azure תחת הגדרות - מפתחות גישה. Azure מבקש ממך להזין אישורים אלה כדי להמשיך. ייתכן גם שיהיה עליך לבצע אימות חוזר באמצעותaz login --use-device-code.פקודות אלה יוצרות קבוצת משאבים שתכיל את משאבי Azure, ACR עבור התמונות שלך ולאחר מכן נכנסות ל- ACR. ייתכן שיחלפו כמה דקות עד שתראה פלט זה:
... }, "status": null, "systemData": { "createdAt": "2023-10-19T09:11:51.389157+00:00", "createdBy": "", "createdByType": "User", "lastModifiedAt": "2023-10-19T09:11:51.389157+00:00", "lastModifiedBy": "", "lastModifiedByType": "User" }, "tags": {}, "type": "Microsoft.ContainerRegistry/registries", "zoneRedundancy": "Disabled" } Login Succeededכדי לתייג את התמונות שלך וללחוץ על ה- ACR שיצרת, הפעל את הפקודות הבאות:
docker tag store $ACR_NAME.azurecr.io/storeimage:v1 docker tag products $ACR_NAME.azurecr.io/productservice:v1 docker push $ACR_NAME.azurecr.io/storeimage:v1 docker push $ACR_NAME.azurecr.io/productservice:v1באפשרותך לבדוק אם דחיפת התמונות הושלמה בהצלחה באמצעות פקודה זו:
az acr repository list --name $ACR_NAME --output tableצור את רשימת ה- AKS וחבר אותה ל- ACR באמצעות הפקודות הבאות:
az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --node-count 1 --generate-ssh-keys --node-vm-size Standard_B2s --network-plugin azure --attach-acr $ACR_NAME az aks get-credentials --name $CLUSTER_NAME --resource-group $RESOURCE_GROUPהפקודות יוצרות אשכול AKS של צומת יחיד, מחברות אותו ל- ACR ולאחר מכן מחברות את המחשב המקומי לאשכול AKS. השלמת הפקודות עשויה להימשך כמה דקות.
ודא ש- AKS החדש יכול למשוך תמונות מה- ACR באמצעות פקודה זו:
az aks check-acr --acr $ACR_NAME.azurecr.io --name $CLUSTER_NAME --resource-group $RESOURCE_GROUPאתה אמור לראות פלט דומה להודעות הבאות:
[2023-10-19T13:33:09Z] Loading azure.json file from /etc/kubernetes/azure.json [2023-10-19T13:33:09Z] Checking managed identity... [2023-10-19T13:33:09Z] Cluster cloud name: AzurePublicCloud [2023-10-19T13:33:09Z] Kubelet managed identity client ID: 00001111-aaaa-2222-bbbb-3333cccc4444 [2023-10-19T13:33:09Z] Validating managed identity existance: SUCCEEDED [2023-10-19T13:33:09Z] Validating image pull permission: SUCCEEDED [2023-10-19T13:33:09Z] Your cluster can pull images from acseshop1251599299.azurecr.io!עכשיו אתה יכול להריץ פקודות kubectl מול אשכול ה-AKS החדש שלך. העתק את כתובת האתר המלאה של ACR מהפלט; לדוגמה, מעל כתובת ה-URL נמצא acseshop1251599299.
בדוק את המצב של אשכול ה- AKS שלך:
kubectl get nodes -Aאתה אמור לראות פלט דומה להודעות הבאות:
NAME STATUS ROLES AGE VERSION aks-nodepool1-37200563-vmss000000 Ready agent 3h44m v1.26.6
קביעת התצורה של מניפסט הפריסה של Kubernetes
כעת תמונות eShop נמצאות ב- ACR, באפשרותך לעדכן את מניפסט הפריסה של AKS כדי להשתמש בתמונות חדשות אלה.
ב- Visual Studio Code או ב- Codespaces, בחלונית EXPLORER, בחר את קובץ deployment.yml בבסיס הפרוייקט.
החלף בשורה 17:
- image: [replace with your ACR name].azurecr.io/storeimage:v1הדבק את שם ה- ACR שהועתק מהצעד הקודם – השורה אמורה להיראות דומה ל- yaml הבא:
- image: acseshop1251599299.azurecr.io/storeimage:v1חזור על שלבים אלה עבור שורה 65:
- image: [replace with your ACR name].azurecr.io/productservice:v1שמור את הקובץ באמצעות CTRL+S.
בחלונית המסוף, פרוס בקר כניסה של NGINX באמצעות הפקודה הבאה של kubernetes:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.9.3/deploy/static/provider/cloud/deploy.yamlהפקודה
kubectlמוסיפה שירותים ורכיבים כדי לאפשר כניסה לאשכול AKS שלך. ודא שהיציאה מוכנה לפעולה באמצעות הפקודה הבאה של kubernetes:kubectl get services --namespace ingress-nginxאתה אמור לראות פלט דומה להודעות הבאות:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE ingress-nginx-controller LoadBalancer 10.0.135.51 20.26.154.64 80:32115/TCP,443:32254/TCP 58s ingress-nginx-controller-admission ClusterIP 10.0.137.137 <none> 443/TCP 58sפרוס את היישום eShop באמצעות פקודה זו:
kubectl apply -f deployment.ymlהפקודה
kubectlמחילה את היישום eShop, אפליקציית אינטרנט חזיתית Blazor ושירות מוצר REST API בקצה האחורי, וכלל יציאה כדי לנתב את התעבורה לשירותים הנכונים לאשכול AKS שלך. הפעל מחדש פקודה זו אם אתה מקבל שגיאה כלשהי בפריסות.אתה אמור לראות פלט דומה להודעות הבאות:
deployment.apps/storeimage created service/eshop-website created deployment.apps/productservice created service/eshop-backend created ingress.networking.k8s.io/eshop-ingress createdודא כי שני מיקרו-שרתים נפרסים באמצעות פקודה זו:
kubectl get pods -Aאתה אמור לראות פלט דומה להודעות הבאות:
NAMESPACE NAME READY STATUS RESTARTS AGE default productservice-7569b8c64-vfbfz 1/1 Running 0 3m56s default storeimage-6c7c999d7c-zsnxd 1/1 Running 0 3m56s ingress-nginx ingress-nginx-admission-create-szb8l 0/1 Completed 0 4m4s ingress-nginx ingress-nginx-admission-patch-czdbv 0/1 Completed 0 4m4s ingress-nginx ingress-nginx-controller-58bf5bf7dc-nwtsr 1/1 Running 0 4m4sהצג את eShop שנפרס באמצעות פקודה זו:
echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"הפקודה מחזירה את כתובת ה- IP החיצונית עבור יישום האינטרנט. החזק את מקש CTRL לחוץ ולחץ על הקישור כדי לפתוח את האפליקציה בכרטיסיה חדשה.
יצירת מנהל שירות לפריסה מ- GitHub
פעולות GitHub יכולות לפרסם תמונות של גורמים מכילים ברישום של Azure Container. לכן, לרץ GitHub דרושות הרשאות כדי להתחבר ל- Azure. השלבים הבאים יוצרים מנהל שירות של Azure AD כדי לפעול בתור זהות GitHub Actions בתוך Azure.
כדי לשמור את מזהה המנוי במשתנה סביבה, הפעל את הפקודה הבאה במסוף:
export SUBS=$(az account show --query 'id' --output tsv)כדי ליצור מנהל שירות של Azure AD כדי לאפשר גישה מ- GitHub, הפעל את הפקודה הבאה:
az ad sp create-for-rbac --name "eShop" --role contributor --scopes /subscriptions/$SUBS/resourceGroups/$RESOURCE_GROUP --json-authמופיעה וריאציה של הפלט הבא:
Creating 'Contributor' role assignment under scope '/subscriptions/ffffffff-aaaa-bbbb-6666-777777777777' The output includes credentials that you must protect. Be sure that you do not include these credentials in your code or check the credentials into your source control. For more information, see https://aka.ms/azadsp-cli { "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444", "clientSecret": "abc1A~abc123ABC123abc123ABC123abc123ABC1", "subscriptionId": "00000000-0000-0000-0000-000000000000", "tenantId": "00000000-0000-0000-0000-000000000000", "activeDirectoryEndpointUrl": "https://login.microsoftonline.com", "resourceManagerEndpointUrl": "https://management.azure.com/", "activeDirectoryGraphResourceId": "https://graph.windows.net/", "sqlManagementEndpointUrl": "https://management.core.windows.net:8443/", "galleryEndpointUrl": "https://gallery.azure.com/", "managementEndpointUrl": "https://management.core.windows.net/" }העתק את הפלט ואת הסוגריים המרובעים של JSON לשימוש בשלב הבא.
יצירת סודות GitHub
הרץ GitHub Actions משתמש באישורים כדי לקיים אינטראקציה עם Container Registry ו- AKS. מנהל השירות וה האישורים עבור רישום הגורם המכיל הם מידע רגיש. עדיף לאחסן מידע רגיש כסודות מוצפנים במיקום מאובטח. GitHub מספק מיקום מוכלל לאחסון סודות ומשתנים אחרים.
בצע את השלבים הבאים כדי לאחסן באופן מאובטח את המידע הרגיש כמשתנה סביבה במאגר שלך. מנהלי מאגר צריכים לנהל את הסודות שהרץ GitHub Actions יכול לגשת אליו.
במאגר GitHub שלך, עבור אל Settings>Secrets and variables>Actions.
בדף Actions secrets and variables, בחר New repository secret.
New secret בדף, תחת Name, הזן AZURE_CREDENTIALS ותחת Secret, הזן את פלט ה- JSON שהעתקת מהטרמינל.
ההגדרות אמורות להיראות דומות לצילום המסך הבא:
בחר Add secret.
יהיה עליך להשתמש בסוד זה של GitHub בסעיף הבא כדי ליצור פעולת GitHub לבניית תמונת הגורם המכיל.