Рубрики
Uncategorized

Kubernetes Cluster AutoScaler на AWS

Оптимизируйте автоскализацию с Kubernetes и Cluster AutoScaler. Теги с Куберовщиками, дежоптом, AWS, масштабированием.

Запуск производственной среды в любом облаке (AWS, GCloud, Msazure) может быть очень дорогим, если ресурсы не используются эффективно. Принимая сценарий, когда веб-платформа использует 4 экземпляра EC2 T2.Large, это был стек, в котором я работаю, прежде чем мы перейдем к Kubernetes — я напишу об этом несколько дней. Так что принимая этот сценарий, это слишком много ресурсов, который не нужен все время. С Kubernetes мы создали более гибкую среду, но у нас есть такое же количество узлов, работающих все время. Cluster AutoScaler пришел, чтобы решить это. Мы могли бы определить минимальное количество узлов и масштабировать его при необходимости. Это подход того, как мы установили и настроили автоскалер кластера для нашей среды. Наша среда в основном это:

  • Amazon AWS EC2.
  • Kubectl: Версия сервера 1.10.6.
  • Копс: 1.10.0
  • Хелм: 2.11.0

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

$ kops edit ig nodes

Теперь добавьте новые этикетки в ключ CloudLabels.

spec:
  cloudLabels:
    k8s.io/cluster-autoscaler/my.cluster.com: ""
    k8s.io/cluster-autoscaler/enabled: ""
    k8s.io/cluster-autoscaler/node-template/label: ""
    kubernetes.io/cluster/my.cluster.com: owned
  ...
  minSize: 5
  maxSize: 10

Эта конфигурация предоставляет Kubernetes возможность автоматически обнаружить группы экземпляров на основе имени кластера. Настоятельно рекомендуется, особенно если есть несколько групп экземпляров. Теперь добавьте дополнительные правила политики IAM для узлов, чтобы сделать это, просто отредактируйте конфигурацию кластера.

$ kops edit cluster

Теперь добавьте политику ниже:

...
kind: Cluster
spec:
  additionalPolicies:
    node: |
      [
        {
          "Effect": "Allow",
          "Action": [
            "autoscaling:DescribeAutoScalingGroups",
            "autoscaling:DescribeAutoScalingInstances",
            "autoscaling:SetDesiredCapacity",
            "autoscaling:DescribeLaunchConfigurations",
            "autoscaling:DescribeTags",
            "autoscaling:TerminateInstanceInAutoScalingGroup"
          ],
          "Resource": ["*"]
        }
      ]
...

Команда для просмотра обновлений:

$ kops update cluster

Чтобы применить обновления, просто добавьте флаг --да

$ kops update cluster --yes

Хорошо, теперь, когда кластер обновляется, пришло время установить кластер автоскалера. Сначала установите Helm, это диспетчер пакетов для Kubernetes, он сделает работу намного проще. Чтобы найти больше о Helm, проверьте: https://github.com/helm/helm Отказ

Автоскалер кластера будет установлен на главном узле в пространстве пространства Kube-System. Не забудьте выбрать правую область AWS (тот, где был создан ваш кластер).

Чтобы установить Cluster AutoScaler Используйте эту команду, не стесняйтесь настроить значения для вашей среды:

helm install --name cluster-autoscaler \
 --namespace kube-system \
 --set image.tag=v1.2.0 \
 --set autoDiscovery.clusterName=my.cluster.com \
 --set extraArgs.balance-similar-node-groups=false \
 --set extraArgs.expander=random \
 --set rbac.create=true \
 --set rbac.pspEnabled=true \
 --set awsRegion=us-east-1 \
 --set nodeSelector."node-role\.kubernetes\.io/master"="" \
 --set tolerations[0].effect=NoSchedule \
 --set tolerations[0].key=node-role.kubernetes.io/master \
 --set cloudProvider=aws \
 stable/cluster-autoscaler

Оба. Чтобы узнать, какую версию Cluster AutoScaLer вы должны установить, проверьте раздел выпуска на https://github.com/kubernetes/autoscaler/tree/master/Cluster-autoScaler.

Одно интересное значение для проверки — расширитель. Cluster AutoScaLer, в настоящее время 4 расширитель. Они предназначены для предоставления различных стратегий для выбора группы узлов для масштабирования.

  • Случайный: расширитель по умолчанию должен использоваться, когда нет особой необходимости для масштабирования узлов-узлов по-разному:
  • большинство стручков: Выберите группу узлов с наибольшим количеством стручек, запланированных для масштабирования
  • Минимальные отходы: выберите группу узлов, которые отходы наименьшее количество ресурсов памяти/процессора
  • цена: выберите группу узлов на основе цен

Чтобы получить больше информации о других значениях для CA, проверьте: https://github.com/kubernetes/autoscaler/blob/master/Cluster-autoScaler/faq.md. Используйте эту команду, чтобы увидеть журналы автоскалера кластера:

$ kubectl -n kube-system get pods
NAME                                                         READY
                                        1/1

$ kubectl -n kube-system logs -f 

Чтобы проверить, если он действительно работает, создайте несколько стручков Nginx с большим количеством реплик:

$ kubectl run nginx --image=nginx --port=80 --replicas=200

Перейдите в AWS EC2 и проверьте группы AutoScaling, желаемая сумма будет увеличиваться, поскольку это необходимо. Чтобы масштабировать просто удалить развертывание Nginx:

$ kubectl delete deploy nginx

Резюме

Cluster AutoScaLer — это первый шаг, чтобы иметь эффективную среду с кубернанами. Он обеспечит очень приятное автоматическое масштабирование облачных ресурсов. Надеюсь, это может быть полезно, если у вас есть какие-либо соображения, просто дайте мне знать. Спасибо за прочтение!!

Оригинал: «https://dev.to/thnery/kubernetes-cluster-autoscaler-on-aws-5g5i»