练习 - 在 AKS 上启用群集可伸缩性

已完成

在 AKS 群集上启用群集自动缩放程序

  1. 在浏览器中打开 Azure Cloud Shell 并选择“Bash”

  2. 使用 az group create 命令创建 Azure 资源组。

    az group create --name myResourceGroup --location eastus
    
  3. 使用 az aks create 命令和 --enable-cluster-autoscaler 标志新建启用了群集自动缩放程序的 Azure Kubernetes 服务 (AKS) 群集。

    az aks create --resource-group myResourceGroup --name myAKSCluster --enable-addons monitoring --enable-msi-auth-for-monitoring --enable-cluster-autoscaler --min-count 1 --max-count 10 --generate-ssh-keys
    

    创建群集需要几分钟时间。

  4. 使用 az aks get-credentials 命令连接到群集。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  5. 使用 kubectl get nodes 命令查看群集中的节点。

    kubectl get nodes
    

    输出应类似于以下示例输出:

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-nodepool1-12345678-vmss000000   Ready    agent   1m    v1.26.6
    aks-nodepool1-12345678-vmss000001   Ready    agent   1m    v1.26.6
    aks-nodepool1-12345678-vmss000002   Ready    agent   1m    v1.26.6
    

部署示例应用程序

  1. 在 Cloud Shell 中,使用 touch 命令为名为 deployment.yml 的 Kubernetes 部署创建一个清单文件。

    touch deployment.yml
    
  2. 使用 code 命令打开该清单文件。

    code deployment.yml
    
  3. 将以下代码粘贴到清单文件中。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: contoso-website
    spec:
      replicas: 35
      selector:
        matchLabels:
          app: contoso-website
      template:
        metadata:
          labels:
            app: contoso-website
        spec:
          containers:
            - image: mcr.microsoft.com/mslearn/samples/contoso-website
              name: contoso-website
              resources:
                requests:
                  cpu: 100m
                  memory: 128Mi
                limits:
                  cpu: 250m
                  memory: 256Mi
              ports:
                - containerPort: 80
                  name: http
    
  4. 保存文件并关闭编辑器。

更新群集自动缩放程序配置文件

可通过在配置中设置一系列标志来微调自动缩放程序配置文件。 请在使用群集自动缩放程序配置文件中查看可用标志的列表。 对于此示例,需要更新自动缩放程序来缩短检查挂起状态的 Pod 的轮询时间,并减少在从以前的状态纵向缩减之前需要等待的时间量。

  1. 使用带有 --cluster-autoscaler-profile 标志的 az aks update 命令更新群集自动缩放程序配置文件。

    az aks update --resource-group myResourceGroup --name myAKSCluster --cluster-autoscaler-profile scan-interval=5s scale-down-unready-time=5m scale-down-delay-after-add=5m
    
  2. 使用 kubectl scale deployment 命令纵向缩减部署。

    kubectl scale deployment contoso-website --replicas 5
    
  3. 使用 kubectl describe cm 命令检查群集自动缩放程序日志并查询“群集自动缩放程序状态”配置映射。

    kubectl describe cm cluster-autoscaler-status -n kube-system
    

    在纵向缩减之前,输出应类似于下面的示例输出:

    Cluster-autoscaler status at 2023-11-09 20:08:14.892961701 +0000 UTC:
    Cluster-wide:
      Health:      Healthy (ready=3 unready=0 notStarted=0 longNotStarted=0 registered=3 longUnregistered=0)
                   LastProbeTime:      2023-11-09 19:56:57.890988498 +0000 UTC m=+1673.465985892
                   LastTransitionTime: 2023-11-09 19:45:09.593593337 +0000 UTC m=+774.168590731
      ScaleUp:     NoActivity (ready=3 registered=3)
                   LastProbeTime:      2023-11-09 19:56:57.890988498 +0000 UTC m=+1673.465985892
                   LastTransitionTime: 2023-11-09 19:45:09.593593337 +0000 UTC m=+774.168590731
      ScaleDown:   CandidatesPresent (candidates=3)
                   LastProbeTime:      2023-11-09 19:56:57.890988498 +0000 UTC m=+1673.465985892
                   LastTransitionTime: 2023-11-09 19:56:52.440038763 +0000 UTC m=+1101.015036157
    
  4. 等待大约 5 分钟,让自动缩放程序完成纵向缩减,然后重新运行上一个 kubectl describe cm

    在纵向缩减后,输出应类似于下面的示例输出:

    Cluster-autoscaler status at 2023-11-09 20:14:39.123206413 +0000 UTC:
    Cluster-wide:
      Health:      Healthy (ready=1 unready=0 (resourceUnready=0) notStarted=0 longNotStarted=0 registered=1 longUnregistered=0)
                   LastProbeTime:      2023-11-09 20:14:39.113206413 +0000 UTC m=+2150.697175601
                   LastTransitionTime: 2023-11-09 19:45:09.593593337 +0000 UTC m=+774.168590731
      ScaleUp:     NoActivity (ready=1 registered=1)
                   LastProbeTime:      2023-11-09 20:14:39.113206413 +0000 UTC m=+2150.697175601
                   LastTransitionTime: 2023-11-09 19:45:09.593593337 +0000 UTC m=+774.168590731
      ScaleDown:   NoCandidates (candidates=0)
                   LastProbeTime:      2023-11-09 20:14:39.113206413 +0000 UTC m=+2150.697175601
                   LastTransitionTime: 2023-11-09 20:07:08.79828656 +0000 UTC m=+1718.924760896
    
  5. 使用 kubectl get nodes 命令查看群集中的节点。

    kubectl get nodes
    

    输出应类似于以下示例输出,其中节点数减少到 1 个:

    NAME                                STATUS   ROLES   AGE   VERSION
    aks-nodepool1-12345678-vmss000000   Ready    agent   37m    v1.26.6