logo
Alauda Container Platform
English
Русский
English
Русский
logo
Alauda Container Platform
Навигация

Обзор

Архитектура
Примечания к выпуску

Установка

Обзор

Подготовка к установке

Предварительные требования
Загрузка
Предварительная обработка узлов
Установка
Восстановление после катастрофы для глобального кластера

Обновление

Обзор
Подготовка к обновлению
Обновление глобального кластера
Обновление рабочих кластеров

Пользовательский интерфейс

Веб-консоль

Обзор
Доступ к веб-консоли
Настройка веб-консоли
Настройка левой навигации

CLI Инструменты

ACP CLI (ac)

Начало работы с ACP CLI
Настройка ACP CLI
Использование команд ac и kubectl
Управление профилями CLI
Расширение ACP CLI с помощью плагинов
AC CLI Developer Command Reference
AC CLI Справочник команд администратора
violet CLI

Настройка

Конфигурация Feature Gate

Кластеры

Обзор
Неизменяемая инфраструктура

Управление узлами

Обзор
Добавление узлов в локальные кластеры
Управление узлами
Мониторинг узлов

Управляемые кластеры

обзор

Импорт кластеров

Обзор
Импорт стандартного кластера Kubernetes
Импорт кластера OpenShift
Импорт кластера Amazon EKS
Импорт кластера GKE
Импорт кластера Huawei Cloud CCE (публичное облако)
Импорт кластера Azure AKS
Импорт кластера Alibaba Cloud ACK
Импорт кластера Tencent Cloud TKE
Регистрация кластера

Инициализация кластера в публичном облаке

Инициализация сети

Конфигурация инициализации сети кластера AWS EKS
Дополнительная информация по AWS EKS
Инициализация конфигурации сети кластера Huawei Cloud CCE
Конфигурация инициализации сети кластера Azure AKS
Конфигурация инициализации сети кластера Google GKE

Инициализация хранилища

Обзор
Конфигурация инициализации хранилища кластера AWS EKS
Инициализация конфигурации хранилища кластера Huawei Cloud CCE
Конфигурация инициализации хранилища кластера Azure AKS
Конфигурация инициализации хранилища кластера Google GKE

Как сделать

Настройка сети для импортируемых кластеров
Получение информации о импортируемом кластере
Доверие небезопасному реестру образов
Сбор сетевых данных с сетевых карт с пользовательскими именами
Создание локального кластера
Хостинг контрольной плоскости
Планирование узлов кластера
Шифрование etcd

Как сделать

Добавление внешнего адреса для встроенного реестра
Выбор контейнерного рантайма
Обновление учетных данных публичного репозитория

Резервное копирование и восстановление

Обзор
Установка
Репозиторий резервного копирования

Управление резервным копированием

Резервное копирование ETCD
Создание расписания резервного копирования приложения
Хуки

Управление восстановлением

Выполнение задачи восстановления приложения
Замена реестра образов

Сетевые взаимодействия

Введение

Архитектура

Понимание Kube-OVN
Понимание ALB
Понимание MetalLB

Основные понятия

Совместимость ALB с аннотациями Ingress-NGINX
Сравнение Service, Ingress, Gateway API и ALB Rule
GatewayAPI

Руководства

Создание сервисов
Создание Ingress
Создание доменного имени
Создание сертификатов
Создание пула внешних IP-адресов
Создание BGP-пиров
Настройка подсетей
Настройка сетевых политик
Создание Admin Network Policies
Настройка сети Kube-OVN для поддержки нескольких сетевых интерфейсов Pod (Alpha)
Настройка сетевых политик кластера
Настройка Egress Gateway
Наблюдаемость сети
Настройка правил ALB
Межкластерное соединение (Alpha)
Endpoint Health Checker
NodeLocal DNSCache

Как сделать

Подготовка физической сети Kube-OVN Underlay
Soft Data Center LB Solution (Alpha)
Автоматическое взаимное подключение подсетей Underlay и Overlay
Установка Ingress-Nginx через Cluster Plugin
Установка Ingress-Nginx через Ingress Nginx Operator
Задачи для Ingress-Nginx

