Kubernetes · 16 min read · Dec 14, 2025
Как создать кластер Kubernetes с помощью AWS CLI

Elastic Kubernetes Service (EKS) — это управляемый сервис Kubernetes, который размещается на AWS.
Основная причина использования EKS заключается в том, чтобы снять бремя управления подами, узлами и т. д. Запуск Kubernetes на AWS в настоящее время требует значительных технических знаний и часто выходит за рамки возможностей многих организаций. С EKS необходимая инфраструктура управляется внутренней командой Amazon, оставляя пользователям полностью управляемый движок Kubernetes, который можно использовать как через API, так и через стандартные инструменты kubectl.
EKS поддерживает все функции Kubernetes, включая пространства имен, настройки безопасности, квоты ресурсов и толерантности, стратегии развертывания, автоскейлеры и многое другое. EKS позволит вам запустить собственную управляющую плоскость, но также интегрируется с AWS IAM, чтобы вы могли поддерживать собственный контроль доступа к API.
EKS был построен на основе существующего решения Amazon “Kubernetes как услуга”, называемого Elastic Container Service for Kubernetes (EKS) — это управляемый сервис AWS, который упрощает развертывание, управление и эксплуатацию кластеров Kubernetes в облаке AWS.
Если вы запускаете Kubernetes на AWS, вы несете ответственность за управление управляющей плоскостью (т. е. мастер-узлами и рабочими узлами). Вам также нужно убедиться, что api-server высокодоступен и отказоустойчив, и т. д.
EKS снял бремя управления управляющей плоскостью с вас, благодаря чему вы теперь можете сосредоточиться на запуске своих рабочих нагрузок Kubernetes. Он чаще всего используется для безсостояния приложений, таких как микросервисы, поскольку управляющая плоскость управляется Amazon (EKS).
В этом руководстве мы научимся создавать кластер Kubernetes на AWS с помощью EKS. Вы узнаете, как создать административного пользователя для вашего кластера Kubernetes. Вы также узнаете, как развернуть приложение в кластер. Наконец, вы протестируете свой кластер, чтобы убедиться, что все работает правильно.
Давайте начнем!
Предварительные требования
- Учетная запись AWS.
- В статье предполагается, что вы знакомы с Kubernetes и AWS. Если нет, пожалуйста, уделите время изучению документации по обоим перед началом этого руководства.
Создание административного пользователя с правами
Начнем с создания административного пользователя для вашего кластера.
- Войдите в свою консоль AWS и перейдите в IAM. Нажмите Пользователи > Добавить пользователей.

- На следующем экране введите имя пользователя, например admin. Выберите Ключ доступа - Программный доступ. Нажмите Далее: Разрешения

- На следующем экране выберите Присоединить существующие политики напрямую. Нажмите на AdministratorAccess. Нажмите Далее: Теги.
Политика AdministratorAccess является встроенной политикой с Amazon Elastic Container Service (ECS). Она предоставляет полный доступ ко всем ресурсам ECS и всем действиям в консоли ECS. Основное преимущество этой политики заключается в том, что нам не нужно создавать или управлять дополнительным пользователем с дополнительными привилегиями для доступа к сервису AWS EKS.
Ваш административный пользователь может создавать экземпляры EC2, стеки CloudFormation, корзины S3 и т. д. Вам следует быть очень осторожным с тем, кому вы предоставляете такой доступ.

- На следующем экране нажмите Далее: Обзор

- На следующем экране нажмите Создать пользователя.

- На следующем экране вы получите зеленое сообщение Успех. Идентификатор ключа доступа и Секретные ключи доступа также отображаются на этом экране. Вам понадобятся эти ключи для настройки ваших инструментов CLI позже, поэтому запишите эти ключи в другом месте.

Создание экземпляра EC2
Теперь, когда вы создали административного пользователя, давайте создадим экземпляр EC2, который будет использоваться в качестве вашего мастер-узла Kubernetes.
- Введите EC2 в поле поиска. Нажмите на ссылку EC2. Нажмите Запустить экземпляр.


