В этой статье мы собираемся рассмотреть два самых распространенных метода аутокалирования в кластере EKS:
- Горизонтальный стручок автоскалер (HPA)
- Кластер автоскалер (CA)
Горизонтальный стручок автоскалера или HPA Компонент Kubernetes, который автоматически ведет ваше обслуживание на основе таких метрик, как утилизация процессоров или другие, как определено через метрический сервер Kubernetes. HPA весывает стручки либо в развертывании, либо на множестве реплики, и реализуется как ресурс API Kubernetes и контроллер. Диспетчер контроллера запросит использование ресурсов против метрик, указанных в каждом горизонтальном определении автоскалера POD. Он получает метрики из API ресурсов Metrics для Metrics POD на Metrics POD или пользовательские метрики API для любых других метрик.
Чтобы увидеть это в действии, мы собираемся настроить HPA, а затем применить некоторую нагрузку в нашу систему, чтобы увидеть ее в действии.
Для начала, давайте начнем с установки HELM в качестве менеджера пакетов для Kubernetes.
curl https://raw.githubusercontent.com/kubernetes/helm/master/scripts/get > helm.sh chmod +x helm.sh ./helm.sh
Теперь мы собираемся настроить базовую часть сервера Helm под названием Thilder. Это требует сервисной учетной записи:
--- apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system
Вышеуказанное определяет учетную запись службы ручной работы, к которой мы присваиваем роль администратора кластера. Теперь давайте пойдем вперед и применим конфигурацию:
kubectl apply -f tiller.yml
Беги Helm init
Использование учетной записи службы Tiller мы только что создали:
helm init --service-account tiller
С этим мы установили Chiller на кластер, что дает доступ для управления этими ресурсами в нем.
С установленным шлем мы можем теперь развернуть метрический сервер. Метрические серверы являются кластерами, широкими агрегаторами данных об использовании ресурсов, где метрики собираются Кублет
На каждом уземе работника и используются для диктата масштабирования поведения развертываний.
Так что давайте пойдем вперед и установите это сейчас:
helm install stable/metrics-server --name metrics-server --version 2.0.4 --namespace metrics
После того, как все проверки прошли, мы готовы масштабировать приложение.
Для целей этой статьи мы разверним специальную сборку Apache и PHP, предназначенную для создания использования ЦП:
kubectl run php-apache --image=k8s.gcr.io/hpa-example --requests=cpu=200m --expose --port=80
Теперь позвольте нам автонастроить наше развертывание:
kubectl autoscale deployment php-apache --cpu-percent=50 --min=1 --max=10
Вышеуказанное указывается, что HPA увеличит или уменьшит количество реплик, чтобы поддерживать среднее использование процессора по всем стручкам на 50%. Поскольку каждый POD запрашивает 200 миллионов (как указано в предыдущей команде), среднее использование процессора 100 милликоров поддерживается.
Давайте проверим статус:
kubectl get hpa
Обзор Цели
столбец, если он говорит Неизвестно/50%
Тогда это означает, что текущее расход CPU составляет 0%, так как в настоящее время мы не отправляем ни один запрос на сервер. Это займет пару минут, чтобы показать правильное значение, поэтому позвольте нам взять чашку кофе и вернуться назад, когда у нас есть некоторые данные здесь.
Перезагрузите последнюю команду и подтвердите, что Цели
колонна сейчас 0%/50 %
. Теперь давайте создадим некоторую нагрузку, чтобы вызвать масштабирование, выполнив следующее:
kubectl run -i --tty load-generator --image=busybox /bin/sh
Внутри этого контейнера мы собираемся отправить бесконечное количество запросов на наш сервис. Если мы вернемся к другому терминалу, мы можем наблюдать за автоскалером в действии:
kubectl get hpa -w
Мы можем посмотреть Scaler POD Scaler от 1 до нашего настроенного максимума 10, пока среднее использование процессора не превышает нашей цели на 50%. Это займет около 10 минут, и вы могли видеть, что теперь мы имеем 10 реплик. Если мы вернемся к другому терминалу, чтобы прекратить тест нагрузки, и переверните обратно на скальюный терминал, мы можем видеть, как HPA уменьшило, что реплика отсчитается до минимума.
Кластер автоскалера
Cluster AutoScaler — это компонент Kubernetes по умолчанию, который может масштабировать либо стручки, либо узлы в кластере. Он автоматически увеличивает размер AutoScaling Group, так что стручки могут продолжать успешно получать. Он также пытается удалить неиспользуемые узелки рабочие из группы AutoScaling (те, без подпуска).
Следующая команда AWS CLI создаст группу автоматической масштабирования с минимумом одного и максимального подсчета десяти:
eksctl create nodegroup --cluster--node-zones --name --asg-access --nodes-min 1 --nodes 5 --nodes-max 10 --managed
Теперь нам нужно применить встроенный политик IAM на наших рабочих узлах:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "autoscaling:DescribeAutoScalingGroups", "autoscaling:DescribeAutoScalingInstances", "autoscaling:DescribeLaunchConfigurations", "autoscaling:DescribeTags", "autoscaling:SetDesiredCapacity", "autoscaling:TerminateInstanceInAutoScalingGroup", "ec2:DescribeLaunchTemplateVersions" ], "Resource": "*", "Effect": "Allow" } ] }
Это в основном позволяет узел работников EC2 размещать кластер автоматического скалелятора возможность манипулировать автоматическим масштабированием. Скопируйте его и добавьте к роли EC2 IAM.
Далее загрузите следующий файл:
wget https://raw.githubusercontent.com/kubernetes/autoscaler/master/cluster-autoscaler/cloudprovider/aws/examples/cluster-autoscaler-autodiscover.yaml
И обновите следующую строку с именем кластера:
- --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/
Наконец, мы можем развернуть наш автоскалер:
kubectl apply -f cluster-autoscaler-autodiscover.yaml
Конечно, мы должны ждать, пока стручки закончили создание. Однажды сделано, мы можем масштабировать наш кластер. Мы рассмотрим простой nginx
Приложение со следующим Ямл
файл:
apiVersion: extensions/v1beta2 kind: Deployment metadata: name: nginx-scale spec: selector: matchLabels: app: nginx replicas: 1 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80 resources: limits: cpu: 500m memory: 512Mi requests: cpu: 500m memory: 512Mi
Давайте продолжим и развернум приложение:
kubectl apply -f nginx.yaml
И проверьте развертывание:
kubectl get deployment/nginx-scale
Теперь давайте масштабируемся реплику до 10:
kubectl scale --replicas=10 deployment/nginx-scale
Мы видим наши какие-либо стручки в ожидании состояния, который является триггером, что кластер Auto Scaler использует для масштабирования нашего флота экземпляров EC2.
kubectl get pods -o wide --watch
Вывод
В этой статье мы рассмотрели оба типа эксированного автоскализатора. Мы узнали, как AutoScaLer Cluster инициирует масштабные и масштабируемые операции каждый раз, когда он обнаруживает недостаточные экземпляры или в ожидании работы. Горизонтальный AutoScaLer Pod AutoScaLer и Cluster AutoScaLer являются важными функциями Kubernetes, когда речь идет о масштабировании приложения микровисского. Надеюсь, вы нашли эту статью полезную, но есть еще больше. До этого счастливого масштабирования!
Оригинал: «https://dev.to/appfleet/autoscaling-an-amazon-elastic-kubernetes-service-cluster-2hmf»