Как горизонтальное автоматическое масштабирование развертывания Kubernetes - PullRequest
1 голос
/ 08 апреля 2019

EDIT:

РЕШЕНИЕ: Я забыл добавить target_cpu_utilization_percentage в autoscaler.tf файл


Мне нужен веб-сервис на Python (или другом языке), работающий в Kubernetes, но с автоматическим масштабированием.

Я создал 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

В куберне появляются такие

enter image description here

Ответы [ 2 ]

2 голосов
/ 08 апреля 2019

Вам не хватает сервера метрик . Kubernetes должен определить текущее использование процессора / памяти, чтобы он мог автоматически масштабировать вверх и вниз.

Один из способов узнать, установлен ли у вас сервер метрик, - запустить:

$ kubectl top node
$ kubectl top pod
1 голос
/ 08 апреля 2019

Horizontal Pod AutoScaler зависит от ограничений ресурсов, настраиваемых для вашего развертывания.

Из документации :

Обратите внимание, что если в некоторых контейнерах модуля нет соответствующего набора запросов ресурсов, загрузка ЦП для модуля не будет определена, и автоскалер не будет предпринимать никаких действий для этого показателя.

...