ALB

Auth
Развертывание высокодоступного VIP для ALB
Модификация заголовков
HTTP Redirect
L4/L7 Таймаут
ModSecurity
TCP/HTTP Keepalive
Использование OAuth Proxy с ALB
Настройка GatewayApi Gateway через ALB
Привязка NIC в ALB
Принятие решений по выбору производительности ALB
Развертывание ALB
Проброс IPv6-трафика на IPv4-адреса внутри кластера через ALB
OTel
ALB Monitoring
CORS
Политика сессионной аффинности балансировки нагрузки в ALB
Перезапись URL
Calico Network поддерживает шифрование WireGuard
Kube-OVN Overlay Network поддерживает шифрование IPsec
Руководство пользователя DeepFlow

Устранение неполадок

Как решить проблемы межузловой коммуникации в ARM-средах?
Определение причины ошибки

Хранение

Введение

Основные понятия

Основные понятия
Persistent Volume
Режимы доступа и режимы томов

Руководства

Создание Storage Class типа CephFS File Storage
Создание класса блочного хранилища CephRBD
Создание локального Storage Class TopoLVM
Создание общего класса хранения NFS
Развертывание компонента Volume Snapshot
Создание PV
Создание PVC
Использование снимков томов

Как сделать

Generic ephemeral volumes
Использование emptyDir
Настройка постоянного хранилища с использованием NFS
Руководство по аннотированию возможностей стороннего хранилища

Устранение неполадок

Восстановление после ошибки расширения PVC
Конфигурация машины

Масштабируемость и производительность

Оценка ресурсов для глобального кластера
Оценка ресурсов для рабочей нагрузки кластера
Повышение стабильности Kubernetes для крупных кластеров
Конфигурация диска

Хранение

Распределённое хранилище Ceph

Введение

Установка

Создание кластера стандартного типа
Создание Stretch Type кластера
Архитектура

Основные понятия

Основные концепции

Руководства

Доступ к сервисам хранения
Управление Storage Pools
Развертывание компонентов на конкретных узлах
Добавление устройств/классов устройств
Мониторинг и оповещения

Как сделать

Настройка выделенного кластера для распределённого хранилища
Очистка распределённого хранилища

Восстановление после сбоев

Восстановление после сбоев файлового хранилища
Восстановление после сбоев блочного хранилища
Восстановление после сбоев в объектном хранилище
Обновление параметров оптимизации
Создание пользователя ceph object store

MinIO Object Storage

Введение
Установка
Архитектура

Основные понятия

Основные концепции

Руководства

Добавление пула хранения
Мониторинг и оповещения

Как сделать

Восстановление данных после аварий

Локальное хранилище TopoLVM

Введение
Установка

Руководства

Управление устройствами
Мониторинг и оповещения

Как сделать

Резервное копирование и восстановление PVC файловой системы TopoLVM с помощью Velero

Безопасность

Alauda Container Security

Безопасность и соответствие

Соответствие требованиям

Введение
Установка Alauda Container Platform Compliance с Kyverno

Как сделать

Конфигурация доступа к приватному реестру
Политика проверки подписи образов
Политика проверки подписей образов с использованием Secrets
Политика проверки реестра образов
Политика предотвращения выхода из контейнера
Политика Принудительного Применения Security Context
Политика сетевой безопасности
Политика безопасности томов

API Refiner

Введение
Установка Alauda Container Platform API Refiner
О сервисе соответствия Alauda Container Platform

Пользователи и роли

Пользователь

Введение

Руководства

Управление ролями пользователей
Создание пользователя
Управление пользователями

Группа

Введение

Руководства

Управление ролями групп пользователей
Создание локальной группы пользователей
Управление членством в локальной группе пользователей

Роль

Введение

Руководства

Создание роли
Управление пользовательскими ролями

IDP

Введение

Руководства

Управление LDAP
Управление OIDC

Устранение неполадок

Удаление пользователя

Политика пользователя

Введение

Мультиарендность (Project)

Введение

Руководства

Создание проекта
Управление квотами проекта
Управление проектом
Управление кластером проекта
Управление участниками проекта