- Выберите Amazon Linux 2 AMI (HVM) для вашего экземпляра EC2. Мы будем использовать этот Amazon Linux AMI, чтобы упростить установку Kubernetes и других необходимых инструментов позже, таких как: kubectl!, docker и т. д.

- На следующем экране нажмите Далее: Настроить детали экземпляра.

- На следующем экране включите опцию Автоназначение публичного IP. Поскольку сервер находится внутри частной подсети, он не будет доступен извне. Вы можете предоставить своим серверам публичные IP-адреса, ассоциировав с экземпляром Elastic IP-адрес. Сделав это, ваш EC2 и ELK будут доступны. Нажмите Далее: Хранилище.

- На следующем экране нажмите Далее: Добавить теги > Далее: Настроить группу безопасности.


- На следующем экране нажмите Обзор и запуск > Запуск.


- Появится диалоговое окно ключевой пары. Нажмите Создать новую ключевую пару. Дайте ей имя, затем загрузите и сохраните файл .pem в безопасном месте. Нажмите Запустить экземпляр.

Настройка инструментов командной строки
Теперь, когда вы создали экземпляр EC2, вам нужно установить клиент для него. В терминах AWS клиент — это инструмент командной строки, который позволяет вам управлять облачными объектами. В этом разделе вы узнаете, как настроить инструменты интерфейса командной строки (CLI).
Перейдите на панель управления EC2. Вы должны увидеть, что ваш новый экземпляр EC2 работает. Если нет, ваш экземпляр может загружаться впервые, подождите 5 минут и попробуйте снова. Как только ваш экземпляр запустится, нажмите Подключиться.
На следующем экране нажмите Подключиться.

