ปรับใช้แอประบบคลาวด์แบบดั้งเดิมของคุณกับบริการ Azure Kubernetes ด้วยตนเอง
ก่อนที่คุณจะสามารถปรับใช้เว็บไซต์ของคุณโดยอัตโนมัติ คุณจําเป็นต้องปรับใช้แอป eShop ที่มีอยู่ด้วยตนเองกับ Azure Kubernetes Service (AKS) คุณสร้างทรัพยากร Azure และปรับใช้แอปไปยัง AKS โดยใช้คําสั่ง Azure CLI และสคริปต์ 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 ใช้เวลาหลายนาทีในการสร้างและกําหนดค่า codespace เมื่อกระบวนการเสร็จสมบูรณ์ คุณจะเห็นไฟล์โค้ดสําหรับแบบทดสอบ
ตัวเลือก: Visual Studio Code Setup
เพื่อใช้ Visual Studio Codeทําเอกสารที่เก็บข้อมูล https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops ไปยังบัญชี GitHub ของคุณเอง และลอกแบบภายในเครื่อง Then:
- ติดตั้ง ความต้องการของระบบ เพื่อเรียกใช้ Dev Container ใน Visual Studio Code
- ตรวจสอบให้แน่ใจว่า Docker ทํางานอยู่
- ในหน้าต่าง Visual Studio Code ใหม่ ให้เปิดโฟลเดอร์ของที่เก็บข้อมูลที่ถูกลอกแบบ
- กด Ctrl Shift++P เพื่อเปิดจานคําสั่ง
- ค้นหา: คอนเทนเนอร์ Dev >: สร้างใหม่และเปิดใหม่อีกครั้งใน คอนเทนเนอร์
- รหัส Visual Studio สร้างคอนเทนเนอร์การพัฒนาของคุณภายในเครื่อง
สร้างคอนเทนเนอร์
ในบานหน้าต่างเทอร์มินัล ให้เรียกใช้คําสั่ง dotnet CLI นี้:
dotnet publish /p:PublishProfile=DefaultContainer
สร้างทรัพยากร Azure
ในบานหน้าต่างเทอร์มินัล ให้ลงชื่อเข้าใช้ Azure ด้วยคําสั่ง Azure CLI นี้:
az login --use-device-codeดูการสมัครใช้งาน Azure ที่เลือก
az account show -o tableถ้าเลือกการสมัครใช้งานที่ไม่ถูกต้อง ให้ใช้คําสั่ง ชุดบัญชี az เพื่อเลือกรายการที่ถูกต้อง
เรียกใช้คําสั่ง Azure CLI ต่อไปนี้เพื่อรับรายการของภูมิภาค 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คําสั่งก่อนหน้านี้สร้างตัวแปรสภาพแวดล้อมที่คุณจะใช้ในคําสั่ง Azure CLI ถัดไป คุณต้องเปลี่ยน LOCATION เป็นภูมิภาค Azure ที่อยู่ใกล้กับคุณ เช่น eastus ถ้าคุณต้องการชื่ออื่นสําหรับกลุ่มทรัพยากรของคุณ คลัสเตอร์ AKS หรือ ACR ให้เปลี่ยนค่าเหล่านั้น หากต้องการดูที่เก็บข้อมูลใหม่ของคุณในพอร์ทัล Azure ให้กําหนดตัวเองเป็นผู้ดูแลระบบการปฏิบัติตามกฎระเบียบของแอป ใน ควบคุมการเข้าถึง (IAM) ของรีจิสทรีคอนเทนเนอร์
เรียกใช้คําสั่ง Azure CLI เหล่านี้:
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 ใหม่ของคุณได้ คัดลอก URL 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.ymlkubectlใช้คําสั่งปรับใช้แอป eShop, เว็บแอป Blazor front-end และบริการผลิตภัณฑ์ 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ตรวจสอบว่ามีการปรับใช้ microservices ทั้งสองด้วยคําสั่งนี้:
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 Registry ได้ ตัวเรียกใช้ GitHub จึงต้องมีสิทธิ์ในการเชื่อมต่อกับ Azure ขั้นตอนต่อไปนี้สร้างบริการหลัก Azure AD เพื่อทําหน้าที่เป็นข้อมูลประจําตัวการดําเนินการ GitHub ภายใน Azure
เมื่อต้องการบันทึก ID การสมัครใช้งานของคุณในตัวแปรสภาพแวดล้อม ให้เรียกใช้คําสั่งต่อไปนี้ในเทอร์มินัล:
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 ใช้ข้อมูลประจําตัวเพื่อโต้ตอบกับรีจิสทรีคอนเทนเนอร์และ AKS บริการหลักและข้อมูลประจําตัวสําหรับรีจิสทรีคอนเทนเนอร์เป็นข้อมูลที่สําคัญ ทางที่ดีควรจัดเก็บข้อมูลที่ละเอียดอ่อนเป็น ความลับที่ เข้ารหัสไว้ในตําแหน่งที่ปลอดภัย GitHub มีตําแหน่งที่ตั้งในตัวเพื่อจัดเก็บข้อมูลลับและตัวแปรอื่น ๆ
ทําตามขั้นตอนต่อไปนี้เพื่อจัดเก็บข้อมูลที่สําคัญเป็นตัวแปรสภาพแวดล้อมในที่เก็บของคุณได้อย่างปลอดภัย ผู้ดูแลระบบที่เก็บควรจัดการข้อมูลลับที่ตัวเรียกใช้การดําเนินการ GitHub สามารถเข้าถึงได้
ในที่เก็บ GitHub ที่ถูกทําขึ้นของคุณ ไปที่ Settings>Secrets and variables>Actions
บนหน้า Actions secrets and variables ให้เลือก New repository secret
บน New secret หน้า ภายใต้ Nameป้อน AZURE_CREDENTIALS และภายใต้ Secretให้ป้อนผลลัพธ์ JSON ที่คุณคัดลอกจากเทอร์มินัล
การตั้งค่าควรมีลักษณะคล้ายกับสกรีนช็อตต่อไปนี้:
เลือก Add secret
คุณจะใช้ข้อมูลลับของ GitHub นี้ในส่วนถัดไปเพื่อสร้างการดําเนินการ GitHub เพื่อสร้างรูปภาพคอนเทนเนอร์