Аудит

Введение

Телеметрия

Установка

Сертификаты

Автоматическая ротация сертификатов Kubernetes
cert-manager
Сертификаты OLM
Мониторинг сертификатов

Виртуализация

Виртуализация

Обзор

Введение
Установка

Образы

Введение

Руководства

Добавление образов виртуальных машин
Обновление/Удаление образов виртуальных машин
Обновление/удаление учетных данных образа

Как сделать

Создание образов Windows на основе ISO с использованием KubeVirt
Создание образов Linux на основе ISO с использованием KubeVirt
Экспорт образов виртуальных машин
Разрешения

Виртуальная машина

Введение

Руководства

Создание виртуальных машин/групп виртуальных машин
Пакетные операции с виртуальными машинами
Вход в виртуальную машину с использованием VNC
Управление ключевыми парами
Управление виртуальными машинами
Мониторинг и оповещения
Быстрый поиск виртуальных машин

Как сделать

Настройка проброса USB-хоста
Горячая миграция виртуальной машины
Восстановление виртуальной машины
Клонирование виртуальных машин в KubeVirt
Подготовка среды для физического GPU Passthrough
Настройка высокой доступности для виртуальных машин
Создание шаблона ВМ на основе существующей виртуальной машины

Устранение неполадок

Миграция Pod виртуальных машин и восстановление после аварийного завершения работы узлов виртуальных машин
Сообщения об ошибках горячей миграции и решения

Сеть

Введение

Руководства

Настройка сети

Как сделать

Контроль сетевых запросов виртуальной машины через Network Policy
Настройка SR-IOV
Настройка виртуальных машин для использования режима сетевого биндинга с поддержкой IPv6

Хранение данных

Введение

Руководства

Управление виртуальными дисками

Резервное копирование и восстановление

Введение

Руководства

Использование снимков

Разработчик

Обзор

Быстрый старт

Creating a simple application via image

Создание приложений

Построение архитектуры приложения

Основные понятия

Типы приложений
Custom Applications
Типы рабочих нагрузок
Понимание параметров
Понимание переменных окружения
Понимание команд запуска
Описание единиц ресурсов

Пространства имён

Создание пространств имён
Импорт пространств имён
Resource Quota
Limit Range
Pod Security Admission
Назначение UID/GID
Коэффициент Overcommit
Управление участниками пространства имён
Обновление Namespaces
Удаление/Исключение Namespaces

Создание приложений

Создание приложений из образа
Создание приложений из Chart
Создание приложений из YAML
Создание приложений из кода
Creating applications from Operator Backed
Создание приложений с использованием CLI

Эксплуатация и сопровождение приложений

Развертывание приложений

Установка Alauda Container Platform Argo Rollouts
Application Blue Green Deployment
Application Canary Deployment
Описание статуса

KEDA (Kubernetes Event-driven Autoscaling)

KEDA Overview
Установка KEDA

Как сделать

Интеграция ACP Monitoring с плагином Prometheus
Приостановка автоскейлинга в KEDA
Настройка HPA
Запуск и остановка приложений
Настройка VerticalPodAutoscaler (VPA)
Настройка CronHPA
Обновление приложений
Экспорт приложений
Обновление и удаление Chart-приложений
Управление версиями приложений
Удаление приложений
Обработка ошибок нехватки ресурсов
Проверки состояния

Рабочие нагрузки

Deployments
DaemonSets
StatefulSets
CronJobs
Jobs
Pods
Контейнеры
Работа с Helm charts

Конфигурации

Настройка ConfigMap
Настройка Secrets

Наблюдаемость приложения

Мониторинговые панели
Логи
События

Как сделать

Настройка правил срабатывания планировщика задач

Образы

Обзор образов

Как сделать

Создание образов
Управление образами

Реестр

Введение

Установка

Установка через YAML
Установка через Web UI

Руководство пользователя

Распространённые операции с командами CLI
Using Alauda Container Platform Registry in Kubernetes Clusters

Source to Image

Обзор

Введение
Архитектура
Примечания к выпуску
Политика жизненного цикла

