Kubernetes VPA 自动调整 Pod 中容器的 CPU 和内存资源限制。不同于水平自动扩缩(HPA),它关注的是单个 Pod 的资源分配,而不是增加或减少 Pod 的数量。
场景描述:假设您有一个 Node.js 应用运行在 Kubernetes 上,您想要自动调整其资源配置,以适应不同的负载条件。
步骤:
部署 Node.js 应用:
首先,创建一个简单的 Node.js 应用部署:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nodejs-app
spec:
replicas: 1
selector:
matchLabels:
app: nodejs-app
template:
metadata:
labels:
app: nodejs-app
spec:
containers:
- name: nodejs
image: node:14
ports:
- containerPort: 8080
应用这个配置文件来创建部署:
kubectl apply -f nodejs-app-deployment.yaml
配置 VPA:
接下来,创建一个 VPA 配置来自动调整部署的资源配置:
apiVersion: autoscaling.k8s.io/v1
kind: VerticalPodAutoscaler
metadata:
name: nodejs-app-vpa
spec:
targetRef:
apiVersion: "apps/v1"
kind: Deployment
name: nodejs-app
updatePolicy:
updateMode: "Auto"
resourcePolicy:
containerPolicies:
- containerName: nodejs
minAllowed:
cpu: "250m"
memory: "128Mi"
maxAllowed:
cpu: "2"
memory: "1Gi"
这个 VPA 配置将自动调整 nodejs-app
部署的资源限制,在最小和最大限制范围内动态调整。
应用 VPA 配置:
使用以下命令应用 VPA 配置:
kubectl apply -f nodejs-app-vpa.yaml
监控和调整:
监控应用的性能和 VPA 的调整情况。如果需要,根据应用的具体表现调整 VPA 的配置。
通过这个案例,您可以看到如何为 Kubernetes 中的应用配置 VPA,以便根据实际负载自动调整其资源分配。这有助于确保应用始终有适当的资源来处理其工作负载,同时避免资源浪费。