Гид по технологиям

Как создать Kubernetes‑кластер на AWS с помощью Kops

• 8 min read • DevOps • Обновлено 23 Nov 2025
Kops: создание Kubernetes‑кластера на AWS
Kops: создание Kubernetes‑кластера на AWS

Обложка: Kops и Kubernetes на AWS

О чём эта статья

Эта инструкция подробно описывает создание Kubernetes‑кластера с помощью kops в AWS на примере конфигурации: 1 master (t2.medium) и 1 worker (t2.micro). Вы получите рабочий план действий, готовые команды, варианты проверки, рекомендации по безопасности и план удаления ресурсов. Предполагается, что у вас уже есть базовые знания Kubernetes (pods, nodes, namespaces).

Коротко — что делает Kops: создает и поддерживает инфраструктуру (EC2, VPC, subnets, security groups, load balancers) и генерирует манифесты Kubernetes, сохраняя состояние в S3. Kops также умеет генерировать Terraform-файлы и обновлять версию k8s.

Important: Kops активно работает с DNS-записями в Route53 — для корректного развёртывания нужен домен/поддомен в AWS Route53.

Предварительные требования

  • AWS‑аккаунт с правами на создание: EC2, S3, IAM, Route53. Администраторские права упрощают задачу, но можно ограничить права до минимально необходимых (см. раздел безопасности).
  • EC2‑инстанс Ubuntu 18.04 (или эквивалент) с подключением в интернет — он будет служить рабочей машиной для выполнения команд kops/kubectl.
  • S3‑бакет для хранения состояния Kops.
  • Домен или поддомен в Route53, настроенный для делегирования NS (если вы используете поддомен).
  • IAM‑роль или профиль с необходимыми правами, прикреплённый к EC2‑инстансу.

Что мы сделаем — краткий план

  1. Проверим S3‑бакет и IAM‑роль.
  2. Привяжем роль к EC2‑инстансу.
  3. Установим kubectl и kops на EC2.
  4. Подготовим hosted zone и записи в Route53.
  5. Создадим конфигурацию кластера и развернём ресурсы.
  6. Проверим работоспособность и удалим кластер при необходимости.

Проверка S3 и IAM

Kops хранит состояние кластера в S3, поэтому заранее создайте или выберите бакет.

S3 бакет с конфигурациями kops

Проверьте IAM‑роль (или профиль EC2) — она должна позволять создавать EC2, VPC, Subnets, Security Groups, IAM (если требуется), ELB и работать с S3/Route53. Если не уверены в правах, временно используйте роль с широкими правами и позже сократите их.

Консоль IAM: роль с правами

Совет: для собственной безопасности создавайте отдельный профиль/роль для kops с нужными политиками и документируйте изменения.

Привязка IAM к EC2‑инстансу

На EC2‑инстансе, с которого вы будете выполнять kops, должна быть привязана IAM‑роль. В AWS Console: EC2 → выбрать инстанс → Actions → Security → Modify IAM role.

Обновление EC2: изменить IAM роль

Выберите роль и сохраните.

Выбор IAM роли для EC2

Проверка на инстансе: убедитесь, что AWS CLI использует роль (aws sts get-caller-identity). Если вы используете профили ключей, проверьте переменные окружения AWS_ACCESS_KEY_ID и т.д.

Установка kubectl и kops на EC2

Войдите на EC2 (ssh) и выполните установку kubectl:

# Скачать последнюю стабильную версию kubectl
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
# Проверка хеша
echo "$(cat kubectl.sha256)  kubectl" | sha256sum --check
# Установка
chmod +x kubectl
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
# Либо поместить в ~/.local/bin и добавить в PATH
mkdir -p ~/.local/bin
mv ./kubectl ~/.local/bin/kubectl

# Проверка
kubectl version --client

Установка Kops на EC2

Установка kops:

# Скачиваем последний релиз kops
curl -Lo kops https://github.com/kubernetes/kops/releases/download/$(curl -s https://api.github.com/repos/kubernetes/kops/releases/latest | grep tag_name | cut -d '"' -f 4)/kops-linux-amd64
chmod +x kops
sudo mv kops /usr/local/bin/kops
# Проверка
kops version

Если kops не найден, убедитесь, что /usr/local/bin в PATH.

DNS: hosted zone и recordset

Kops создаёт DNS‑записи для API и master‑узлов в Route53. Вам нужен домен или поддомен, где вы сможете добавить A‑записи и NS‑делегирование при необходимости.

Пример: у вас есть домен example.com, и вы хотите создать кластер kops.example.com. Создайте hosted zone для kops.example.com и продублируйте NS‑записи в родительской зоне.

Создание Hosted Zone в Route53

Проверьте, что записанные NS серверы для поддомена делегированы в родительской зоне.

Recordset в основной Hosted Zone

Важно: если DNS не настроен корректно, kops не сможет создать A‑записи и cluster‑API будет недоступна по FQDN.

Создание конфигурации кластера (Kops state store)

Установите переменную окружения KOPS_STATE_STORE, указывающую на ваш S3‑бакет:

