Примечание : (14 октября 2021 г.) Linode выпустил Autoscaler Kubernetes Autoscaler для всех LKES. Хотя у этого автомассунка все еще есть некоторое использование (особенно, если вы хотите агрессивно и заранее автомасшюрадовать), он больше не будет активно поддерживать.
===
Это простая автоматическая утилита для горизонтального масштабирования линодов в пуле кластеров LKE на основе памяти или использования процессора. Это эффективно означает, что вы можете использовать горизонтальную капсулу Kubernetes, чтобы масштабировать ваши стручки и эту утилиту для масштабирования ваших линодов - чтобы вы могли настроить это и позволить своему кластеру масштабировать или вниз по мере необходимости.
Каждый экземпляр этой утилиты будет автомасшкорировать на основе памяти или процессора. Чтобы использовать оба, вы можете развернуть 2 экземпляра этой утилиты (обычно достаточно 1).
Он полностью рассчитан (но написан в PHP) и имеет низкую площадь ресурсов, так что вы можете развернуть его локально или на самом кластере.
Изображение для этой утилиты опубликовано @ Docker Hub как Meezaan/linode-k8sa-autoscaler (https://hub.docker.com/r/meezaan/linode-k8s-autoscaler).
Последний тег всегда имеет последний код. Кроме того, теги Docker Hub привязаны к тегам в этом репозитории GIT в качестве выпусков.
Контейнер Docker берет всю свою конфигурацию через переменные среды. Вот список того, что делает каждый:
| Имя переменной среды | Описание |
|---|---|
| Linode_personal_access_token | Ваш личный токен доступа с областью LKE |
| Linode_lke_cluster_id | Идентификатор кластера LKE для AutoScale |
| Linode_lke_cluster_pool_id | Идентификатор пула узлов в кластере LKE для AutoScale |
| Linode_lke_cluster_pool_minimum_nodes | Минимальные узлы, чтобы держать в кластере. Кластер не будет масштабирован ниже этого. |
| Autoscale_trigger | «ЦП» или «память». По умолчанию в мемори. |
| Autoscale_trigger_type | «запрошен» или «использован». По умолчанию запрошенные. Это говорит Autoscaler использовать запрошенную или в настоящее время используемая память или процессор для масштабирования или вниз, если он нарушает порогу. |
| Autoscale_up_percentage | При каком проценте «ЦП» или «памяти» для масштабирования пула узлов. Пример: 65 |
| Autoscale_down_percentage | При каком проценте «ЦП» или «памяти» для масштабирования пула узлов. Пример: 40 |
| AutoScale_Resource_Request_up_percentage | При каком проценте «ЦП» или «память» запрошенного / доступного для масштабирования кластера. По умолчанию: 80 |
| AutoScale_Resource_Request_down_percentage | При каком проценте «ЦП» или «память» запрошенного / доступного для масштабирования кластера. По умолчанию: 70 |
| Autoscale_query_interval | Сколько секунд до ждать каждого вызова в API Kubernetes проверяет использование процессора и памяти. Пример: 10 |
| Autoscale_threshold_count | После того, сколько последовательных совпадений Autoscale_up_percentage или Autoscale_down_percentage для масштабирования кластера вверх или вниз. |
| Autoscale_number_of_nodes | Сколько узлов добавить за один раз при масштабировании кластера. Пример: 1 или 2 или 3 или N |
| Autoscale_wait_time_after_scaling | Сколько секунд подождать после масштабирования или вниз, чтобы начать проверять процессор и память. Это должно быть установлено, чтобы дать кластеру достаточно времени, чтобы настроить себя с помощью обновленного количества узлов. Пример: 150 |
Чтобы понять вышеперечисленное, предполагая, что мы установили следующие значения.
С помощью этой установки утилита Autoscaler будет запрашивать API Kuberenetes каждые 10 секунд. Если с 3 последовательными вызовами в API (эффективно означает в течение 30 секунд), запрашиваемая память превышает 80% от общей памяти, доступной в кластере, в указанный пул узлов будет добавлено еще 2 узла. Утилита будет ждать 180 секунд, а затем снова начнет запросить API каждые 10 секунд.
Если с 3 последовательными вызовами в API (эффективно означает в течение 30 секунд), запрашиваемая память ниже 70% от общей памяти, доступной в кластере, 1 узел будет удален ( узлы всегда удаляются по одному, чтобы убедиться, что у вас не выходит запуск вдруг ) из указанного пула узлов. Утилита будет ждать 180 секунд, а затем снова начнет запросить API каждые 10 секунд.
Тот же пример, с другим типом триггера.
С помощью этой установки утилита Autoscaler будет запрашивать API Kuberenetes каждые 10 секунд. Если с 3 последовательными вызовами в API (эффективно означает в течение 30 секунд), использование памяти выше, чем на 65% от общей памяти, доступной в кластере, в указанный пул узлов будет добавлено на 2 узла. Утилита будет ждать 180 секунд, а затем снова начнет запросить API каждые 10 секунд.
Если с 3 последовательными вызовами в API (эффективно означает в течение 30 секунд), использование памяти ниже 30% от общей памяти, доступной в кластере, 1 узел будет удален ( узлы всегда удаляются по одному, чтобы убедиться, что у вас не выходит выпуск емкости ) из указанного пула узлов. Утилита будет ждать 180 секунд, а затем снова начнет запросить API каждые 10 секунд.
Вам нужно настроить изображение Docker с помощью переменных ENV и конфигурации Kubectl.
Бежать на местном уровне:
docker run -v ~/.kube/config:/root/.kube/config
-e LINODE_PERSONAL_ACCCESS_TOKEN='xxxx'
-e LINODE_LKE_CLUSTER_ID='xxxx'
-e LINODE_LKE_CLUSTER_POOL_ID='xxxx'
-e LINODE_LKE_CLUSTER_POOL_MINIMUM_NODES='3'
-e AUTOSCALE_TRIGGER='cpu'
-e AUTOSCALE_UP_PERCENTAGE='60'
-e AUTOSCALE_DOWN_PERCENTAGE='30'
-e AUTOSCALE_RESOURCE_REQUEST_UP_PERCENTAGE='70'
-e AUTOSCALE_RESOURCE_REQUEST_DOWN_PERCENTAGE='70'
-e AUTOSCALE_QUERY_INTERVAL='10'
-e AUTOSCALE_THRESHOLD_COUNT='3'
-e AUTOSCALE_NUMBER_OF_NODES='1'
-e AUTOSCALE_WAIT_TIME_AFTER_SCALING='180' meezaan/linode-k8s-autoscaler
Для производства вы можете построить частное изображение Docker и протолкнуть файл конфигурации Kubectl с учетными данными сервисной учетной записи в изображение. Итак, ваш Dockerfile может выглядеть как -то вроде:
FROM meezaan/linode-k8s-autoscaler
COPY configfile /root/.kube/config
После того, как вы создали изображение (и, давайте предположим, что оно называется Yourspace/K8S-Autoscaler: Последний), вы можете развернуть его со следующим манифестом:
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: k8s-autoscaler
namespace: name-of-namespace ####### Change this to the actual namespace
spec:
replicas: 1
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
selector:
matchLabels:
app: k8s-autoscale
template:
metadata:
labels:
app: k8s-autoscale
spec:
imagePullSecrets:
- name: regcred ####### Docker registry credentials secret
containers:
- name: k8s-autoscale
image: yourspace/k8s-autoscaler:latest ####### CHANGE THIS TO YOUR ACTUAL DOCKER IMAGE
env:
- name: LINODE_PERSONAL_ACCCESS_TOKEN
valueFrom:
secretKeyRef:
name: linode-personal-access-token-k8s-autoscaler ####### LINODE PERSONAL ACCESS TOKEN SECRET
key: token
- name: LINODE_LKE_CLUSTER_ID
value: ""
- name: LINODE_LKE_CLUSTER_POOL_ID
value: ""
- name: AUTOSCALE_TRIGGER
value: "memory"
- name: AUTOSCALE_UP_PERCENTAGE
value: "60"
- name: AUTOSCALE_DOWN_PERCENTAGE
value: "30"
- name: AUTOSCALE_QUERY_INTERVAL
value: "30"
- name: AUTOSCALE_THRESHOLD_COUNT
value: "3"
- name: AUTOSCALE_NUMBER_OF_NODES
value: "1"
- name: AUTOSCALE_WAIT_TIME_AFTER_SCALING
value: "150"
resources:
requests:
memory: 32Mi
limits:
memory: 32Mi
Вышеуказанный манифест использует секрет вашего токена личного доступа Linode и учетных данных реестра Docker.
Вам нужно будет создать их.
Приведенный выше стручок требует 0,01 ЦП и 15 МБ памяти для запуска. Память может увеличиваться в зависимости от размера ответа API, но она возвращает JSON, поэтому даже если у вас в кластере более 100 серверов, вы все еще смотрите только на 30 МБ или около того.
Эта утилита не связана с Linode.