Вы будете перенаправлены в интерактивную SSH-сессию в вашем браузере. SSH позволяет вам безопасно подключаться и работать на удаленном сервере. Интерактивная SSH-сессия позволит нам установить инструменты командной строки для EKS и Kubernetes непосредственно на ваш экземпляр EC2.
После входа в SSH-сессию первое, что вам нужно сделать, это проверить версию вашего aws-cli. Это необходимо, чтобы убедиться, что вы используете последнюю версию AWS CLI. AWS CLI используется для настройки, управления и работы с вашим кластером.
Если ваша версия устарела, вы можете столкнуться с некоторыми проблемами и ошибками в процессе создания кластера. Если ваша версия ниже 2.0, вам нужно будет обновить ее.
- Выполните следующую команду, чтобы проверить вашу версию CLI.
aws --versionКак вы можете видеть в приведенном ниже выводе, мы используем версию 1.18.147 aws-cli, которая очень устарела. Давайте обновим CLI до последней доступной версии, которая на момент написания составляет v2+.
- Выполните команду ниже, чтобы загрузить последнюю доступную версию AWS CLI на ваш экземпляр EC2. curl загрузит ваш файл с указанного URL, -o назовет его так, как вы выберете, а “awscli-exe-linux-x86_64.zip” — это файл, который будет загружен.
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"- После завершения загрузки выполните команду ниже, чтобы извлечь содержимое вашего загруженного файла в текущий каталог.
unzip awscliv2.zip- Далее выполните команду which aws, чтобы установить ссылку на последнюю версию AWS CLI. Эта команда сообщит вам, где в пути вашей среды она может быть найдена, чтобы вы могли запускать ее из любого каталога.
which awsКак вы можете видеть в приведенном ниже выводе, устаревший AWS CLI находится по адресу /usr/bin/aws.
- Теперь вам нужно настроить aws-cli, выполнив команду обновления с некоторыми параметрами. Первый параметр ./aws/install поможет нам установить AWS CLI в текущий каталог. Второй параметр –bin-dir указывает, где в пути вашей среды будет находиться AWS CLI, а третий параметр –install-dir — это путь относительно bin-dir. Эта команда обеспечит актуальность всех ваших путей.
sudo ./aws/install --bin-dir /usr/bin --install-dir /usr/bin/aws-cli --update- Повторно выполните команду aws –version, чтобы убедиться, что вы используете последнюю версию.
aws --versionВы должны увидеть текущую установленную версию AWS CLI. Как вы можете видеть в приведенном ниже выводе, теперь мы используем v2.4.7 AWS CLI. Это последняя версия и не вызовет у вас никаких проблем при настройке следующих шагов.
- Теперь, когда ваша среда правильно настроена, пришло время настроить, с какой учетной записью AWS вы хотите взаимодействовать через AWS CLI. Выполните следующую команду, чтобы перечислить ваши текущие настроенные переменные окружения учетной записи с псевдонимом, который вы хотите использовать вместе с ней.
aws configureЭто покажет вам все ваши переменные окружения учетной записи AWS, которые в настоящее время настроены. Вы должны увидеть что-то подобное в приведенном ниже выводе. Вам нужно настроить некоторые параметры конфигурации, чтобы AWS CLI мог взаимодействовать с вашими необходимыми учетными записями. Выполните команду ниже, которая проведет вас через мастер настройки для настройки вашей учетной записи AWS.
- AWS Access Key ID [None]: Введите ключ доступа AWS, который вы записали ранее.
- AWS Secret Access Key [None]: Введите секретный ключ доступа AWS, который вы записали ранее.
- Вам также нужно указать имя региона по умолчанию, где будет находиться ваш кластер EKS. Вы должны выбрать регион AWS, где будет находиться ваш желаемый кластер EKS и который находится ближе всего к вам. В этом учебнике мы выбрали us-east-1 из-за его географического положения, близкого к нам, и удобства использования для следующих шагов в учебнике.
- Формат вывода по умолчанию [None]: Введите json в качестве формата вывода по умолчанию, потому что это будет очень полезно для нас при просмотре файлов конфигурации позже.
Теперь, когда вы настроили свои инструменты AWS CLI, пришло время настроить инструмент CLI Kubernetes, называемый kubectl, в вашей среде, чтобы вы могли взаимодействовать с вашим кластером EKS.
Kubectl — это интерфейс командной строки для Kubernetes. С помощью Kubectl вы можете управлять приложениями, работающими на кластерах Kubernetes. Kubectl не устанавливается по умолчанию на системах Linux и MacOS. Вы можете установить Kubectl на других системах, следуя инструкциям на сайте Kubernetes.
- Выполните команду ниже, чтобы загрузить бинарный файл kubectl. Бинарный файл — это компьютерный файл с расширением “.bin”, который может выполняться только на определенных типах компьютеров. Это простой способ для различных типов компьютеров обмениваться файлами. Мы используем бинарный файл kubectl, потому что он не зависит от платформы. Он будет работать на любой системе, которая может запускать операционную систему, подобную Unix, включая Linux и Mac OS.
curl -o kubectl https://amazon-eks.s3.us-west-2.amazonaws.com/1.16.8/2020-04-16/bin/linux/amd64/kubectl- Выполните команду chmod ниже, чтобы сделать бинарный файл kubectl исполняемым. Команда chmod — это команда Unix и Linux, используемая для изменения прав доступа к файлам или директориям. Команда Linux chmod использует восьмеричную систему счисления для указания прав доступа для каждого пользователя. Kubectl теперь можно использовать на вашем локальном компьютере.
chmod +x ./kubectl- Выполните команду ниже, чтобы создать каталог kubectl в вашей папке $HOME/bin и скопировать бинарный файл kubectl в него. Команда mkdir -p $HOME/bin создает подкаталог bin внутри вашей домашней директории. Команда mkdir используется для создания новых директорий или папок. Опция -p указывает команде mkdir автоматически создавать любые необходимые родительские директории для новой директории. Переменная окружной $HOME/bin — это переменная окружной, которая хранит путь к вашей домашней директории. У каждого пользователя Linux есть директория $HOME/bin в своей файловой системе. Конструкция && называется логическим оператором И. Она используется для группировки команд вместе, чтобы можно было выполнить более одной команды сразу. Конструкция && не является обязательной для работы этой команды, но она присутствует как лучшая практика.
Команда cp ./kubectl $HOME/bin/kubectl копирует локальный бинарный файл kubectl в ваш каталог kubectl и переименовывает файл в kubectl. Наконец, команда export делает то, что говорит — она экспортирует переменную окружной в память оболочки, чтобы ее могла использовать любая программа, запущенная из этой оболочки. В нашем случае нам нужно сообщить kubectl, где находится наш каталог kubectl, чтобы он мог найти бинарный файл kubectl.
mkdir -p $HOME/bin && cp ./kubectl $HOME/bin/kubectl && export PATH=$PATH:$HOME/bin- Выполните команду kubectl version ниже, чтобы проверить, правильно ли установлен kubectl. Команда kubectl version –short –client выводит сокращенную версию версии kubectl в хорошо отформатированном, удобочитаемом ответе API Kubernetes. Опция –client позволяет kubectl напечатать отформатированную версию ответа REST API Kubernetes, которая согласуется между версиями.
Опция –short указывает kubectl предоставить основную информацию в компактной форме с одной десятичной точкой для дробных чисел и сокращенным форматом времени, который такой же, как –format. Вы должны увидеть вывод, подобный приведенному ниже. Этот вывод говорит нам, что мы успешно установили kubectl, и он использует правильную версию.
Последнее, что вам нужно сделать в этом разделе, — это настроить инструмент cli eksctl для использования вашего кластера Amazon EKS. Инструмент cli eksctl — это интерфейс командной строки, который может управлять кластерами Amazon EKS. Он может генерировать учетные данные кластера, обновлять спецификацию кластера, создавать или удалять рабочие узлы и выполнять многие другие задачи.
- Выполните следующие команды, чтобы установить инструмент cli eksctl и проверить его версию.
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp && sudo mv /tmp/eksctl /usr/bineksctl versionПровизия кластера EKS
Теперь, когда у вас есть ваш EC2 и инструменты AWS CLI, вы можете провизировать свой первый кластер EKS.
- Выполните команду eksctl create cluster ниже, чтобы провизировать кластер с именем dev в регионе us-east-1 с одним мастер-узлом и тремя основными узлами.
eksctl create cluster --name dev --version 1.21 --region us-east-1 --nodegroup-name standard-workers --node-type t3.micro --nodes 3 --nodes-min 1 --nodes-max 4 --managedКоманда eksctl create cluster создает кластер EKS в регионе us-east-1, используя параметры по умолчанию, рекомендованные Amazon для этой конкретной конфигурации, и передает все аргументы в кавычках (“ “) или как переменные (${ }) соответственно.
Параметр name используется для определения имени этого кластера EKS, и это просто удобная метка для вашего удобства. version — это версия, которую вы хотите использовать кластеру, для этого примера мы останемся на Kubernetes v1.21.2, но не стесняйтесь исследовать другие варианты.
nodegroup-name — это имя группы узлов, которую этот кластер должен использовать для управления рабочими узлами. В этом примере вы упростите задачу и просто используете standard-workers, что означает, что ваши рабочие узлы будут иметь один vCPU и 3 ГБ памяти по умолчанию.
nodes — это общее количество основных рабочих узлов, которые вы хотите в своем кластере. В этом примере запрашиваются три узла. nodes-min и nodes-max контролируют минимальное и максимальное количество узлов, разрешенных в вашем кластере. В этом примере будет создано как минимум один, но не более четырех рабочих узлов.
- Вы можете перейти в свою консоль CloudFormation, чтобы отслеживать процесс провизии.