export KOPS_STATE_STORE=s3://kops.devopslee.com

Проверьте наличие кластеров:

kops get clusters

Если бакет не указан, используйте опцию –state s3:// в командах.

Пример команды создания конфигурации

Мы создадим конфигурацию с 1 master и 1 node, зоны us-east-1a,b,c, master t2.medium, node t2.micro.

kops create cluster \
  --name kops.devopslee.com \
  --state s3://kops.devopslee.com \
  --cloud aws \
  --master-size t2.medium \
  --master-count 1 \
  --master-zones us-east-1a \
  --node-size t2.micro \
  --node-count 1 \
  --zones us-east-1a,us-east-1b,us-east-1c \
  --ssh-public-key ~/.ssh/id_rsa.pub

Если у вас ещё нет SSH‑ключей, создайте:

ls -l ~/.ssh/
ssh-keygen -t rsa -b 4096 -C "kops@yourdomain"

Если команда create была запущена ранее и частично записала конфигурацию в S3, удалите старую конфигурацию перед повторной попыткой:

kops delete cluster --name kops.devopslee.com --state s3://kops.devopslee.com --yes

Создание конфигурации кластера

После успешной генерации конфигураций вы увидите набор YAML в S3. Можно редактировать конфигурацию (kops edit cluster) перед финальным развёртыванием.

Детали создания кластера

Конфигурация в S3

Применение конфигурации и создание ресурсов

Чтобы kops создал все облачные ресурсы (EC2, ELB, ASG, Subnets и т.д.), выполните:

kops update cluster --name kops.devopslee.com --state s3://kops.devopslee.com --yes

Этот шаг инициирует создание множества ресурсов — процесс может занять от нескольких минут до 15–30 минут в зависимости от региона и лимитов аккаунта.

Запуск создания облачных ресурсов

Для проверки статуса используйте:

kops validate cluster --wait 10m

Когда все компоненты будут готовы, kubernetes‑кластер станет в состоянии Ready.

Кластер готов

Как проверить рабочий кластер

После того как кластера готов, проверьте ноды и поды:

kubectl get nodes
kubectl get nodes -o wide
kubectl get pods --all-namespaces
kubectl get pods

Kops автоматически создаёт записи A в hosted zone с IP мастеров.

DNS записи с IP master

Проверка системных pod в кластере

Удаление кластера

Если кластер больше не нужен, удалите его и связанные ресурсы командой:

kops delete cluster --name kops.devopslee.com --state s3://kops.devopslee.com --yes

Процесс удалит EC2, load balancers, AutoScaling Groups и прочие ресурсы, созданные kops.

Удаление кластера

После успешного удаления проверьте S3 и Route53 — остаточные записи или объекты могут остаться и их нужно удалить вручную.

Удаление завершено успешно

Частые ошибки и способы устранения

  • kops get clusters возвращает пустой список: проверьте переменную KOPS_STATE_STORE и права на S3.
  • DNS‑проблемы: убедитесь, что NS‑записи поддомена делегированы в родительской Hosted Zone.
  • Ошибка создания EC2: проверьте лимиты EC2, доступные VPC/subnet и IAM‑права.
  • SSH‑подключение не работает: проверьте правильность ssh‑ключа в команде –ssh-public-key и security group.
  • Долгое создание: проверьте статусы CloudFormation/AutoScaling в AWS Console — часто видно причину задержки.

Безопасность и привилегии

Рекомендации:

  • Не используйте root/админ ключи в постоянном режиме. Создайте IAM‑роль с набором прав, минимально необходимых kops.
  • Храните KOPS_STATE_STORE в S3 с шифрованием (SSE) и включенным versioning для возможности восстановления.
  • Разграничьте доступ к hosted zone — только необходимые пользователи/роль могут изменять записи DNS.
  • Контролируйте доступ к kubeconfig: kops автоматически записывает kubeconfig; не храните его в общедоступных местах.

Короткий чек: S3 (SSE + Versioning), IAM‑роли с минимальными правами, Security Groups ограничены по IP, RBAC для Kubernetes настроен.

Альтернативы и когда Kops не подходит

  • AWS EKS: если вы предпочитаете управляемый Kubernetes с SLA и интеграцией с AWS, используйте EKS.
  • kubeadm: подходит для ручного управления кластером или on‑premise, больше контроля, но требует больше операций вручную.
  • KubeSpray/Terraform: когда вы хотите инфраструктуру, управляемую исключительно через Terraform. Kops может генерировать Terraform конфигурации, но для полного «Terraform as source of truth» лучше использовать готовые модули.

Когда Kops не подходит: если требуется строго управляемый сервис с полной интеграцией AWS (EKS), или вы работаете в среде, где Route53 недоступен.