Установка

Installing Alauda Container Platform Builds

Обновление

Обновление сборок Alauda Container Platform

Руководства

Управление приложениями, созданными из кода

Как сделать

Создание приложения из кода

Стратегия изоляции узлов

Введение
Архитектура

Основные понятия

Основные понятия

Руководства

Создание стратегии изоляции узлов
Разрешения
Часто задаваемые вопросы

GitOps

Введение

Установка

Установка Alauda Build of Argo CD
Установка Alauda Container Platform GitOps

Обновление

Обновление Alauda Container Platform GitOps
Архитектура

Основные понятия

GitOps

Концепция Argo CD

Введение
Application
ApplicationSet
Tool
Helm
Kustomize
Directory
Sync
Health

Концепции GitOps в Alauda Container Platform

Введение
Alauda Container Platform GitOps Sync and Health Status

Руководства

Создание GitOps приложения

Creating GitOps Application
Creating GitOps ApplicationSet

Наблюдаемость GitOps

Argo CD Component Monitoring
GitOps Applications Ops

Как сделать

Интеграция репозиториев кода через панель управления Argo CD
Создание приложения Argo CD через панель управления Argo CD
Создание Argo CD Application через веб-консоль
Как получить информацию для доступа к Argo CD
Устранение неполадок

Расширение

Обзор
Оператор
Плагин кластера
Загрузка пакетов

Наблюдаемость

Обзор

Мониторинг

Введение
Установка

Архитектура

Архитектура модуля мониторинга
Руководство по выбору компонента мониторинга
Планирование ёмкости компонента мониторинга
Основные понятия

Руководства

Управление метриками
Управление оповещениями
Управление уведомлениями
Управление мониторинговыми панелями
Управление Probe

Как сделать

Резервное копирование и восстановление данных мониторинга Prometheus
Резервное копирование и восстановление данных мониторинга VictoriaMetrics
Сбор сетевых данных с сетевых интерфейсов с пользовательскими именами

Распределённое трассирование

Введение
Установка
Архитектура
Основные понятия

Руководства

Query Tracing
Query Trace Logs

Как сделать

Безвредная интеграция трассировки в Java-приложения
Бизнес-логи, связанные с TraceID

Устранение неполадок

Невозможно выполнить запрос требуемого трассирования
Неполные данные трассировки

Логи

Введение
Установка

Архитектура

Архитектура модуля логирования
Руководство по выбору компонента логирования
Планирование ёмкости компонента логирования
Основные понятия

Руководства

Логи

Как сделать

Как архивировать логи в стороннее хранилище
Как взаимодействовать с внешними кластерами ES Storage

События

Введение
События

Инспекция

Введение
Архитектура

Руководства

Inspection
Component Health Status

Аппаратные ускорители

О Alauda Build of Hami
О плагине устройства NVIDIA GPU от Alauda Build

Alauda Service Mesh

Service Mesh 1.x
Service Mesh 2.x

Alauda AI

О Alauda AI

Alauda DevOps

О платформе Alauda DevOps

Управление затратами Alauda

О системе управления затратами Alauda

Alauda Application Services

Обзор

Введение
Архитектура
Установка
Обновление

Alauda Database Service для MySQL

О сервисе Alauda Database Service для MySQL-MGR
О сервисе Alauda Database Service для MySQL-PXC

Сервис кэширования Alauda для Redis OSS

О сервисе Alauda Cache Service for Redis OSS

Alauda Streaming Service for Kafka

О сервисе Alauda Streaming Service for Kafka

Сервис потоковой передачи Alauda для RabbitMQ

О сервисе Alauda Streaming Service for RabbitMQ

Поддержка PostgreSQL в Alauda

О поддержке PostgreSQL в Alauda

Управление операциями

Введение

Управление шаблонами параметров

Введение

Руководства

Управление шаблонами параметров

Управление резервным копированием

Введение

Руководства

Внешнее хранилище S3
Управление резервным копированием

Управление инспекциями

Введение

Руководства

Создание задачи инспекции
Задача Exec Inspection
Обновление и удаление задач инспекции

