การปรับใช้ภาระงานบน AKS
สร้างคลัสเตอร์ AKS ปรับใช้แอปพลิเคชันหลายคอนเทนเนอร์โดยใช้ kubectl และแผนภูมิ Helm และเปิดให้เข้าถึงจากภายนอกด้วยบริการ Azure Load Balancer
การปรับใช้ภาระงานบน AKS เป็นบทเรียน Cloud & IT Cert Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cloud & IT Cert Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
Azure Kubernetes Service คืออะไร
Azure Kubernetes Service (AKS) คือบริการ Kubernetes แบบมีการจัดการ ซึ่ง Microsoft เป็นผู้ดำเนินการและดูแลระนาบควบคุม (เซิร์ฟเวอร์ API, etcd และตัวจัดตาราง) โดยไม่มีค่าใช้จ่าย คุณจ่ายเฉพาะโหนดผู้ปฏิบัติงาน (VM) เท่านั้น AKS จัดการการอัปเกรดเวอร์ชัน Kubernetes การแพตช์ระบบปฏิบัติการของโหนด การปรับขนาดระนาบควบคุม และการผสานรวมกับเครือข่าย พื้นที่จัดเก็บ และข้อมูลประจำตัวของ Azure ให้โดยอัตโนมัติ ซึ่งช่วยลดภาระงานด้านการดำเนินงานในการใช้งาน Kubernetes จริงได้อย่างมาก
การสร้างคลัสเตอร์ AKS
สร้างคลัสเตอร์ AKS ด้วย az aks create โดยระบุจำนวนโหนด ขนาด VM และตัวเลือกเครือข่าย AKS จะสร้างกลุ่มทรัพยากรโหนดที่มี VM ดิสก์ที่มีการจัดการ NIC และตัวจัดสรรโหลดให้อัตโนมัติ โหมดเครือข่ายที่แนะนำคือ Azure CNI — พ็อดแต่ละตัวจะได้รับที่อยู่ IP ของ VNet จริง ทำให้เชื่อมต่อโดยตรงกับบริการ Azure อื่น ๆ ได้โดยไม่ต้องใช้ NAT
# Create an AKS cluster with 3 nodes
az aks create \
--name myAKSCluster \
--resource-group MyRG \
--location eastus \
--node-count 3 \
--node-vm-size Standard_D2s_v3 \
--enable-managed-identity \
--attach-acr mycontainerregistry \
--network-plugin azure \
--generate-ssh-keys
# Get kubectl credentials
az aks get-credentials --name myAKSCluster --resource-group MyRGกลุ่มโหนด
คลัสเตอร์ AKS สามารถมีกลุ่ม โหนด หลายกลุ่ม ซึ่งเป็นกลุ่ม VM ที่มีการกำหนดค่าเหมือนกัน กลุ่มโหนดระบบใช้เรียกใช้ส่วนประกอบระบบ Kubernetes ที่สำคัญ (พ็อด kube-system) ส่วน กลุ่มโหนดผู้ใช้ใช้เรียกใช้เวิร์กโหลดของแอปพลิเคชัน การแยกกลุ่มทำให้คุณผสม SKU ของ VM ได้ เช่น ใช้กลุ่มสำหรับงานทั่วไปกับเว็บแอป และกลุ่ม GPU กับเวิร์กโหลด ML และยังปรับขนาดแต่ละกลุ่มได้อย่างอิสระ
# Add a GPU node pool for ML workloads
az aks nodepool add \
--cluster-name myAKSCluster \
--resource-group MyRG \
--name gpupool \
--node-count 2 \
--node-vm-size Standard_NC6s_v3 \
--node-taints sku=gpu:NoSchedule
# List node pools
az aks nodepool list \
--cluster-name myAKSCluster \
--resource-group MyRG \
-o tableการนำแอปพลิเคชันหลายคอนเทนเนอร์ไปใช้งาน
นำแอปพลิเคชันแบบหลายระดับไปใช้งานบน AKS โดยเขียนไฟล์ข้อกำหนด Kubernetes แยกกันสำหรับแต่ละระดับ แล้วนำไปใช้ด้วย kubectl apply การนำไปใช้งานโดยทั่วไปประกอบด้วย การทำให้ใช้งานสำหรับระดับเว็บ, การทำให้ใช้งานสำหรับระดับ API, Servicesสำหรับเชื่อมต่อส่วนต่าง ๆ, ConfigMapสำหรับการกำหนดค่าสภาพแวดล้อม และทรัพยากร Ingressสำหรับเปิดเผยแอปภายนอกผ่านชื่อโฮสต์เดียว
# Apply all manifests in a directory
kubectl apply -f k8s/
# Or apply individual files
kubectl apply -f frontend-deployment.yaml
kubectl apply -f frontend-service.yaml
kubectl apply -f api-deployment.yaml
kubectl apply -f api-service.yaml
kubectl apply -f ingress.yaml
# Watch rollout status
kubectl rollout status deployment/frontend
kubectl rollout status deployment/apiIngress และ Application Gateway
ทรัพยากร Ingressกำหนดกฎการกำหนดเส้นทาง HTTP ซึ่งจับคู่ชื่อโฮสต์และเส้นทาง URL กับบริการแบ็กเอนด์ ต่างจากบริการ LoadBalancer ที่มี IP ภายนอกหนึ่งรายการต่อหนึ่งบริการ ตัวควบคุม Ingress เดียวจะจัดการการรับส่งข้อมูล HTTP จากภายนอกทั้งหมดและกำหนดเส้นทางตามกฎ ใน AKS ให้ใช้ ตัวควบคุม NGINX Ingress หรือ ตัวควบคุม Application Gateway Ingress (AGIC) เพื่อสิ้นสุดการเชื่อมต่อ TLS และกำหนดเส้นทางการรับส่งข้อมูลไปยังหลายบริการ
# Ingress routing traffic to two services by path
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: myapp-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
ingressClassName: nginx
tls:
- hosts: [myapp.contoso.com]
secretName: myapp-tls
rules:
- host: myapp.contoso.com
http:
paths:
- path: /api
pathType: Prefix
backend:
service: {name: api-svc, port: {number: 80}}
- path: /
pathType: Prefix
backend:
service: {name: frontend-svc, port: {number: 80}}แพ็กเกจ Helm สำหรับจัดชุดแอปพลิเคชัน
เฮล์มเป็นตัวจัดการแพ็กเกจสำหรับ Kubernetes โดย แผนภูมิจะรวมไฟล์ข้อกำหนด Kubernetes ทั้งหมดของแอปพลิเคชัน (การทำให้ใช้งาน, Services, Ingress และ ConfigMaps) เป็นแพ็กเกจเดียวที่กำหนดพารามิเตอร์ได้และมีเวอร์ชันกำกับ helm install จะนำแผนภูมิไปใช้งานพร้อมค่าที่เหมาะกับแต่ละสภาพแวดล้อม ที่เก็บ Helmบน Artifact Hub โฮสต์แผนภูมิที่สร้างไว้ล่วงหน้าหลายพันรายการสำหรับโครงสร้างพื้นฐานทั่วไป (NGINX, cert-manager, Prometheus และ Redis)
# Add the NGINX Ingress Controller chart repo
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
# Install NGINX Ingress Controller
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx \
--create-namespace \
--set controller.replicaCount=2
# Install your own app chart with custom values
helm install myapp ./charts/myapp -f values-prod.yamlการอัปเดตแบบทยอยและการย้อนกลับ
อัปเดตการทำให้ใช้งานโดยเปลี่ยนแท็กอิมเมจของคอนเทนเนอร์ — Kubernetes จะดำเนินการอัปเดตแบบทยอย โดยสร้างพ็อดใหม่ที่ใช้อิมเมจที่อัปเดตแล้วและยุติพ็อดเก่าทีละน้อย ทำให้แอปพลิเคชันพร้อมใช้งานตลอดเวลา หากเวอร์ชันใหม่มีปัญหา ให้ย้อนกลับไปยังการแก้ไขก่อนหน้าได้ทันทีด้วย kubectl rollout undo Kubernetes จะเก็บประวัติการแก้ไขของแต่ละการทำให้ใช้งานไว้ตามจำนวนที่กำหนดค่าได้
# Update the image to a new version
kubectl set image deployment/myapp \
myapp=mycontainerregistry.azurecr.io/myapp:v2.0
# Watch the rollout progress
kubectl rollout status deployment/myapp
# View rollout history
kubectl rollout history deployment/myapp
# Rollback to the previous version
kubectl rollout undo deployment/myapp
# Rollback to a specific revision
kubectl rollout undo deployment/myapp --to-revision=2ตัวปรับขนาดอัตโนมัติของคลัสเตอร์
Cluster Autoscalerจะเพิ่มหรือลบโหนดผู้ปฏิบัติงานจากกลุ่มโหนด AKS โดยอัตโนมัติ โดยพิจารณาจากการจัดตารางพ็อดที่รอดำเนินการและการใช้ทรัพยากรของโหนด เมื่อไม่สามารถจัดตารางพ็อดได้เนื่องจากโหนดเต็มทั้งหมด Cluster Autoscaler จะจัดสรรโหนดใหม่ เมื่อโหนดมีการใช้งานต่ำและสามารถรวมพ็อดเข้าด้วยกันได้ ระบบจะถ่ายพ็อดออกจากโหนดแล้วลบโหนดนั้น กลไกนี้ทำงานเสริมกับ Horizontal Pod Autoscaler โดย HPA จะปรับขนาดพ็อด ส่วน Cluster Autoscaler จะปรับขนาดโหนด
# Enable Cluster Autoscaler on the default node pool
az aks update \
--name myAKSCluster \
--resource-group MyRG \
--enable-cluster-autoscaler \
--min-count 2 \
--max-count 10
# Update autoscaler bounds on a specific node pool
az aks nodepool update \
--cluster-name myAKSCluster \
--resource-group MyRG \
--name nodepool1 \
--enable-cluster-autoscaler \
--min-count 3 \
--max-count 20การตรวจสอบ AKS ด้วย Azure Monitor
เปิดใช้ Azure Monitor Container Insights เพื่อรวบรวมบันทึกและเมตริกจากคลัสเตอร์ AKS โดยไม่ต้องนำเครื่องมือตรวจสอบจากผู้ให้บริการรายอื่นไปใช้งาน Container Insights มีแดชบอร์ดสำเร็จรูปสำหรับสถานะคลัสเตอร์, CPU และหน่วยความจำของโหนดกับพ็อด, บันทึกคอนเทนเนอร์ และการสตรีมพ็อดแบบสด นอกจากนี้ยังผสานรวมกับ Prometheus สำหรับดึงเมตริกแบบกำหนดเอง และอนุญาตให้สืบค้นข้อมูลทั้งหมดโดยใช้ KQL ใน Log Analytics
# Enable Azure Monitor Container Insights on AKS
az aks enable-addons \
--addons monitoring \
--name myAKSCluster \
--resource-group MyRG \
--workspace-resource-id /subscriptions/.../workspaces/MyLogAnalytics
# Stream live logs from a running pod
kubectl logs -f deployment/myapp -c myapp
# Query pod resource usage
kubectl top pods --namespace defaultRBAC ของ AKS และ Azure Active Directory
ผสานรวม AKS กับ Microsoft Entra ID เพื่อใช้ผู้ใช้และกลุ่ม Azure AD กับ RBAC ของ Kubernetes แทนการจัดการบัญชีผู้ใช้ Kubernetes แยกต่างหาก คุณสามารถกำหนดการผูก ClusterRoleหรือการผูกบทบาทให้กับ ID ออบเจ็กต์ของ Entra ID ได้ เมื่อผู้พัฒนาเรียกใช้ kubectl AKS จะตรวจสอบโทเค็น Entra ID ของผู้พัฒนา วิธีนี้ช่วยให้จัดการข้อมูลประจำตัวแบบรวมศูนย์ และผสานรวมกับนโยบายการเข้าถึงแบบมีเงื่อนไขและ MFA
# Enable Entra ID RBAC on an AKS cluster
az aks update \
--name myAKSCluster \
--resource-group MyRG \
--enable-azure-rbac
# Assign a built-in AKS role to an Entra group
az role assignment create \
--role 'Azure Kubernetes Service RBAC Reader' \
--assignee '<Entra-Group-Object-ID>' \
--scope /subscriptions/.../resourceGroups/MyRG/providers/Microsoft.ContainerService/managedClusters/myAKSClusterนโยบายเครือข่ายเพื่อความปลอดภัยระดับพ็อด
นโยบายเครือข่ายคือทรัพยากร Kubernetes ที่ควบคุมว่าพ็อดใดสามารถสื่อสารกับพ็อดอื่นได้ โดยค่าเริ่มต้น พ็อดทั้งหมดในคลัสเตอร์สามารถเข้าถึงพ็อดอื่น ๆ ได้ทั้งหมด นโยบายเครือข่ายทำหน้าที่เป็นไฟร์วอลล์ในระดับพ็อด บน AKS ให้เปิดใช้นโยบายเครือข่าย Azure หรือ Calico เพื่อบังคับใช้นโยบาย รูปแบบที่ใช้กันทั่วไปคือนโยบายปฏิเสธโดยค่าเริ่มต้น ซึ่งบล็อกการรับส่งข้อมูลระหว่างพ็อดทั้งหมด แล้วจึงสร้างนโยบายอนุญาตอย่างชัดเจนสำหรับเส้นทางเฉพาะที่แอปของคุณต้องใช้
# Default deny all ingress to pods in namespace
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: default-deny-ingress
namespace: production
spec:
podSelector: {} # Matches all pods
policyTypes:
- Ingress
# Allow API pods to receive from frontend pods only
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-allow-frontend
spec:
podSelector: {matchLabels: {app: api}}
ingress:
- from:
- podSelector: {matchLabels: {app: frontend}}ตรวจสอบความเข้าใจอย่างรวดเร็ว
ทดสอบความเข้าใจแนวคิด Microsoft Azure Fundamentals (AZ-900) จากบทเรียนนี้
สรุปบทเรียน
ในบทเรียนนี้ คุณได้เรียนรู้ว่า AKS คือบริการ Kubernetes แบบมีการจัดการที่ Microsoft เป็นผู้ดำเนินการระนาบควบคุม, แผนภูมิ Helmใช้จัดแพ็กเกจแอปพลิเคชัน Kubernetes ที่มีทรัพยากรหลายรายการเพื่อให้การนำไปใช้งานทำซ้ำได้ และ Cluster Autoscalerจะเพิ่มหรือลบโหนดแบบไดนามิกตามความต้องการในการจัดตารางพ็อด บทถัดไปเราจะสำรวจทริกเกอร์และการผูกของ Azure Functions
คำถามที่พบบ่อย
บทเรียน “การปรับใช้ภาระงานบน AKS” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การปรับใช้ภาระงานบน AKS” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cloud & IT Cert Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cloud & IT Cert Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การปรับใช้ภาระงานบน AKS”
สร้างคลัสเตอร์ AKS ปรับใช้แอปพลิเคชันหลายคอนเทนเนอร์โดยใช้ kubectl และแผนภูมิ Helm และเปิดให้เข้าถึงจากภายนอกด้วยบริการ Azure Load Balancer คุณปฏิบัติ Cloud & IT Cert Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cloud & IT Cert Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cloud & IT Cert Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การปรับใช้ภาระงานบน AKS” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Cloud & IT Cert Prep นี้ได้ไหม
ได้ บทเรียน Cloud & IT Cert Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Azure Container Registry
- Azure Container Instances
- แนวคิด Kubernetes สำหรับ Azure
- การปรับใช้ภาระงานบน AKS