如何更新 Kubernetes 自动缩放器?
How do I update a Kubernetes autoscaler?
我创建了一个 Kubernetes autoscaler,但我需要更改它的参数。我该如何更新它?
我尝试了以下方法,但都失败了:
✗ kubectl autoscale -f docker/production/web-controller.yaml --min=2 --max=6
Error from server: horizontalpodautoscalers.extensions "web" already exists
先删除自动缩放器,然后重新创建它:
✗ kubectl delete hpa web
✗ kubectl autoscale -f docker/production/web-controller.yaml --min=2 --max=6
您始终可以交互式编辑集群中的资源。对于名为 web
的自动缩放控制器,您可以通过以下方式编辑它:
kubectl edit hpa web
如果您正在寻找一种更具编程性的方式来更新您的水平 pod 自动缩放器,您最好也能在 yaml 文件中描述您的自动缩放器实体。例如,这是一个简单的 Replication Controller,与 Horizontal Pod Autoscale 实体配对:
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 2
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: nginx
namespace: default
spec:
maxReplicas: 3
minReplicas: 2
scaleTargetRef:
apiVersion: v1
kind: ReplicationController
name: nginx
使用名为 nginx.yaml
的文件中的这些内容,可以通过 kubectl apply -f nginx.yaml
.
更新自动缩放器
您也可以使用 kubectl patch 命令查看其当前状态
kubectl get hpa <autoscaler-name-here> -o json
示例输出:
{
"apiVersion": "autoscaling/v1",
"kind": "HorizontalPodAutoscaler",
"metadata": {
...
"name": "your-auto-scaler",
"namespace": "your-namespace",
...
},
"spec": {
"maxReplicas": 50,
"minReplicas": 2,
"scaleTargetRef": {
"apiVersion": "extensions/v1beta1",
"kind": "Deployment",
"name": "your-deployment"
},
"targetCPUUtilizationPercentage": 40
},
"status": {
"currentReplicas": 1,
"desiredReplicas": 2,
"lastScaleTime": "2017-12-13T16:23:41Z"
}
}
如果要更新最小副本数:
kubectl -n your-namespace patch hpa your-auto-scaler --patch '{"spec":{"minReplicas":1}}'
相同的逻辑适用于自动缩放器配置中的其他参数,如果要更新允许的最大副本数,请将 minReplicas 更改为 maxReplicas。
我尝试了多种选择,但效果最好的是
先删除已有的hpa
kubectl delete hpa web
然后再创建一个
kubectl autoscale -f docker/production/web-controller.yaml --min=2 --max=6
我创建了一个 Kubernetes autoscaler,但我需要更改它的参数。我该如何更新它?
我尝试了以下方法,但都失败了:
✗ kubectl autoscale -f docker/production/web-controller.yaml --min=2 --max=6
Error from server: horizontalpodautoscalers.extensions "web" already exists
先删除自动缩放器,然后重新创建它:
✗ kubectl delete hpa web
✗ kubectl autoscale -f docker/production/web-controller.yaml --min=2 --max=6
您始终可以交互式编辑集群中的资源。对于名为 web
的自动缩放控制器,您可以通过以下方式编辑它:
kubectl edit hpa web
如果您正在寻找一种更具编程性的方式来更新您的水平 pod 自动缩放器,您最好也能在 yaml 文件中描述您的自动缩放器实体。例如,这是一个简单的 Replication Controller,与 Horizontal Pod Autoscale 实体配对:
apiVersion: v1
kind: ReplicationController
metadata:
name: nginx
spec:
replicas: 2
template:
metadata:
labels:
run: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
name: nginx
namespace: default
spec:
maxReplicas: 3
minReplicas: 2
scaleTargetRef:
apiVersion: v1
kind: ReplicationController
name: nginx
使用名为 nginx.yaml
的文件中的这些内容,可以通过 kubectl apply -f nginx.yaml
.
您也可以使用 kubectl patch 命令查看其当前状态
kubectl get hpa <autoscaler-name-here> -o json
示例输出:
{
"apiVersion": "autoscaling/v1",
"kind": "HorizontalPodAutoscaler",
"metadata": {
...
"name": "your-auto-scaler",
"namespace": "your-namespace",
...
},
"spec": {
"maxReplicas": 50,
"minReplicas": 2,
"scaleTargetRef": {
"apiVersion": "extensions/v1beta1",
"kind": "Deployment",
"name": "your-deployment"
},
"targetCPUUtilizationPercentage": 40
},
"status": {
"currentReplicas": 1,
"desiredReplicas": 2,
"lastScaleTime": "2017-12-13T16:23:41Z"
}
}
如果要更新最小副本数:
kubectl -n your-namespace patch hpa your-auto-scaler --patch '{"spec":{"minReplicas":1}}'
相同的逻辑适用于自动缩放器配置中的其他参数,如果要更新允许的最大副本数,请将 minReplicas 更改为 maxReplicas。
我尝试了多种选择,但效果最好的是 先删除已有的hpa
kubectl delete hpa web
然后再创建一个
kubectl autoscale -f docker/production/web-controller.yaml --min=2 --max=6