Как сделать

Как настроить расписание инспекций?

Рекомендации по оптимизации инспекций

MySQL

Оптимизация IO нагрузки MySQL
Оптимизация использования памяти MySQL
Оптимизация использования дискового пространства MySQL
Оптимизация количества активных потоков MySQL
Оптимизация блокировок строк MySQL

Redis

Redis BigKey
Высокая загрузка CPU в Redis
Высокое использование памяти в Redis

Kafka

Высокая загрузка CPU в Kafka
Оптимизация Rebalance в Kafka
Оптимизация использования памяти Kafka
Оптимизация пространства хранения Kafka

RabbitMQ

Обработка исключений базы данных RabbitMQ Mnesia

Управление оповещениями

Введение

Руководства

Взаимосвязь с возможностями платформы

Управление обновлениями

Введение

Руководства

Обновление экземпляра

Справочник API

Обзор

Введение
Руководство по использованию Kubernetes API

Advanced APIs

Alert APIs

AlertHistories [v1]
AlertHistoryMessages [v1]
AlertStatus [v2]
SilenceStatus [v2]

Event APIs

Search

Log APIs

Aggregation
Archive
Context
Search

Monitoring APIs

Indicators [monitoring.alauda.io/v1beta1]
Metrics [monitoring.alauda.io/v1beta1]
Variables [monitoring.alauda.io/v1beta1]

Kubernetes APIs

Alert APIs

AlertTemplate [alerttemplates.aiops.alauda.io/v1beta1]
PrometheusRule [prometheusrules.monitoring.coreos.com/v1]

Inspection APIs

Inspection [inspections.ait.alauda.io/v1alpha1]

Notification APIs

Notification [notifications.ait.alauda.io/v1beta1]
NotificationGroup [notificationgroups.ait.alauda.io/v1beta1]
NotificationTemplate [notificationtemplates.ait.alauda.io/v1beta1]
Предыдущая страницаПриостановка автоскейлинга в KEDA
Следующая страницаЗапуск и остановка приложений

Просмотреть полную документацию в формате PDF

#Настройка HPA

HPA (Horizontal Pod Autoscaler) автоматически масштабирует количество подов вверх или вниз на основе заданных политик и метрик, позволяя приложениям справляться с внезапными всплесками нагрузки, одновременно оптимизируя использование ресурсов в периоды низкой активности.

#Содержание

#Понимание Horizontal Pod Autoscalers

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

После создания горизонтального автоскейлера платформа начинает опрашивать метрики ресурсов CPU и/или памяти на подах. Когда эти метрики становятся доступны, автоскейлер вычисляет отношение текущего использования метрики к желаемому значению и масштабирует количество подов вверх или вниз соответственно. Запрос метрик и масштабирование происходят с регулярным интервалом, но может пройти от одной до двух минут, прежде чем метрики станут доступны.

Для replication controllers такое масштабирование напрямую соответствует количеству реплик replication controller. Для deployment configurations масштабирование напрямую соответствует количеству реплик deployment configuration. Обратите внимание, что автоскейлинг применяется только к последнему деплою в фазе Complete.

Платформа автоматически учитывает ресурсы и предотвращает ненужное автоскейлинг во время всплесков ресурсов, например, при запуске. Поды в состоянии unready имеют 0 использования CPU при масштабировании вверх, а автоскейлер игнорирует такие поды при масштабировании вниз. Поды без известных метрик считаются с 0% использования CPU при масштабировании вверх и 100% при масштабировании вниз. Это обеспечивает большую стабильность при принятии решений HPA. Для использования этой функции необходимо настроить readiness проверки, чтобы определить, готов ли новый под к использованию.

#Как работает HPA?

Горизонтальный автоскейлер подов (HPA) расширяет концепцию автоскейлинга подов. HPA позволяет создавать и управлять группой балансируемых по нагрузке узлов. HPA автоматически увеличивает или уменьшает количество подов, когда заданный порог CPU или памяти превышается.

