Рубрики
Uncategorized

AutoScaling Amazon Elastic Cubernetes Service Cluster

В этой статье мы рассмотрим два самых распространенных метода аутокалирования в кластере EKS: … Tagged с Куберовщиком, докером, дежоптом.

В этой статье мы собираемся рассмотреть два самых распространенных метода аутокалирования в кластере 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»