練習 - 建立您的 HorizontalPodAutoscaler
練習 - 調整應用程式
建立 AKS 叢集
您必須先建立具有必要資源的 AKS 叢集,才能開始調整應用程式。
使用您想要將資源部署到的帳戶登入 Azure Cloud Shell ,然後選取 Bash 作為執行中的殼層。
使用
az group create
命令建立資源群組。 下列範例會在位置中eastus
建立名為myResourceGroup
的資源群組:az group create --name myResourceGroup --location eastus
使用
az aks create
命令建立 AKS 叢集。 下列範例會在資源群組中建立名為myAKSCluster
的myResourceGroup
叢集。 叢集有一個節點,並使用Standard_DS2_v2
VM 大小。az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 1 --node-vm-size Standard_DS2_v2 --enable-app-routing --generate-ssh-keys
此命令需要幾分鐘的時間來完成。
使用
az aks get-credentials
命令取得叢集的認證。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
確認叢集正在執行,而且您可以使用 命令連線到叢
kubectl get nodes
集。kubectl get nodes
此命令應該會傳回狀態為的
Ready
一個節點。
部署應用程式資源
現在您已擁有叢集,您可以將應用程式部署至叢集。
部署應用程式
使用
kubectl create namespace
命令建立應用程式命名空間。kubectl create namespace hpa-contoso
在 Cloud Shell 編輯器中建立名為
deployment.yml
的新檔案,並將下列 YAML 程式代碼貼到其中:apiVersion: apps/v1 kind: Deployment metadata: name: contoso-website namespace: hpa-contoso spec: replicas: 1 selector: matchLabels: app: contoso-website template: metadata: labels: app: contoso-website spec: containers: - name: contoso-website image: mcr.microsoft.com/mslearn/samples/contoso-website resources: requests: cpu: 100m memory: 128Mi limits: cpu: 250m memory: 256Mi ports: - containerPort: 80
儲存檔案。
使用
kubectl apply
命令將應用程式部署至叢集。kubectl apply -f deployment.yml
您的輸出看起來應類似下列範例輸出:
deployment.apps/contoso-website created
建立 DNS 區域並部署輸入資源
使用
az network dns zone create
命令建立 Azure DNS 區域。 下列範例會建立名為 contoso-website.com 的 DNS 區域:az network dns zone create --resource-group myResourceGroup --name contoso-website.com
使用
az network dns zone show
命令取得 DNS 區域的資源識別碼,並將輸出儲存至名為 DNS_ZONE_ID 的變數。DNS_ZONE_ID=$(az network dns zone show --resource-group myResourceGroup --name contoso-website.com --query id --output tsv)
更新應用程式路由叢集附加元件,以使用
az aks approuting zone
命令啟用 Azure DNS 整合。az aks approuting zone add --resource-group myResourceGroup --name myAKSCluster --ids=${DNS_ZONE_ID} --attach-zones
在 Cloud Shell 編輯器中建立名為
ingress.yml
的檔案,並將下列 YAML 程式代碼貼入其中。 請確定您將佔位元取代<dns-zone-name>
為 DNS 區域的名稱。apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: contoso-website namespace: hpa-contoso annotations: spec: ingressClassName: webapprouting.kubernetes.azure.com rules: - host: <dns-zone-name> http: paths: - backend: service: name: contoso-website port: number: 80 path: / pathType: Prefix
儲存檔案。
使用
kubectl apply
命令將輸入資源部署至叢集。kubectl apply -f ingress.yml
您的輸出看起來應類似下列範例輸出:
ingress.networking.k8s.io/contoso-website created
建立服務資源
在 Cloud Shell 編輯器中建立名為
service.yml
的檔案,並將下列 YAML 程式代碼貼入其中:apiVersion: v1 kind: Service metadata: name: contoso-website namespace: hpa-contoso spec: type: ClusterIP ports: - port: 80 targetPort: 80 selector: app: contoso-website
儲存檔案。
使用
kubectl apply
命令將服務資源部署至叢集。kubectl apply -f service.yml
您的輸出看起來應類似下列範例輸出:
service/contoso-website created
建立 HorizontalPodAutoscaler
在 Cloud Shell 編輯器中建立名為
hpa.yml
的檔案,並將下列 YAML 程式代碼貼入其中:apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: contoso-website namespace: hpa-contoso spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: contoso-website minReplicas: 1 maxReplicas: 10 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 20 - type: Resource resource: name: memory target: type: Utilization averageUtilization: 50
請務必指出
scaleTargetRef
索引鍵必須與所建立的部署資源相同。 在您的案例中,您所建立的部署具有apiVersion
,apps/v1
且稱為contoso-website
。 此 HPA 已設定為查詢原生 CPU 計量。 如果此計量超過指定時間的 20% 平均值,則會在單位中調整部署。 用來計算此計量的演算法是根據此數學方程式:desiredReplicas = ceil[currentReplicas * ( currentMetricValue / desiredMetricValue )]
minReplicas
和maxReplicas
索引鍵會定義部署可擁有的複本數目下限和上限。 金鑰metrics
會定義 HPA 查詢用來調整部署的計量。 在此情況下,HPA 會查詢CPU和記憶體計量。 如果 CPU 計量超過 20%,或記憶體計量超過 50%,HPA 就會相應放大部署。儲存檔案。
使用
kubectl apply
命令建立 HPA。kubectl apply -f hpa.yml
您的輸出看起來應類似下列範例輸出:
horizontalpodautoscaler.autoscaling/contoso-website created
檢查結果
使用
kubectl get hpa
命令查詢 HPA 的計量和使用方式。kubectl get hpa --namespace hpa-contoso
您的輸出看起來應類似下列範例輸出:
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE contoso-website Deployment/contoso-website 0%/20%, 0%/50% 1 10 1 83s
請注意數據
TARGETS
行。 它會顯示 HPA 中定義的計量目前使用量。 在此情況下,CPU 使用量為 0%,記憶體使用量為 0%。 這是因為應用程式未接收任何流量。注意
HPA 可能會在嘗試到達計量 API 以從伺服器擷取這些計量時,顯示其前幾秒的
unknown
計量。