Как показано ниже, вы можете увидеть, что ваш стек dev создается.

- Нажмите на гиперссылку стека dev > Событие. Вы увидите список событий, связанных с процессом создания. Подождите, пока процесс провизии завершится — это может занять до 15 минут в зависимости от ваших конкретных обстоятельств — и проверьте статус стека в консоли CloudFormation.

- После того как вы дождетесь завершения провизии стека, перейдите в свою консоль CloudFormation, вы увидите статус вашего стека dev как CREATE_COMPLETE.
Теперь перейдите в свою консоль EC2. Вы увидите один мастер-узел и три основных узла на панели управления EC2. Этот вывод подтверждает, что вы успешно настроили кластер EKS.
- Выполните команду eksctl ниже, чтобы получить детали кластера dev, такие как cluster-ID и регион.
eksctl get cluster- Выполните команду aws eks update ниже, чтобы получить учетные данные удаленного рабочего узла. Эта команда должна быть выполнена на любом компьютере, с которого вы хотите подключиться к кластеру. Она загружает учетные данные для вашего kubectl, чтобы получить доступ к кластеру EKS Kubernetes удаленно, без использования ключей доступа AWS.
aws eks update-kubeconfig --name dev --region us-east-1Развертывание вашего приложения на кластере EKS
Теперь, когда вы провизировали свой кластер EKS, давайте развернем ваше первое приложение на вашем кластере EKS. В этом разделе вы узнаете, как развернуть веб-сервер nginx вместе с балансировщиком нагрузки в качестве образца приложения.
- Выполните команду ниже, чтобы установить git на вашей системе. Вам понадобится git, чтобы клонировать код веб-сервера nginx с GitHub.
sudo yum install -y git - Выполните команду git clone ниже, чтобы клонировать код веб-сервера nginx с github в ваш текущий каталог.
git clone https://github.com/ata-aws-iam/htf-elk.git- Выполните команду cd htf-elk, чтобы изменить рабочий каталог на каталог конфигурационных файлов nginx.
cd htf-elk- Выполните команду ls, чтобы перечислить файлы в текущем каталоге.
lsВы увидите следующие файлы в вашем каталоге nginx.
- Выполните команду cat ниже, чтобы открыть файл nginx-deployment.yaml, и вы увидите следующие содержимое в этом файле.
cat nginx-deployment.yaml
- apiVersion: apps/v1 — это основной API Kubernetes
- kind: Deployment — это тип ресурса, который будет создан для этого файла. В развертывании создается один под на контейнер.
- metadata: указывает значения метаданных, которые будут использоваться при создании объекта
- name: nginx-deployment — это имя или метка для этого развертывания. Если у него нет значения, имя развертывания берется из имени директории.
- labels: предоставляет метки для приложения. В этом случае они будут использоваться для маршрутизации сервиса через Elastic Load Balancing (ELB)
- env: dev описывает переменную окружения, которая определяется строковым значением. Таким образом, вы можете предоставить динамические данные конфигурации вашему контейнеру.
- spec: это место, где вы определяете, сколько реплик создать. Вы можете указать свойства, на которых вы хотите, чтобы каждая реплика основывалась.
- replicas: 3 создаст три реплики этого пода в вашем кластере. Эти реплики будут распределены по доступным рабочим узлам, которые соответствуют селектору меток.
- containerPort: 80 сопоставит порт из контейнера с портом на хосте. В данном случае он сопоставит порт 80 на контейнере с портом 30000 вашего локального компьютера.
- Выполните команду cat ниже, чтобы открыть файл сервиса nginx-svc.yaml. Вы увидите следующие содержимое в этом файле.
cat nginx-svc.yaml
- Выполните команду kubectl apply ниже, чтобы создать сервис nginx в вашем кластере Kubernetes. Это займет несколько минут, чтобы кластер EKS провизировал ELB для этого сервиса.
kubectl apply -f ./nginx-svc.yaml- Выполните команду kubectl get service ниже, чтобы получить детали о сервисе nginx, который вы только что создали.
kubectl get serviceВы получите следующий вывод. ClusterIP — это внутренний IP-адрес kubernetes, назначенный этому сервису. Имя LoadBalancer ELB — это уникальный идентификатор для этого сервиса. Он автоматически создаст ELB на AWS и провизирует публичную конечную точку для этого сервиса, к которой можно получить доступ с помощью таких сервисов, как веб-браузер (имя домена) или API-клиенты. Он доступен через IP-адрес по вашему выбору.
Балансировщик нагрузки ELB с именем a6f8c3cf0fe3a468d8828db6059ef05e-953361268.us-east-1.elb.amazonaws.com имеет порт 32406, который будет сопоставлен с портом контейнера 80. Запишите DNS-имя балансировщика нагрузки ELB из вывода; оно вам понадобится для доступа к сервису позже.
- Выполните команду kubectl apply ниже, чтобы применить развертывание для вашего кластера.
kubectl apply -f ./nginx-deployment.yaml- Выполните команду kubectl get deployment, чтобы получить детали о развертывании nginx, которое вы только что создали.
kubectl get deployment- Выполните команду ниже, чтобы получить доступ к вашему приложению nginx через балансировщик нагрузки. Вы увидите страницу приветствия от nginx в вашем терминале/консоли, что подтверждает, что ваше приложение nginx работает как ожидалось. Замените
на DNS-имя балансировщика нагрузки, которое вы записали выше.
curl "" 
- Вы также можете получить доступ к вашему приложению nginx через браузер, скопировав и вставив DNS-имя балансировщика нагрузки в браузер.

