В этой статье мы рассмотрим несколько распространенных способов создания кластера Kubernetes на AWS: Создание кластера с помощью kops: kops — это инструмент, предназначенный для промышленной эксплуатации, используемый для установки, обновления и управления Kubernetes на AWS. Создание кластера с помощью Amazon Elastic Kubernetes Service (EKS): EKS — это управляемый сервис Kubernetes, предоставляемый компанией Amazon. Кластер Kubernetes с EKS можно создать с помощью AWS Management Console. Создание кластера с помощью Rancher: Rancher — это платформа управления Kubernetes, которая упрощает развертывание Kubernetes и контейнеров. Kops — это инструмент производственного уровня, используемый для установки, обновления и эксплуатации высокодоступных кластеров Kubernetes на AWS и других облачных платформах с помощью командной строки. Прежде чем приступить к работе, вам нужно будет установить инструменты kubectl, kops и AWS CLI. Первым шагом будет настройка учетных данных (Access Credentials) для доступа к клиенту AWS. Для корректной работы kops нужно чтобы пользователь AWS IAM обладал следующими правами: AmazonEC2FullAccess AmazonRoute53FullAccess AmazonS3FullAccess IAMFullAccess AmazonVPCFullAccess Настройте AWSCLIi с учетными данными этого пользователя, выполнив команду: Теперь мы создадим выделенный бакет S3, который будет использоваться kops для хранения состояния, представляющего кластер. Назовем этот бакет my-cluster-state: Обязательно активируйте версионирование бакета, чтобы впоследствии иметь возможность восстановиться или вернуться к предыдущему состоянию: Что касается DNS, то у нас есть выбор между публичным или приватным DNS. В случае использования публичного DNS для создания кластера требуется действительный домен верхнего уровня или поддомен. DNS требуется рабочим узлам для обнаружения мастер-узла, а мастер-узлу — для обнаружения всех etcd-серверов. Домен, регистратор которого не является AWS, создает зону Route 53, размещенную на AWS, и соответствующим образом изменяет записи сервера преобразования имен у своего регистратора. В этом примере мы будем использовать простой приватный DNS для создания кластера на основе механизма сплетен (gossip-based). Единственное требование к такому сетапу — чтобы имя кластера заканчивалось на k8s.local. Следующая команда создаст кластер с одним мастером (инстанс m3.medium) и двумя узлами (два инстанса t2.medium) в зоне доступности us-west-2a: Некоторые параметры команды в приведенном выше примере имеют значения по умолчанию: --master-size , --master-count , --node-size  и --node-count . Мы использовали именно эти значения по умолчанию, поэтому результат был бы таким же, даже если бы мы явно не прописали эти опции. Также отметим, что kops будет создавать по одному мастер-узлу в каждой указанной зоне доступности, поэтому при использовании опции: --zones us-west-2a,us-west-2b будет создано два мастер-узла, по одному в каждой из двух зон (даже если опция --master-count не была указана в командной строке). Обратите внимание, что создание кластера может занять некоторое время, поскольку инстансы должны загрузиться, загрузить стандартные компоненты Kubernetes и достичь состояния готовности ("ready"). Kops предоставляет команду для проверки состояния кластера и проверки его готовности: Если вы хотите внести некоторые изменения в кластер, выполните следующие действия: Kops позволяет обновить существующий кластер (мастер и узлы) до последней рекомендованной версии Kubernetes без необходимости указания точной версии. Kops поддерживает плавное (поэтапное) обновление кластера, при котором мастер и рабочие узлы обновляются поочередно. 1. Обновление Kubernetes 2. Обновление хранилище состояний, чтобы оно соответствовало состоянию кластера. 3. Выполнение поэтапного обновления. Таким образом обновления будут выполняться на всех инстансах кластера, сначала на главном, а затем на рабочих. Для удаления существующего кластера, который мы использовали, например, для экспериментов или тестов, можно выполнить команду: Больше информации можно найти в документации AWS: Управление кластерами Kubernetes на AWS с помощью Kops  Amazon Elastic Container Service для Kubernetes (EKS) — это полностью управляемый сервис, который берет на себя все заботы по настройке и созданию кластера, обеспечивая поддержку multi-AZ на всех кластерах и автоматическую замену неработающих инстансов (мастера или рабочих узлов). По умолчанию кластеры в EKS состоят из трех мастеров, распределенных по трем различным зонам доступности для защиты от сбоев при одной из зон доступности AWS: Создание нового кластера Kubernetes с помощью EKS может быть выполнено с помощью консоли управления AWS (Management Console). После получения доступа к кластеру контейнеризированные приложения могут быть запланированы на новом кластере так же, как и при любой другой установке Kubernetes: Больше информации можно найти в документации AWS: Amazon EKS Rancher — это комплексная платформа управления контейнерами, которая упрощает развертывание Kubernetes в частности и контейнеров вцелом. Rancher (приложение) работает под операционной системой RancherOS, которая доступна в виде Amazon Machine Image (AMI) и, соответственно, может быть развернута на инстансе EC2. После установки и настройки инструмента AWS CLI можно сразу переходить к созданию инстанса EC2 с помощью AMI RancherOS. Узнать идентификаторы AMI для каждого региона можно в документации RancherOS. Например, выполните следующую команду: которая создаст один новый инстанс t2.micro EC2 с RancherOS в регионе ap-south-1 AWS. Убедитесь в том, что вы используете правильное имя ключа и группу безопасности. Также убедитесь, что группа безопасности разрешает трафик на TCP-порт 8080 для нового инстанса. Когда новый инстанс будет готов, просто подключитесь к нему с помощью ssh и запустите сервер Rancher: Это может занять несколько минут. После этого по порту 8080 инстанса EC2 можно получить доступ к пользовательскому интерфейсу. Поскольку по умолчанию доступ к пользовательскому интерфейсу и API Rancher может получить любой желающий, вам рекомендуется серьезно подойти к управлению доступом. Среда (environment) в Rancher — это логическая сущность, предназначенная для совместного использования развертываний и ресурсов различными группами пользователей. Среды создаются на основе шаблонов. Добавление среды Kubernetes сводится к выбору подходящего для нашего случая шаблона и вводу имени кластера. Если включен контроль доступа, мы можем добавить участников и выбрать их роли. Все, кто добавлен в список участников, будут иметь доступ к среде. Нам необходимо добавить в только что созданную среду Kubernetes как минимум один хост. В данном случае в качестве хоста будут выступать ранее созданные инстансы AWS EC2. После добавления первого узла Rancher автоматически начнет развертывание инфраструктуры (мастера), включая сервисы Kubernetes (например, kubelet, etcd, Kubee-proxy и т.д.). Хосты, которые будут использоваться в качестве узлов Kubernetes, потребуют, чтобы для kubectl были открыты TCP-порты 10250 и 10255. Обязательно ознакомьтесь с полным списком требований Rancher к хостам. После добавления узлов в среду Kubernetes настройка/обновление кластера Kubernetes может занять несколько минут: После того как кластер готов, контейнеризированные приложения могут быть развернуты с помощью каталога приложений Rancher или kubectl. Дополнительную информацию можно найти в документации Rancher: Kubernetes Помимо уже рассмотренных вариантов развертывания Kubernetes, для развертывания Kubernetes в публичных облаках, таких как AWS, можно использовать и другие инструменты. Каждый инструмент имеет свои уникальные возможности и подход к работе: Heptio — Heptio представляет собой решение на основе CloudFormation и kubeadm для развертывания Kubernetes на AWS, поддерживающее multi-AZ. Heptio подходит для пользователей, уже знакомых с инструментом оркестровки AWS CloudFormation. Kismatic Enterprise Toolkit (KET) — KET представляет собой набор инструментов с продуманными настройками по умолчанию, из коробки готовых к использованию на продакшене для создания корпоративных кластеров Kubernetes. kubeadm — Проект kubeadm ориентирован на упрощение создания кластера на AWS с использованием Terraform. Этот инструмент подходит только для тестирования и экспериментов, поскольку он не поддерживает multi-AZ и другие продвинутые фичи. В заключение приглашаем всех желающих на открытый урок, на котором мы рассмотрим процесс разворачивания кластера managed Kubernetes в Yandex.Cloud с использованием инструмента Terraform. Урок пройдет в рамках курса "Cloud Solution Architecture", записаться можно на странице курса.  Редактор