Методология развёртывания: краткий SOP

  1. Проверить требования: S3, IAM, Route53, EC2 рабочая машина.
  2. Настроить KOPS_STATE_STORE и проверить доступ к S3.
  3. Создать/проверить SSH‑ключи.
  4. Выполнить kops create cluster (с указанием –ssh-public-key).
  5. Проверить конфигурацию: kops edit cluster, kops edit ig (instancegroup).
  6. Применить изменения: kops update cluster –yes.
  7. Validate: kops validate cluster –wait 10m.
  8. Тесты: kubectl get nodes, kubectl get pods -A, развернуть тестовое приложение.
  9. Документировать изменения и сохранить бэкапы S3 (versioning).

Роли и обязанности — чеклисты

Администратор AWS:

  • Создать/проверить S3‑бакет с versioning и SSE
  • Предоставить IAM‑роль с нужными правами
  • Настроить Hosted Zone и NS‑делегирование

DevOps-инженер:

  • Подготовить EC2‑инстанс, установить kubectl/kops
  • Создать SSH‑ключи и передать public key
  • Запустить kops create/update и validate
  • Тестировать приложение и мониторинг

Security engineer:

  • Проверить политики IAM и scope прав
  • Настроить Network ACL и Security Groups
  • Убедиться в шифровании S3 и хранении kubeconfig

Критерии приёмки

  • kops validate cluster возвращает Ready или статус с успешной валидацией всех нод.
  • kubectl get nodes показывает требуемое число нод и статус Ready.
  • Все system pods в kube-system находятся в состоянии Running.
  • DNS‑имена мастера разрешаются в IP‑адреса и доступны согласно ACL.

Отладка: набор типичных команд

# Проверить состояние кластера kops
kops get cluster --name kops.devopslee.com --state s3://kops.devopslee.com -o yaml
# Посмотреть instancegroups
kops get ig --name kops.devopslee.com --state s3://kops.devopslee.com
# Просмотреть логи CloudFormation (если используются)
# Проверить AWS AutoScaling/EC2/ELB в Console
# Просмотреть kubelet/journal logs на нодах
ssh ubuntu@ 'sudo journalctl -u kubelet -n 200'

Ментальные модели и эвристики

  • Kops = k8s infra + минимум кода: думайте о kops как об автоматизаторе инфраструктуры для k8s.
  • S3 как «источник правды»: всё состояние хранится в S3 — делайте бэкапы и versioning.
  • DNS прежде всего: если DNS не работает — API и доступ к кластеру будут ломаться.

Когда развёртывание не удаётся: галерея крайних случаев

  • Регионульпозиция: выбранный тип инстанса недоступен в регионе → ошибка запуска EC2 → смените тип или регион.
  • Квоты аккаунта исчерпаны: проверьте лимиты EC2/ELB/ENI в консоли AWS и запросите увеличения.
  • Неправильный subnet/VPC: кластера может не иметь выхода в интернет — проверьте NAT/IGW.

Короткий плейбук: шаги для быстрого восстановления (rollback)

  1. Если ресурс частично создан — не спешите удалять всё: проверьте логи и S3 конфигурацию.
  2. Если ошибка в конфигурации kops — поправьте YAML через kops edit и выполните kops update –yes.
  3. Если необходим откат — удалите и пересоздайте кластер после удаления: kops delete cluster && kops create cluster.

Соображения о стоимости

Kops развернёт стандартные AWS‑ресурсы (EC2, ELB, EBS, NAT, IP). Стоимость зависит от размеров инстансов и регионов. Прежде чем развертывать, оцените стоимость используемых t2.micro/t2.medium, а также дополнительных ресурсов (ELB). Удаляйте тестовые кластеры, чтобы не накапливать расходы.

Локальные альтернативы и особенности для РФ/целевого региона

  • Если у вас корпоративный DNS или вы не хотите использовать Route53, потребуется ручная настройка A/NS‑записей в вашей DNS‑службе и настройка kops с флагом –dns private/ns. Это усложнит автоматизацию.
  • При работе в специфичных регионах проверьте доступность типов инстансов и услуг AWS в выбранном регионе.

Mermaid: простая схема принятия решения

flowchart TD
  A[Хотите создавать k8s в AWS?] --> B{Нужен управляемый сервис?}
  B -- Да --> C[EKS]
  B -- Нет --> D{Хотите полный контроль и автоматизацию}
  D -- Да --> E[Kops]
  D -- Нет --> F[kubeadm / manual]

Краткое резюме

Kops — мощный инструмент для автоматизированного развёртывания Kubernetes в AWS, хорошо подходит, если вы хотите контролировать инфраструктуру и при этом получать готовую автоматизацию создания ресурсов. Он требует корректной настройки S3 и DNS (Route53), а также корректных IAM‑прав. В статье приведён пошаговый SOP, чеклисты для ролей, советы по безопасности и устранению ошибок.

Summary:

  • Подготовьте S3, IAM и Route53.
  • Установите kubectl и kops на рабочую машину.
  • Создайте конфигурацию kops и примените её (kops update –yes).
  • Проверьте кластер (kops validate, kubectl get nodes).
  • При необходимости удалите kops delete cluster.

Если нужно, могу сгенерировать готовый Terraform‑шаблон из конфигурации kops, дать политики IAM минимальных прав или подготовить пример kops config под ваш конкретный VPC/подсети.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро