ปรับใช้แอประบบคลาวด์แบบดั้งเดิมของคุณกับบริการ 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 ของคุณเอง จากนั้นจึงทําทางสปอตใหม่ของคุณ:

  1. เลือก รหัส
  2. เลือกแท็บ Codespaces
  3. เลือกไอคอน + เพื่อสร้างพื้นที่โค้ดของคุณ

GitHub ใช้เวลาหลายนาทีในการสร้างและกําหนดค่า codespace เมื่อกระบวนการเสร็จสมบูรณ์ คุณจะเห็นไฟล์โค้ดสําหรับแบบทดสอบ

ตัวเลือก: Visual Studio Code Setup

เพื่อใช้ Visual Studio Codeทําเอกสารที่เก็บข้อมูล https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative-devops ไปยังบัญชี GitHub ของคุณเอง และลอกแบบภายในเครื่อง Then:

  1. ติดตั้ง ความต้องการของระบบ เพื่อเรียกใช้ Dev Container ใน Visual Studio Code
  2. ตรวจสอบให้แน่ใจว่า Docker ทํางานอยู่
  3. ในหน้าต่าง Visual Studio Code ใหม่ ให้เปิดโฟลเดอร์ของที่เก็บข้อมูลที่ถูกลอกแบบ
  4. กด Ctrl Shift++P เพื่อเปิดจานคําสั่ง
  5. ค้นหา: คอนเทนเนอร์ Dev >: สร้างใหม่และเปิดใหม่อีกครั้งใน คอนเทนเนอร์
  6. รหัส Visual Studio สร้างคอนเทนเนอร์การพัฒนาของคุณภายในเครื่อง

สร้างคอนเทนเนอร์

  1. ในบานหน้าต่างเทอร์มินัล ให้เรียกใช้คําสั่ง dotnet CLI นี้:

    dotnet publish /p:PublishProfile=DefaultContainer 
    

สร้างทรัพยากร Azure

  1. ในบานหน้าต่างเทอร์มินัล ให้ลงชื่อเข้าใช้ Azure ด้วยคําสั่ง Azure CLI นี้:

    az login --use-device-code
    
  2. ดูการสมัครใช้งาน Azure ที่เลือก

    az account show -o table
    

    ถ้าเลือกการสมัครใช้งานที่ไม่ถูกต้อง ให้ใช้คําสั่ง ชุดบัญชี az เพื่อเลือกรายการที่ถูกต้อง

  3. เรียกใช้คําสั่ง Azure CLI ต่อไปนี้เพื่อรับรายการของภูมิภาค Azure และชื่อที่เกี่ยวข้อง:

    az account list-locations -o table
    

    ค้นหาภูมิภาคที่ใกล้เคียงคุณที่สุดและใช้ในขั้นตอนถัดไปโดยแทนที่ [Closest Azure region]

  4. เรียกใช้คําสั่ง 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) ของรีจิสทรีคอนเทนเนอร์

  5. เรียกใช้คําสั่ง 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
    
  6. หากต้องการแท็กรูปภาพของคุณและส่งไปยัง 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
    
  7. สร้าง 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 คําสั่งอาจใช้เวลาสักครู่เพื่อทําให้เสร็จสมบูรณ์

  8. ตรวจสอบว่า 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

  9. ตรวจสอบสถานะของคลัสเตอร์ AKS ของคุณ:

    kubectl get nodes -A
    

    คุณควรเห็นผลลัพธ์ที่คล้ายกับข้อความต่อไปนี้:

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-37200563-vmss000000   Ready    agent   3h44m   v1.26.6
    

กําหนดค่ารายการการปรับใช้ Kubernetes

