如何更新 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,与 Horizo​​ntal 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