帮助改进此页面
要帮助改进本用户指南,请选择位于每个页面右侧窗格中的在 GitHub 上编辑此页面链接。
Kubernetes Vertical Pod Autoscaler
-
您拥有现有 Amazon EKS 集群。如果没有,请参阅开始使用 Amazon EKS。
-
您已安装 Kubernetes Metrics Server。有关更多信息,请参阅 使用 Kubernetes Metrics Server 查看资源使用情况。
-
您使用的是配置为与 Amazon EKS 集群通信的
kubectl
客户端。 -
您的设备已安装 OpenSSL
1.1.1
或更高版本。
部署 Vertical Pod Autoscaler
在此部分中,您将部署 Vertical Pod Autoscaler 到集群。
-
打开终端窗口,导航到您要下载 Vertical Pod Autoscaler 源代码的目录。
-
克隆 kubernetes/autoscaler
GitHub 存储库。 git clone https://github.com/kubernetes/autoscaler.git
-
切换到
vertical-pod-autoscaler
目录。cd autoscaler/vertical-pod-autoscaler/
-
(可选)如果您已经部署另一个版本的 Vertical Pod Autoscaler,请使用以下命令将其删除。
./hack/vpa-down.sh
-
如果您的节点无权访问
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
-
使用以下命令将 Vertical Pod Autoscaler 部署到您的集群。
./hack/vpa-up.sh
-
验证已成功创建 Vertical Pod Autoscaler 容器组(pod)。
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 在正常运行。
-
使用以下命令部署
hamster.yaml
Vertical Pod Autoscaler 示例。kubectl apply -f examples/hamster.yaml
-
从
hamster
示例应用程序获取容器组(pod)。kubectl get pods -l app=hamster
示例输出如下。
hamster-c7d89d6db-rglf5 1/1 Running 0 48s hamster-c7d89d6db-znvz5 1/1 Running 0 48s
-
描述其中一个容器组(pod),查看其
cpu
和memory
预留。请将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 的 CPU 和 50 MiB 内存。对于本示例应用程序,100 millicpu 小于容器组(pod)运行所需的数量,因此 CPU 受限。它预留的内存也远小于所需的数量。Vertical Pod Autoscaler
vpa-recommender
部署会分析 hamster 容器组(pod),查看 CPU 和内存需求是否合适。如果需要调整,vpa-updater
使用更新后的值重新启动容器组(pod)。 -
等待
vpa-updater
启动新 hamster 容器组(pod)。这大概需要一两分钟。您可以使用以下命令监控容器组(pod)。注意
如果不确定是否启动了新容器组(pod),请将容器组名称与您之前的列表比较。新容器组(pod)启动时,您会看到新容器组(pod)名称。
kubectl get --watch Pods -l app=hamster
-
当新 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 使用更为合适的值纠正了估计值。 -
描述
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>
-
在完成对示例应用程序的试验后,使用以下命令可将其删除。
kubectl delete -f examples/hamster.yaml