当前位置: 首页 > 工具软件 > autoscaler > 使用案例 >

在AWS EKS中部署Vertical Pod Autoscaler

百里阳平
2023-12-01

Vertical Pod Autoscaler介绍

Kubernetes Vertical Pod Autoscaler 为 Pod 自动调整 CPU 和内存预留,以帮助实现“合适规模”的应用程序。此调整可以帮助提高集群资源利用率并释放 CPU 和内存供其他 Pod 使用。本主题可帮助您将 Vertical Pod Autoscaler 部署到集群并验证它在正常工作。

Prerequisites

部署 Vertical Pod Autoscaler

部署 Vertical Pod Autoscaler

  1. 克隆 kubernetes/autoscaler GitHub 存储库。

    git clone https://github.com/kubernetes/autoscaler.git
    
  2. 切换到 vertical-pod-autoscaler 目录。

    cd autoscaler/vertical-pod-autoscaler/
    
  3. (可选)如果您已经部署另一个版本的 Vertical Pod Autoscaler,请使用以下命令将其删除。

    ./hack/vpa-down.sh
    
  4. 使用以下命令将 Vertical Pod Autoscaler 部署到您的集群。

    ./hack/vpa-up.sh
    
  5. 验证已成功创建 Vertical Pod Autoscaler Pod。

    kubectl get pods -n kube-system
    

    输出:

    NAME                                        READY   STATUS    RESTARTS   AGE
    aws-node-949vx                              1/1     Running   0          122m
    aws-node-b4nj8                              1/1     Running   0          122m
    coredns-6c75b69b98-r9x68                    1/1     Running   0          133m
    coredns-6c75b69b98-rt9bp                    1/1     Running   0          133m
    kube-proxy-bkm6b                            1/1     Running   0          122m
    kube-proxy-hpqm2                            1/1     Running   0          122m
    metrics-server-8459fc497-kfj8w              1/1     Running   0          83m
    vpa-admission-controller-68c748777d-ppspd   1/1     Running   0          7s
    vpa-recommender-6fc8c67d85-gljpl            1/1     Running   0          8s
    vpa-updater-786b96955c-bgp9d                1/1     Running   0          8s
    

测试 Vertical Pod Autoscaler 安装

