Назад к вопросам
Middle+
85
questionbank

Как настроить горизонтальный автоскейлер для подов на физическом сервере?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Horizontal Pod Autoscaler (HPA) автоматически масштабирует количество подов в Deployments или StatefulSets на основе наблюдаемой загрузки CPU или других метрик. На физическом сервере, если это единственный узел кластера Kubernetes или часть многоузлового кластера, процесс настройки аналогичен:

  1. Проверка предусловий:

    • Установлен и настроен кластер Kubernetes (kops, kubeadm, manual setup).
    • Развернут и настроен Metrics Server для сбора метрик использования ресурсов подами.
  2. Настройка Metrics Server: Ensure the Metrics Server is running:

    # Check if metrics-server is running
    kubectl get apiservice v1beta1.metrics.k8s.io -o yaml
    

    If not installed, deploy it. For example, using Helm or official manifests.

  3. Создание Deployment (если еще нет): Создайте Deployment для вашего приложения. Например:

    // deployment.yaml
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-app
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - name: my-container
            image: my-image
            resources:
              requests: // Важно установить запросы на ресурсы
                cpu: "100m"
                memory: "128Mi"
              limits: // Рекомендуется установить лимиты
                cpu: "200m"
                memory: "256Mi"
    
  4. Создание Horizontal Pod Autoscaler: Создайте объект HPA, который свяжет его с вашим Deployment. Вы можете указать целевую загрузку CPU или использовать кастомные метрики.

    • На основе CPU:
      // hpa.yaml
      apiVersion: autoscaling/v1
      kind: HorizontalPodAutoscaler
      metadata:
        name: my-app-hpa
      spec:
        scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: my-app
        minReplicas: 1 // Минимальное количество подов
        maxReplicas: 5 // Максимальное количество подов
        targetCPUUtilizationPercentage: 50 // Целевая загрузка CPU в процентах
      
    • На основе кастомных метрик (требуется адаптер метрик, e.g., Prometheus Adapter):
      // hpa-custom-metrics.yaml
      apiVersion: autoscaling/v2beta2
      kind: HorizontalPodAutoscaler
      metadata:
        name: my-app-hpa-custom
      spec:
        scaleTargetRef:
          apiVersion: apps/v1
          kind: Deployment
          name: my-app
        minReplicas: 1
        maxReplicas: 5
        metrics:
        - type: Pods
          pods:
            metric:
              name: my_custom_metric
            target:
              type: AverageValue
              averageValue: 10
      
  5. Применение конфигурации: Примените манифесты Deployment и HPA с помощью kubectl apply -f <filename>.

    # Apply deployment
    kubectl apply -f deployment.yaml
    
    # Apply HPA
    kubectl apply -f hpa.yaml
    
  6. Проверка статуса HPA: Проверьте статус HPA, чтобы убедиться, что он создан и контролирует ваш Deployment.

    # Get HPA status
    kubectl get hpa my-app-hpa
    

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

  7. Мониторинг: Мониторьте поведение HPA, изменяя нагрузку на приложение, чтобы увидеть, как он автоматически масштабирует поды.

На физическом сервере, который является узлом Kubernetes, HPA работает так же, как и в других средах, полагаясь на метрики, предоставляемые Metric Server, для определения необходимости масштабирования. Важно правильно настроить запросы на ресурсы в манифесте Deployment, так как HPA на основе CPU использует эти запросы для расчета целевого использования.