HPA работает как управляющий цикл с периодом синхронизации по умолчанию 15 секунд. В течение этого периода controller manager опрашивает использование CPU, памяти или обоих параметров в соответствии с конфигурацией HPA. Controller manager получает метрики использования из resource metrics API для каждого пода, на который направлен HPA.

Если задана целевая величина использования, контроллер вычисляет значение использования в процентах от соответствующего запроса ресурсов контейнеров в каждом поде. Затем контроллер берет среднее значение использования по всем целевым подам и формирует коэффициент, который используется для масштабирования желаемого количества реплик.

#Поддерживаемые метрики

Горизонтальные автоскейлеры подов поддерживают следующие метрики:

МетрикаОписание
Использование CPUКоличество используемых ядер CPU. Может использоваться для вычисления процента от запрошенного CPU пода.
Использование памятиОбъем используемой памяти. Может использоваться для вычисления процента от запрошенной памяти пода.
Входящий сетевой трафикОбъем сетевого трафика, поступающего в под, измеряется в KiB/s.
Исходящий сетевой трафикОбъем сетевого трафика, исходящего из пода, измеряется в KiB/s.
Трафик чтения со хранилищаОбъем данных, читаемых со хранилища, измеряется в KiB/s.
Трафик записи на хранилищеОбъем данных, записываемых на хранилище, измеряется в KiB/s.

Важно: Для автоскейлинга на основе памяти использование памяти должно пропорционально увеличиваться и уменьшаться в зависимости от количества реплик. В среднем:

  • Увеличение количества реплик должно приводить к общему снижению использования памяти (working set) на один под.
  • Уменьшение количества реплик должно приводить к общему увеличению использования памяти на один под.
  • Используйте платформу для проверки поведения памяти вашего приложения и убедитесь, что оно соответствует этим требованиям перед использованием автоскейлинга на основе памяти.

#Предварительные требования

Убедитесь, что компоненты мониторинга развернуты в текущем кластере и работают корректно. Вы можете проверить статус развертывания и состояние компонентов мониторинга, нажав в правом верхнем углу платформы развернуть > Platform Health Status..

#Создание Horizontal Pod Autoscaler

#Использование CLI

Вы можете создать горизонтальный автоскейлер подов с помощью интерфейса командной строки, определив YAML-файл и используя команду kubectl create. Следующий пример показывает автоскейлинг для объекта Deployment. Изначально требуется 3 пода. Объект HPA увеличивает минимум до 5. Если использование CPU подов достигает 75%, количество подов увеличивается до 7:

  1. Создайте YAML-файл с именем hpa.yaml со следующим содержимым:

    apiVersion: autoscaling/v2
    kind: HorizontalPodAutoscaler
    metadata:
      name: hpa-demo
      namespace: default
    spec:
      maxReplicas: 7
      minReplicas: 3
      scaleTargetRef:
        apiVersion: apps/v1
        kind: Deployment
        name: deployment-demo
      targetCPUUtilizationPercentage: 75
    1. Используйте API autoscaling/v2.
    2. Имя ресурса HPA.
    3. Имя деплоя для масштабирования.
    4. Максимальное количество реплик для масштабирования вверх.
    5. Минимальное количество реплик для поддержания.
    6. Укажите версию API объекта для масштабирования.
    7. Укажите тип объекта. Объект должен быть Deployment, ReplicaSet или StatefulSet.
    8. Целевой ресурс, к которому применяется HPA.
    9. Целевой процент использования CPU, который запускает масштабирование.
  2. Примените YAML-файл для создания HPA:

    kubectl create -f hpa.yaml

    Пример вывода:

    horizontalpodautoscaler.autoscaling/hpa-demo created
  3. После создания HPA вы можете просмотреть новое состояние деплоя, выполнив команду:

    kubectl get deployment deployment-demo

    Пример вывода:

    NAME              READY   UP-TO-DATE   AVAILABLE   AGE
    deployment-demo   5/5     5            5           3m
  4. Также можно проверить статус вашего HPA:

    kubectl get hpa hpa-demo

    Пример вывода:

    NAME         REFERENCE                  TARGETS    MINPODS   MAXPODS   REPLICAS   AGE
    hpa-demo   Deployment/deployment-demo   0%/75%     3         7         3          2m