测试 Vertical Pod Autoscaler 安装

  1. 使用以下命令部署 hamster.yaml Vertical Pod Autoscaler 示例。

    kubectl apply -f examples/hamster.yaml
    
  2. hamster 示例应用程序获取 Pod。

    kubectl get pods -l app=hamster
    

    输出:

    hamster-c7d89d6db-rglf5   1/1     Running   0          48s
    hamster-c7d89d6db-znvz5   1/1     Running   0          48s
    
  3. 描述一个 Pod 以查看其 CPU 和内存预留。

    kubectl describe pod hamster-<c7d89d6db-rglf5>
    

    输出:

    Name:           hamster-c7d89d6db-rglf5
    Namespace:      default
    Priority:       0
    Node:           ip-192-168-9-44.<region-code>.compute.internal/192.168.9.44
    Start Time:     Fri, 27 Sep 2019 10:35:15 -0700
    Labels:         app=hamster
                    pod-template-hash=c7d89d6db
    Annotations:    kubernetes.io/psp: eks.privileged
                    vpaUpdates: Pod resources updated by hamster-vpa: container 0:
    Status:         Running
    IP:             192.168.23.42
    IPs:            <none>
    Controlled By:  ReplicaSet/hamster-c7d89d6db
    Containers:
      hamster:
        Container ID:  docker://e76c2413fc720ac395c33b64588c82094fc8e5d590e373d5f818f3978f577e24
        Image:         k8s.gcr.io/ubuntu-slim:0.1
        Image ID:      docker-pullable://k8s.gcr.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1
        Port:          <none>
        Host Port:     <none>
        Command:
          /bin/sh
        Args:
          -c
          while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
        State:          Running
          Started:      Fri, 27 Sep 2019 10:35:16 -0700
        Ready:          True
        Restart Count:  0
        Requests:
          cpu:        100m
          memory:     50Mi
    ...
    

    可以看到原始 Pod 预留了 100 milliCPU 和 50 MiB 内存。对于本示例应用程序,100 millicpu 小于 Pod 运行所需的数量,因此 CPU 受限。它预留的内存也远小于所需的数量。Vertical Pod Autoscaler vpa-recommender 部署分析 hamster Pod 以查看 CPU 和内存需求是否合适。如果需要调整,vpa-updater 使用更新后的值重新启动 Pod。

  4. 等待 vpa-updater 启动新 hamster Pod。这大概需要一两分钟。您可以使用以下命令监控 Pod。

    kubectl get --watch pods -l app=hamster
    
  5. 当新 hamster Pod 启动时,描述它并查看更新后的 CPU 和内存预留。

    kubectl describe pod hamster-<c7d89d6db-jxgfv>
    

    输出:

    Name:           hamster-c7d89d6db-jxgfv
    Namespace:      default
    Priority:       0
    Node:           ip-192-168-9-44.<region-code>.compute.internal/192.168.9.44
    Start Time:     Fri, 27 Sep 2019 10:37:08 -0700
    Labels:         app=hamster
                    pod-template-hash=c7d89d6db
    Annotations:    kubernetes.io/psp: eks.privileged
                    vpaUpdates: Pod resources updated by hamster-vpa: container 0: cpu request, memory request
    Status:         Running
    IP:             192.168.3.140
    IPs:            <none>
    Controlled By:  ReplicaSet/hamster-c7d89d6db
    Containers:
      hamster:
        Container ID:  docker://2c3e7b6fb7ce0d8c86444334df654af6fb3fc88aad4c5d710eac3b1e7c58f7db
        Image:         k8s.gcr.io/ubuntu-slim:0.1
        Image ID:      docker-pullable://k8s.gcr.io/ubuntu-slim@sha256:b6f8c3885f5880a4f1a7cf717c07242eb4858fdd5a84b5ffe35b1cf680ea17b1
        Port:          <none>
        Host Port:     <none>
        Command:
          /bin/sh
        Args:
          -c
          while true; do timeout 0.5s yes >/dev/null; sleep 0.5s; done
        State:          Running
          Started:      Fri, 27 Sep 2019 10:37:08 -0700
        Ready:          True
        Restart Count:  0
        Requests:
          cpu:        587m
          memory:     262144k
    ...
    

    此时可以看到 CPU 预留提升到了 587 个 millicpu,这是原始值的五倍多。内存提高到了 262144 KB,即大约 250 MB,也就是原始值的五倍。此 Pod 资源不足,Vertical Pod Autoscaler 使用更为合适的值纠正了我们的估计值。

  6. 描述 hamster-vpa 资源以查看新的建议。

    kubectl describe vpa/hamster-vpa
    

    输出:

    Name:         hamster-vpa
    Namespace:    default
    Labels:       <none>
    Annotations:  kubectl.kubernetes.io/last-applied-configuration:
                    {"apiVersion":"autoscaling.k8s.io/v1beta2","kind":"VerticalPodAutoscaler","metadata":{"annotations":{},"name":"hamster-vpa","namespace":"d...
    API Version:  autoscaling.k8s.io/v1beta2
    Kind:         VerticalPodAutoscaler
    Metadata:
      Creation Timestamp:  2019-09-27T18:22:51Z
      Generation:          23
      Resource Version:    14411
      Self Link:           /apis/autoscaling.k8s.io/v1beta2/namespaces/default/verticalpodautoscalers/hamster-vpa
      UID:                 d0d85fb9-e153-11e9-ae53-0205785d75b0
    Spec:
      Target Ref:
        API Version:  apps/v1
        Kind:         Deployment
        Name:         hamster
    Status:
      Conditions:
        Last Transition Time:  2019-09-27T18:23:28Z
        Status:                True
        Type:                  RecommendationProvided
      Recommendation:
        Container Recommendations:
          Container Name:  hamster
          Lower Bound:
            Cpu:     550m
            Memory:  262144k
          Target:
            Cpu:     587m
            Memory:  262144k
          Uncapped Target:
            Cpu:     587m
            Memory:  262144k
          Upper Bound:
            Cpu:     21147m
            Memory:  387863636
    Events:          <none>
    
  7. 在完成对示例应用程序的试验后,使用以下命令可将其删除。

    kubectl delete -f examples/hamster.yaml
    
 类似资料: