Vertical Pod Autoscaler - Amazon EKS

帮助改进此页面

想为本用户指南做出贡献? 滚动到页面底部,然后选择在 GitHub 上编辑此页面。您的贡献有助于我们的用户指南为每个人提供更充分的参考。

Vertical Pod Autoscaler

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

先决条件

部署 Vertical Pod Autoscaler

在此部分中,您将部署 Vertical Pod Autoscaler 到集群。

部署 Vertical Pod Autoscaler
  1. 打开终端窗口,导航到您要下载 Vertical Pod Autoscaler 源代码的目录。

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

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

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

    ./hack/vpa-down.sh
  5. 如果您的节点无权访问 registry.k8s.io 容器注册表,则您需要提取下面的镜像并将它们推送到自己的私有存储库。有关如何提取镜像并将它们推送到您自己的私有存储库的更多信息,请参阅 将容器镜像从一个存储库复制到另一个存储库

    registry.k8s.io/autoscaling/vpa-admission-controller:0.10.0 registry.k8s.io/autoscaling/vpa-recommender:0.10.0 registry.k8s.io/autoscaling/vpa-updater:0.10.0

    如果要将镜像推送到私有 Amazon ECR 存储库,请将清单中的 registry.k8s.io 替换为您的注册表。请将 111122223333 替换为您的账户 ID。region-code 替换为集群所在的 AWS 区域。以下命令假定您将存储库命名为与清单中的存储库名称相同。如果已将存储库命名为其他名称,则也需要进行更改。

    sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/admission-controller-deployment.yaml sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/recommender-deployment.yaml sed -i.bak -e 's/registry.k8s.io/111122223333.dkr.ecr.region-code.amazonaws.com/' ./deploy/updater-deployment.yaml
  6. 使用以下命令将 Vertical Pod Autoscaler 部署到您的集群。

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

    kubectl get pods -n kube-system

    示例输出如下。

    NAME READY STATUS RESTARTS AGE [...] 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 在正常运行。

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

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

    kubectl get pods -l app=hamster

    示例输出如下。

    hamster-c7d89d6db-rglf5   1/1     Running   0          48s
    hamster-c7d89d6db-znvz5   1/1     Running   0          48s
  3. 描述其中一个 Pods 以查看其 cpumemory 预留。请将 c7d89d6db-rglf5 替换为上一步输出中返回的 ID 之一。

    kubectl describe pod hamster-c7d89d6db-rglf5

    示例输出如下。

    [...]
    Containers:
      hamster:
        Container ID:  docker://e76c2413fc720ac395c33b64588c82094fc8e5d590e373d5f818f3978f577e24
        Image:         registry.k8s.io/ubuntu-slim:0.1
        Image ID:      docker-pullable://registry.k8s.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 Pods,以查看 CPU 和内存需求是否合适。如果需要调整,vpa-updater 使用更新后的值重新启动 Pods。

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

    注意

    如果您不确定已经启动了新 Pod,请将 Pod 名称与您之前的列表比较。新 Pod 启动时,您会看到新 Pod 名称。

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

    kubectl describe pod hamster-c7d89d6db-jxgfv

    示例输出如下。

    [...]
    Containers:
      hamster:
        Container ID:  docker://2c3e7b6fb7ce0d8c86444334df654af6fb3fc88aad4c5d710eac3b1e7c58f7db
        Image:         registry.k8s.io/ubuntu-slim:0.1
        Image ID:      docker-pullable://registry.k8s.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,这是原始值的五倍多。memory 提高到了 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