Проверка функции высокой доступности (HA) для вашего кластера
Теперь, когда вы успешно создали свой кластер, вы можете протестировать функцию HA, чтобы убедиться, что она работает как ожидалось.
Kubernetes поддерживает развертывания с несколькими узлами с использованием специальных контроллеров, которые работают в тандеме для создания и управления реплицированными подами или сервисами. Некоторые из этих контроллеров — это Deployments, ReplicationController, Job и DaemonSet.
Контроллер развертывания используется для управления репликацией на уровне пода или сервиса. Когда вашему поду не хватает ресурсов, он удалит все поды этого контроллера репликации (за исключением того, который работает на мастер-узле) и создаст новые реплики этого пода. Это поможет вам получить очень высокую доступность ваших приложений.
- Перейдите на панель управления EC2 и остановите все три рабочих узла.

- Выполните команду ниже, чтобы проверить статус ваших подов. Вы получите разные статусы: Terminating, Running и Pending для всех ваших подов. Потому что как только вы остановите все рабочие узлы, EKS попытается перезапустить все рабочие узлы и поды снова. Вы также можете увидеть некоторые новые узлы, которые вы можете идентифицировать по их возрасту (50s).
kubectl get podЭто займет некоторое время, чтобы загрузить новый экземпляр EC2 и поды. Как только все рабочие узлы будут загружены, вы увидите, что все новые экземпляры EC2 вернутся в статус Running.

- Повторно выполните kubectl get service. Вы можете увидеть, что EKS создаст новый сервис nginx и новое DNS-имя для вашего балансировщика нагрузки.
kubectl get service Скопируйте и вставьте новое DNS в ваш браузер. Вы снова получите приветствие от страницы Nginx. Этот вывод подтверждает, что ваша HA работает так, как задумано.

Заключение
В этой статье вы узнали, как настроить ваш кластер EKS. Вы также проверили, что функция высокой доступности работает, остановив все ваши рабочие узлы и проверив статус ваших подов. Теперь вы должны уметь создавать и управлять кластерами EKS с помощью kubectl.
Get new posts in your inbox
No spam. Unsubscribe anytime.