ตอนนี้รูปภาพ eShop อยู่ใน ACR คุณสามารถอัปเดตรายการการปรับใช้ AKS เพื่อใช้รูปภาพใหม่เหล่านี้ได้

  1. ใน Visual Studio Code หรือ Codespaces จากแผง EXPLORER ให้เลือกไฟล์ deployment.yml ในรากของโครงการ

  2. แทนที่ในบรรทัด 17:

    - image: [replace with your ACR name].azurecr.io/storeimage:v1
    

    วางชื่อ ACR ที่คัดลอกจากขั้นตอนก่อนหน้า – บรรทัดควรมีลักษณะคล้ายกับ yaml ต่อไปนี้:

    - image: acseshop1251599299.azurecr.io/storeimage:v1
    
  3. ทําซ้ําขั้นตอนเหล่านี้สําหรับบรรทัด 65:

    - image: [replace with your ACR name].azurecr.io/productservice:v1
    

    บันทึกไฟล์ด้วย CTRL+S

  4. ในบานหน้าต่างเทอร์มินัล ให้ปรับใช้ตัวควบคุมการเข้าถึง 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
    
  5. ปรับใช้แอป eShop ด้วยคําสั่งนี้:

    kubectl apply -f deployment.yml
    

    kubectl ใช้คําสั่งปรับใช้แอป 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
    
  6. ตรวจสอบว่ามีการปรับใช้ 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
    
  7. ดู eShop ที่ปรับใช้ด้วยคําสั่งนี้:

    echo "http://$(kubectl get services --namespace ingress-nginx ingress-nginx-controller --output jsonpath='{.status.loadBalancer.ingress[0].ip}')"
    

    คําสั่งส่งกลับที่อยู่ IP ภายนอกสําหรับเว็บแอป กด CTRL ค้างไว้แล้วคลิกลิงก์เพื่อเปิดแอปในแท็บใหม่

    สกรีนช็อตของหน้าแรกของเว็บแอป eShop

สร้างบริการหลักสําหรับการปรับใช้จาก GitHub

การดําเนินการ GitHub สามารถเผยแพร่รูปภาพคอนเทนเนอร์ไปยัง Azure Container Registry ได้ ตัวเรียกใช้ GitHub จึงต้องมีสิทธิ์ในการเชื่อมต่อกับ Azure ขั้นตอนต่อไปนี้สร้างบริการหลัก Azure AD เพื่อทําหน้าที่เป็นข้อมูลประจําตัวการดําเนินการ GitHub ภายใน Azure

  1. เมื่อต้องการบันทึก ID การสมัครใช้งานของคุณในตัวแปรสภาพแวดล้อม ให้เรียกใช้คําสั่งต่อไปนี้ในเทอร์มินัล:

    export SUBS=$(az account show --query 'id' --output tsv)
    
  2. หากต้องการสร้างบริการหลัก 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/"
    }
    
  3. คัดลอกเอาต์พุต JSON และวงเล็บเพื่อใช้ในขั้นตอนถัดไป

สร้างข้อมูลลับของ GitHub

ตัวเรียกใช้การดําเนินการ GitHub ใช้ข้อมูลประจําตัวเพื่อโต้ตอบกับรีจิสทรีคอนเทนเนอร์และ AKS บริการหลักและข้อมูลประจําตัวสําหรับรีจิสทรีคอนเทนเนอร์เป็นข้อมูลที่สําคัญ ทางที่ดีควรจัดเก็บข้อมูลที่ละเอียดอ่อนเป็น ความลับที่ เข้ารหัสไว้ในตําแหน่งที่ปลอดภัย GitHub มีตําแหน่งที่ตั้งในตัวเพื่อจัดเก็บข้อมูลลับและตัวแปรอื่น ๆ

ทําตามขั้นตอนต่อไปนี้เพื่อจัดเก็บข้อมูลที่สําคัญเป็นตัวแปรสภาพแวดล้อมในที่เก็บของคุณได้อย่างปลอดภัย ผู้ดูแลระบบที่เก็บควรจัดการข้อมูลลับที่ตัวเรียกใช้การดําเนินการ GitHub สามารถเข้าถึงได้

  1. ในที่เก็บ GitHub ที่ถูกทําขึ้นของคุณ ไปที่ Settings>Secrets and variables>Actions

  2. บนหน้า Actions secrets and variables ให้เลือก New repository secret

  3. บน New secret หน้า ภายใต้ Nameป้อน AZURE_CREDENTIALS และภายใต้ Secretให้ป้อนผลลัพธ์ JSON ที่คุณคัดลอกจากเทอร์มินัล

    การตั้งค่าควรมีลักษณะคล้ายกับสกรีนช็อตต่อไปนี้:

    สกรีนช็อตของหน้าข้อมูลลับใหม่เพื่อตั้งค่าความลับของตัวแปรสภาพแวดล้อมใน GitHub

  4. เลือก Add secret

คุณจะใช้ข้อมูลลับของ GitHub นี้ในส่วนถัดไปเพื่อสร้างการดําเนินการ GitHub เพื่อสร้างรูปภาพคอนเทนเนอร์