如何水平自动缩放Kubernetes部署

时间:2019-04-08 16:57:11

标签: kubernetes terraform autoscaling

编辑:

解决方案::我忘记将target_cpu_utilization_percentage添加到autoscaler.tf文件中


我希望在Kubernetes上运行具有Python(或其他语言)的Web服务,但要具有自动缩放功能。

我创建了一个Deployment和一个Horizontal Autoscaler,但是没有用。

我正在使用Terraform配置Kubernetes。

我有以下文件:

Deployments.tf

resource "kubernetes_deployment" "rui-test" {
  metadata {
    name = "rui-test"
    labels {
      app  = "rui-test"
    }
  }
  spec {
    strategy = {
      type = "RollingUpdate"
      rolling_update = {
        max_unavailable = "26%" # This is not working
      }
    }
    selector = {
        match_labels = {
            app = "rui-test"
        }
    }
    template = {
      metadata = {
        labels = {
          app = "rui-test"
        }
      }
      spec = {
        container {
          name              = "python-test1"
          image             = "***************************"
        }
      }
    }
  }
}

Autoscaler.tf

resource "kubernetes_horizontal_pod_autoscaler" "test-rui" {    
  metadata {
    name = "test-rui"
  }
  spec {
    max_replicas = 10 # THIS IS NOT WORKING
    min_replicas = 3  # THIS IS NOT WORKING

    scale_target_ref {
      kind = "Deployment"
      name = "test-rui" # Name of deployment
    }
  }
}

Service.tf

resource "kubernetes_service" "rui-test" {
  metadata {
    name = "rui-test"
    labels {
      app  = "rui-test"
    }
  }
  spec {
    selector {
      app  = "rui-test"
    }
    type = "LoadBalancer"  # Use 'cluster_ip = "None"' or 'type = "LoadBalancer"'
    port {
      name = "http"
      port = 8080
    }
  }
}

当我运行kubectl get hpa时,我看到以下内容:

NAME       REFERENCE             TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
rui-test   Deployment/rui-test   <unknown>/80%   1         3         1          1h

代替:

rui-test   Deployment/rui-test   <unknown>/79%   3         10        1          1h

那就是我想要的。

但是如果我运行kubectl autoscale deployment rui-test --min=3 --max=10 --cpu-percent=81,我会看到:

Error from server (AlreadyExists): horizontalpodautoscalers.autoscaling "rui-test" already exists

在kubernetes中出现

enter image description here

2 个答案:

答案 0 :(得分:2)

您缺少metrics server。 Kubernetes需要确定当前的CPU /内存使用率,以便可以自动向上和向下缩放。

一种了解是否已安装指标服务器的方法是运行:

$ kubectl top node
$ kubectl top pod

答案 1 :(得分:1)

Horizo​​ntal Pod AutoScaler取决于为部署配置的资源限制。

来自documentation

  

请注意,如果某些容器的容器未设置相关的资源请求,则将不会定义容器的CPU利用率,并且自动缩放器不会对该指标采取任何操作。