#Использование веб-консоли

  1. Войдите в Container Platform.

  2. В левой навигационной панели нажмите Workloads > Deployments.

  3. Кликните по Имя Deployment.

  4. Прокрутите вниз до области Elastic Scaling и нажмите Update справа.

  5. Выберите Horizontal Scaling и заполните конфигурацию политики.

    ПараметрОписание
    Количество подовПосле успешного создания деплоя необходимо оценить Минимальное количество подов, соответствующее известным и регулярным изменениям бизнес-объема, а также Максимальное количество подов, которое может поддерживаться квотой namespace при высокой нагрузке. Максимальное или минимальное количество подов можно изменять после настройки, рекомендуется сначала получить более точное значение через нагрузочное тестирование и постоянно корректировать в процессе эксплуатации для удовлетворения бизнес-потребностей.
    Политика триггераУкажите Метрики, чувствительные к изменениям бизнеса, и их Целевые пороги для запуска действий масштабирования вверх или вниз.
    Например, если вы установите CPU Utilization = 60%, как только использование CPU отклонится от 60%, платформа начнет автоматически корректировать количество подов на основе недостаточного или избыточного распределения ресурсов текущего деплоя.
    Примечание: Типы метрик включают встроенные и пользовательские. Пользовательские метрики применимы только к деплоям в нативных приложениях, и их необходимо предварительно добавить custom metrics .
    Шаг масштабирования (альфа)Для бизнесов с особыми требованиями к скорости масштабирования можно постепенно адаптироваться к изменениям объема, задавая Шаг масштабирования вверх или Шаг масштабирования вниз.
    Для шага масштабирования вниз можно настроить Окно стабильности, по умолчанию 300 секунд, что означает необходимость ожидания 300 секунд перед выполнением действий по уменьшению масштаба.
  6. Нажмите Update.

#Использование пользовательских метрик для HPA

HPA с пользовательскими метриками расширяет оригинальный HorizontalPodAutoscaler, поддерживая дополнительные метрики помимо CPU и памяти.

#Требования

  • kube-controller-manager: horizontal-pod-autoscaler-use-rest-clients=true
  • Предустановленный metrics-server
  • Prometheus
  • custom-metrics-api

#Традиционный (Core Metrics) HPA

Традиционный HPA поддерживает использование CPU и памяти для динамического изменения количества экземпляров Pod, как показано в примере ниже:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx-app-nginx
  namespace: test-namespace
spec:
  maxReplicas: 1
  minReplicas: 1
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx-app-nginx
  targetCPUUtilizationPercentage: 50

В этом YAML scaleTargetRef указывает объект нагрузки для масштабирования, а targetCPUUtilizationPercentage задает метрику триггера по CPU.

#HPA с пользовательскими метриками

Для использования пользовательских метрик необходимо установить prometheus-operator и custom-metrics-api. После установки custom-metrics-api предоставляет множество ресурсов пользовательских метрик:

{
  "kind": "APIResourceList",
  "apiVersion": "v1",
  "groupVersion": "custom.metrics.k8s.io/v1beta1",
  "resources": [
    {
      "name": "namespaces/go_memstats_heap_sys_bytes",
      "singularName": "",
      "namespaced": false,
      "kind": "MetricValueList",
      "verbs": ["get"]
    },
    {
      "name": "jobs.batch/go_memstats_last_gc_time_seconds",
      "singularName": "",
      "namespaced": true,
      "kind": "MetricValueList",
      "verbs": ["get"]
    },
    {
      "name": "pods/go_memstats_frees",
      "singularName": "",
      "namespaced": true,
      "kind": "MetricValueList",
      "verbs": ["get"]
    }
  ]
}

Эти ресурсы являются подресурсами типа MetricValueList. Вы можете создавать правила через Prometheus для создания или поддержки подресурсов. Формат YAML HPA для пользовательских метрик отличается от традиционного HPA:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: demo
spec:
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: demo
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Pods
      pods:
        metricName: metric-demo
        targetAverageValue: 10

В этом примере scaleTargetRef указывает нагрузку.

