本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Vertical Pod Autoscaler
Kubernetes Vertical Pod Autoscaler
安装 Metrics Server
Kubernetes Metrics Server 是集群中资源使用情况数据的聚合器。默认情况下它未部署在 Amazon EKS 集群中,但它提供了 Vertical Pod Autoscaler 所需的指标。本主题介绍了如何在 Amazon EKS 集群上部署 Kubernetes Metrics Server。
您也可以使用 Prometheus 为 Vertical Pod Autoscaler 提供指标。有关更多信息,请参阅Prometheus 的控制层面指标。
如果您已将 Metrics Server 部署到了集群,则可以转到下一部分。您可以使用以下命令检查 Metrics Server。
kubectl -n kube-system get deployment/metrics-server
如果此命令返回 NotFound
错误,则您必须将 Metrics Server 部署到 Amazon EKS 集群。
部署 Metrics Server
-
使用以下命令部署 Metrics Server:
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml
-
使用以下命令验证
metrics-server
部署是否运行所需数量的 Pod:kubectl get deployment metrics-server -n kube-system
输出
NAME READY UP-TO-DATE AVAILABLE AGE metrics-server 1/1 1 1 6m
部署 Vertical Pod Autoscaler
在此部分中,您将部署 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
-
如果您的集群不在 中国(北京) 或 中国 (宁夏) 区域中,请跳至步骤 6。使用以下步骤编辑
./vertical-pod-autoscaler/deploy
中的清单文件。-
查看您下载的一个或多个清单文件,并记下映像名称。使用以下命令在本地下载映像。
docker pull image:<tag>
-
使用以下命令标记要推送到中国区域内的 Amazon Elastic Container Registry 存储库的映像。
docker tag image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>
-
使用以下命令将映像推送到中国区域内的 Amazon ECR 存储库。
docker push image:<tag> <aws_account_id>.dkr.ecr.<cn-north-1>.amazonaws.com/image:<tag>
-
更新一个或多个 Kubernetes 清单文件或以引用您所在区域内的 Amazon ECR 映像 URL。
-
-
使用以下命令将 Vertical Pod Autoscaler 部署到您的集群。
./hack/vpa-up.sh
-
验证已成功创建 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 在正常运行。
测试 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 和内存预留。
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 个 CPU 和 50 MB 内存。对于本示例应用程序,100 millicpu 小于 Pod 运行所需的数量,因此 CPU 受限。它预留的内存也远小于所需的数量。Vertical Pod Autoscaler
vpa-recommender
部署分析hamster
Pod 以查看 CPU 和内存需求是否合适。如果需要调整,vpa-updater
使用更新后的值重新启动 Pod。 -
等待
vpa-updater
启动新hamster
Pod。这大概需要一两分钟。您可以使用以下命令监控 Pod。注意 如果您不确定已经启动了新 Pod,请将 Pod 名称与您之前的列表比较。新 Pod 启动时,您会看到新 Pod 名称。
kubectl get --watch pods -l app=hamster
-
当新
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 使用更为合适的值纠正了我们的估计值。
-
描述
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