В первой части статьи мы рассмотрели различные варианты запуска контейнеров в облаке на примере Amazon Web Services. В этом материале мы на практике разберем, как выглядит создание и запуск кластера Elastic Kubernetes Service.

-------------------

Итак, прежде чем начать работу EKS, нам потребуется несколько инструментов:

  • Awscli – консольная утилита для работы с облаком AWS (нужен  ключ для доступа в аккаунт, потому что лёгкого способа зайти через логин/пароль не существует, но вы и так это знаете);

  • Ekscli – консольная утилита для работы с EKS;

  • Kubectl – консольная утилита для работы с кластерами Kubernetes;

  • Terraform – решение Infrastructure as Code от компании HashiСorp, помогающее декларативно управлять инфраструктурой.

Существует несколько способов развернуть кластер, мы рассмотрим два из них и намеренно проигнорируем вариант настройки через графический интерфейс. Я уже вижу поднятую руку и возмущенный вопрос: «Мы заплатим столько денег, чтобы вводить команды в консольных утилитах AWS?». На этот раз – да. На самом деле, вы, конечно, можете покликать мышкой в веб-консоли и настроить всё необходимое, но, если вы занимаетесь развертыванием EKS впервые, я бы рекомендовал воспользоваться консольными утилитами. Да и я буду показывать именно команды и конфиги, чтобы было понятно, что происходит на каждом этапе, а вы сможете это потом воспроизвести.

Способ № 1

Самый простой прием — это воспользоваться утилитой Eksctl. Она бесплатно доступна на сайте Weaveworks. Сама команда будет выглядеть примерно так:

Для ее создания мы использовали следующие ключи:

  • create – создаёт кластер;

  • version – указывает, какую версию Kubernetes мы разворачиваем. (Обычно доступна свежая версия плюс несколько предыдущих, если вам требуется совместимость, то лучше свериться с актуальной документацией);

  • region – указывает на то, в каком регионе мы создаём кластер;

  • nodegroup-name – задает имя NodeGroup, внутри которой будут создаваться рабочие ноды;

  • node-type – указывает тип нод. В AWS, как и в других подобных провайдерах, можно выбирать ноды в зависимости от технических характеристик. Выбирать можно любую, но нужно помнить, что Kubernetes – сервис требовательный, и предполагаемую нагрузку лучше рассчитать заранее;

  • nodes – указывает на количество нод, которые предстоит создать.

То же самое можно воспроизвести, подготовив конфигурационный файл, где будут описаны все желаемые параметры нашего будущего кластера:

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

После выполнения команды, которая обычно занимает достаточно продолжительное время, конфиг для подключения к кластеру окажется в папке, а kube в домашней директории пользователя. Всё как обычно. Соответственно, теперь через kubectl можно применять yaml-файлы, которые у вас конечно же уже готовы.

Способ № 2

Второй вариант — это работа с Terraform. Если вы будете использовать этот способ, то он может сработать за пределами AWS с минимальными правками. Плюс, если всё остальное в AWS вы делаете с помощью Terraform, то можно и в данном случае  воспользоваться этим инструментом. Если потребуется изменить или удалить какой-нибудь ресурс, то делать это через Terraform куда проще, чем руками.

Если вы скачали Terraform, остаётся подготовить конфигурационные файлы и запустить необходимые команды. У HashiCorp есть отличный пример в их репозитории, на основе которого мы и выполним нашу задачу. Клонируем себе этот репозиторий и получаем небольшой набор файлов: 

При использовании Terraform наша задача сводится к созданию объектов облака AWS, из которых будет состоять будущий кластер. В репозитории под все необходимые объекты есть готовые tf-файлы:

  • vpc.tf – создает VPC (Virtual private cloud), зоны доступности и подсети, используя модуль AWS VPC;

  • security-groups.tf – создает группы безопасности, которые будет использовать наш кластер;

  • eks-cluster.tf – создаёт все ресурсы кластера с помощью модуля AWS EKS Module. Здесь будет отражено имя кластера, версия Kubernetes, группы нод и т.п.;

  • outputs.tf – определяет конфигурацию, которую мы получим на выходе;

  • versions.tf – указывает версию самой Terraform и модулей, которые будут использоваться.

В файле eks-cluster.tf мы внесём все параметры нашего кластера, как в предыдущих примерах:

А дальше, всё как обычно в Terraform: terraform init > terraform plan > terraform apply. И получается такой же кластер, как и выше.

Мы разобрали два способа создания кластера EKS, но это только самые популярные варианты. Самостоятельно можно также рассмотреть и Cloudformation – собственную систему Infrastructure as Code от AWS, или, например, посмотреть, как развёртывать кластер с помощью систем вроде Ansible или Chef.

Материал подготовил руководитель группы защиты инфраструктурных ИТ-решений компании «Газинформсервис» Сергей Полунин, блог Сергея можно почитать по ссылке.

Комментарии (0)