#Определение условий триггера

  • metrics — массив, поддерживающий несколько метрик
  • тип метрики может быть: Object (описание ресурсов k8s), Pods (метрики для каждого Pod), Resources (встроенные метрики k8s: CPU, память) или External (обычно метрики вне кластера)
  • Если пользовательская метрика не предоставляется Prometheus, необходимо создать новую метрику через ряд операций, например, создание правил в Prometheus

Основная структура метрики:

{
      "describedObject": {  # Описываемый объект (Pod)
        "kind": "Pod",
        "namespace": "monitoring",
        "name": "nginx-788f78d959-fd6n9",
        "apiVersion": "/v1"
      },
      "metricName": "metric-demo",
      "timestamp": "2020-02-5T04:26:01Z",
      "value": "50"
}

Эти данные метрики собираются и обновляются Prometheus.

#Совместимость HPA с пользовательскими метриками

YAML HPA с пользовательскими метриками совместим с оригинальными core metrics (CPU). Пример записи:

apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
  name: nginx
spec:
  scaleTargetRef:
    apiVersion: extensions/v1beta1
    kind: Deployment
    name: nginx
  minReplicas: 2
  maxReplicas: 10
  metrics:
    - type: Resource
      resource:
        name: cpu
        targetAverageUtilization: 80
    - type: Resource
      resource:
        name: memory
        targetAverageValue: 200Mi
  • targetAverageValue — среднее значение, полученное для каждого пода
  • targetAverageUtilization — использование, вычисленное из прямого значения

Алгоритм:

replicas = ceil(sum(CurrentPodsCPUUtilization) / Target)

#Обновления в autoscaling/v2beta2

autoscaling/v2beta2 поддерживает использование памяти:

apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
  name: nginx
  namespace: default
spec:
  minReplicas: 1
  maxReplicas: 3
  metrics:
    - resource:
        name: cpu
        target:
          averageUtilization: 70
          type: Utilization
      type: Resource
    - resource:
        name: memory
        target:
          averageUtilization:
          type: Utilization
      type: Resource
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: nginx

Изменения: targetAverageUtilization и targetAverageValue заменены на target и преобразованы в комбинацию xxxValue и type:

  • xxxValue: AverageValue (среднее значение), AverageUtilization (среднее использование), Value (прямое значение)
  • type: Utilization (использование), AverageValue (среднее значение)

Примечания:

  • Для метрик CPU Utilization и Memory Utilization автоскейлинг срабатывает только при отклонении фактического значения за пределы ±10% от целевого порога.

  • Масштабирование вниз может повлиять на текущие бизнес-процессы; будьте осторожны.

#Правила расчёта

При изменении бизнес-метрик платформа автоматически рассчитывает целевое количество подов, соответствующее объему бизнеса, согласно следующим правилам и корректирует масштабирование. Если бизнес-метрики продолжают колебаться, значение будет ограничено установленными Минимальным количеством подов или Максимальным количеством подов.

  • Целевое количество подов по одной политике: ceil[(сумма фактических значений метрик) / порог метрики]. Это означает, что сумма фактических значений метрик всех подов делится на порог метрики и округляется вверх до ближайшего целого числа. Например: если в данный момент 3 пода с использованием CPU 80%, 80% и 90%, а установлен порог CPU 60%, то согласно формуле количество подов будет автоматически скорректировано до: ceil[(80%+80%+90%) / 60%] = ceil 4.1 = 5 подов.

    Примечание:

    • Если рассчитанное целевое количество подов превышает установленное Максимальное количество подов (например, 4), платформа масштабирует только до 4 подов. Если после изменения максимума метрики остаются высокими, возможно, потребуется использовать альтернативные методы масштабирования, такие как увеличение квоты подов namespace или добавление аппаратных ресурсов.

    • Если рассчитанное целевое количество подов (в предыдущем примере 5) меньше количества подов, рассчитанного с учетом Шага масштабирования вверх (например, 10), платформа масштабирует только до 5 подов.

  • Целевое количество подов по нескольким политикам: выбирается максимальное значение из результатов расчётов каждой политики.