Kubernetes Vertical Pod Autoscaler 为 Pod 自动调整 CPU 和内存预留,以帮助实现“合适规模”的应用程序。此调整可以帮助提高集群资源利用率并释放 CPU 和内存供其他 Pod 使用。本主题可帮助您将 Vertical Pod Autoscaler 部署到集群并验证它在正常工作。
Prerequisites
kubectl
客户端。部署 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
使用以下命令将 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 安装
使用以下命令部署 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 和 50 MiB 内存。对于本示例应用程序,100 millicpu 小于 Pod 运行所需的数量,因此 CPU 受限。它预留的内存也远小于所需的数量。Vertical Pod Autoscaler vpa-recommender
部署分析 hamster
Pod 以查看 CPU 和内存需求是否合适。如果需要调整,vpa-updater
使用更新后的值重新启动 Pod。
等待 vpa-updater
启动新 hamster
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