Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • AI Studio
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
    • Все инструкции
    • Подключение к узлу по SSH
    • Подключение к узлу через OS Login
    • Обновление Kubernetes
    • Настройка автомасштабирования
    • Подключение Terraform-провайдера Kubernetes
      • Получение информации о кластере Kubernetes
      • Посмотреть операции с кластером Kubernetes
      • Создание кластера Kubernetes
      • Изменение кластера Kubernetes
      • Создание пространства имен в кластере Kubernetes
      • Мониторинг состояния кластера Kubernetes
      • Удаление кластера Kubernetes
    • Подключение внешних узлов к кластеру
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • История изменений
  • Обучающие курсы

В этой статье:

  • Перед началом работы
  • Создайте кластер Managed Service for Kubernetes
  • Примеры
  • Создание кластера Managed Service for Kubernetes с базовым мастером
  • Создание кластера Managed Service for Kubernetes с высокодоступным мастером в трех зонах доступности
  • Создание кластера Managed Service for Kubernetes с высокодоступным мастером в одной зоне доступности
  • См. также
  1. Пошаговые инструкции
  2. Управление кластером Kubernetes
  3. Создание кластера Kubernetes

Создание кластера Managed Service for Kubernetes

Статья создана
Yandex Cloud
Улучшена
Обновлена 2 июня 2025 г.
  • Перед началом работы
  • Создайте кластер Managed Service for Kubernetes
  • Примеры
    • Создание кластера Managed Service for Kubernetes с базовым мастером
    • Создание кластера Managed Service for Kubernetes с высокодоступным мастером в трех зонах доступности
    • Создание кластера Managed Service for Kubernetes с высокодоступным мастером в одной зоне доступности
  • См. также

Примечание

В регионе Казахстан доступна только зона доступности kz1-a.

Примечание

В регионе Казахстан поддерживаются базовые и высокодоступные мастера в одной зоне доступности.

Создайте кластер Managed Service for Kubernetes, а затем создайте группу узлов.

Если вы хотите создать кластер без доступа в интернет, обратитесь к разделу Создание и настройка кластера Kubernetes без доступа в интернет.

Перед началом работыПеред началом работы

Консоль управления
  1. Войдите в консоль управления. Если вы еще не зарегистрированы, перейдите в консоль управления и следуйте инструкциям.

  2. На странице Yandex Cloud Billing убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе ACTIVE или TRIAL_ACTIVE. Если платежного аккаунта нет, создайте его.

  3. Если у вас еще нет каталога, создайте его.

  4. Убедитесь, что у аккаунта, с помощью которого вы собираетесь создавать кластер Managed Service for Kubernetes, есть необходимые для этого роли.

  5. Убедитесь, что у вас достаточно свободных ресурсов в облаке.

  6. Если у вас еще нет сети, создайте ее.

  7. Если у вас еще нет подсетей, создайте их в зонах доступности, где будут созданы кластер Managed Service for Kubernetes и группа узлов.

  8. Создайте сервисные аккаунты:

    • Сервисный аккаунт с ролями k8s.clusters.agent и vpc.publicAdmin на каталог, в котором создается кластер Managed Service for Kubernetes. От его имени будут создаваться ресурсы, необходимые кластеру Managed Service for Kubernetes.
    • Сервисный аккаунт с ролью container-registry.images.puller на каталог с реестром Docker-образов. От его имени узлы будут скачивать из реестра необходимые Docker-образы.

    Вы можете использовать один и тот же сервисный аккаунт для обеих операций.

    Примечание

    Для создания кластера с туннельным режимом его сервисному аккаунту необходима роль k8s.tunnelClusters.agent.

  9. Создайте и настройте нужные группы безопасности.

  10. Изучите рекомендации по использованию Managed Service for Kubernetes.

Создайте кластер Managed Service for KubernetesСоздайте кластер Managed Service for Kubernetes

Консоль управления
CLI
Terraform
API
  1. В консоли управления выберите каталог, в котором нужно создать кластер Managed Service for Kubernetes.

  2. Выберите сервис Managed Service for Kubernetes.

  3. Нажмите кнопку Создать кластер.

  4. Введите имя и описание кластера Managed Service for Kubernetes. Имя кластера Managed Service for Kubernetes должно быть уникальным в рамках Yandex Cloud.

  5. Укажите Сервисный аккаунт для ресурсов, который будет использоваться для создания ресурсов.

  6. Укажите Сервисный аккаунт для узлов, который будет использоваться узлами Managed Service for Kubernetes для доступа к реестру Docker-образов Yandex Container Registry.

  7. (Опционально) Укажите Ключ шифрования, который будет использоваться для шифрования секретов.

    Эту настройку невозможно изменить после создания кластера.

  8. Укажите релизный канал.

    Эту настройку невозможно изменить после создания кластера.

  9. В поле Метки добавьте облачные метки.

  10. В блоке Конфигурация мастера:

    • (опционально) Раскройте секцию Вычислительные ресурсы и выберите конфигурацию ресурсов для мастера.

      По умолчанию для работы одного хоста мастера предоставляются следующие ресурсы:

      • платформа — Intel Cascade Lake;
      • гарантированная доля vCPU — 100%;
      • количество vCPU — 2;
      • объем RAM — 8 ГБ.

      Чтобы разрешить в дальнейшем изменять конфигурацию ресурсов мастера, выберите опцию Разрешить увеличивать объём ресурсов под нагрузку.

      Примечание

      Функциональность выбора и изменения конфигурации мастера находится на стадии Preview.

    • В поле Версия Kubernetes выберите версию Kubernetes, которая будет установлена на мастере Managed Service for Kubernetes.

    • В поле Публичный адрес выберите способ назначения IP-адреса:

      • Автоматически — чтобы назначить случайный IP-адрес из пула IP-адресов Yandex Cloud.
      • Без адреса — чтобы не назначать публичный IP-адрес.

      Важно

      Не размещайте кластер с публичным IP-адресом в подсетях, в которых доступ в интернет обеспечивается через NAT-инстанс. При такой конфигурации ответ на запрос к публичному IP-адресу кластера придет с IP-адреса NAT-инстанса и будет отклонен клиентом. Подробнее см. Приоритет маршрутов в сложных сценариях.

      Эту настройку невозможно изменить после создания кластера.

    • В поле Тип мастера выберите тип мастера Managed Service for Kubernetes:

      • Базовый — содержит один хост мастера в одной зоне доступности. Такой мастер дешевле, но он не является отказоустойчивым. Прежнее название — зональный.

        Важно

        Базовый мастер тарифицируется как зональный и отображается в Yandex Cloud Billing как Managed Kubernetes. Zonal Master - small.

      • Высокодоступный — содержит три хоста мастера. Прежнее название — региональный.

        Важно

        Высокодоступный мастер тарифицируется как региональный и отображается в Yandex Cloud Billing как Managed Kubernetes. Regional Master - small.

    • В поле Облачная сеть выберите сеть, в которой будет создан мастер Managed Service for Kubernetes. Если сети нет, создайте ее.

      Примечание

      При выборе облачной сети из другого каталога назначьте сервисному аккаунту для ресурсов следующие роли в этом каталоге:

      • vpc.privateAdmin
      • vpc.user
      • vpc.bridgeAdmin

      Для использования публичного IP-адреса дополнительно назначьте роль vpc.publicAdmin.

    • Для высокодоступного мастера в поле Распределение мастеров по зонам доступности выберите, как должны быть размещены хосты мастера:

      • Одна зона — в одной зоне доступности и одной подсети. Такой мастер подойдет, если вы хотите обеспечить высокую доступность кластера и уменьшить сетевую задержку внутри него.
      • Разные зоны — в трех разных зонах доступности. Такой мастер обеспечивает наибольшую отказоустойчивость: при недоступности одной зоны мастер остается работоспособным.
    • В зависимости от выбранного типа мастера:

      • Для базового или высокодоступного мастера в одной зоне укажите зону доступности и подсеть.
      • Для высокодоступного мастера в разных зонах укажите подсети в каждой зоне.

      Если подсетей нет, создайте их.

      Важно

      Тип мастера и его размещение нельзя изменить после создания кластера.

    • Выберите группы безопасности для сетевого трафика кластера Managed Service for Kubernetes.

      Важно

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

  11. В блоке Настройки окна обновлений:

    • В поле Частота обновлений / Отключение настройте окно для обновлений:
      • Отключено — отключение автоматических обновлений.
      • В любое время — обновления разрешены в любое время.
      • Ежедневно — обновления будут происходить во временном интервале, указанном в поле Время (UTC) и продолжительность.
      • В выбранные дни — обновления будут происходить во временном интервале, указанном в поле Расписание по дням.
  12. В блоке Сетевые настройки кластера:

    • (Опционально) Выберите контроллер сетевых политик:

      Эту настройку невозможно изменить после создания кластера.

      Важно

      Нельзя одновременно включить контроллер сетевых политик Calico и туннельный режим Cilium.

      • Включить сетевые политики, чтобы задействовать Calico.
      • Включить туннельный режим, чтобы задействовать Cilium.
    • Укажите CIDR кластера — диапазон IP-адресов, из которого будут выделяться IP-адреса для подов.

    • Укажите CIDR сервисов — диапазон IP-адресов, из которого будут выделяться IP-адреса для сервисов.

    • Задайте маску подсети узлов Managed Service for Kubernetes и максимальное количество подов в узле.

  13. Нажмите кнопку Создать.

Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), установите и инициализируйте его.

По умолчанию используется каталог, указанный при создании профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду yc config set folder-id <идентификатор_каталога>. Также для любой команды вы можете указать другой каталог с помощью параметров --folder-name или --folder-id.

Чтобы создать кластер Managed Service for Kubernetes:

  1. Укажите параметры кластера Managed Service for Kubernetes в команде создания (в примере приведены не все параметры):

    yc managed-kubernetes cluster create \
      --name test-k8s \
      --network-name default \
      --public-ip \
      --release-channel regular \
      --version 1.27 \
      --cluster-ipv4-range 10.1.0.0/16 \
      --service-ipv4-range 10.2.0.0/16 \
      --security-group-ids enpe5sdn7vs5********,enpj6c5ifh75******** \
      --service-account-name default-sa \
      --node-service-account-name default-sa \
      --master-location zone=kz1-a,subnet-id=mysubnet \
      --daily-maintenance-window start=22:00,duration=10h
      --labels <имя_облачной_метки=значение_облачной_метки>
    

    Где:

    • --name — имя кластера Managed Service for Kubernetes.

    • --network-name — имя сети.

      Примечание

      При выборе облачной сети из другого каталога назначьте сервисному аккаунту для ресурсов следующие роли в этом каталоге:

      • vpc.privateAdmin
      • vpc.user
      • vpc.bridgeAdmin

      Для использования публичного IP-адреса дополнительно назначьте роль vpc.publicAdmin.

    • --public-ip — флаг, который указывает, если кластеру Managed Service for Kubernetes требуется публичный IP-адрес.

      Важно

      Не размещайте кластер с публичным IP-адресом в подсетях, в которых доступ в интернет обеспечивается через NAT-инстанс. При такой конфигурации ответ на запрос к публичному IP-адресу кластера придет с IP-адреса NAT-инстанса и будет отклонен клиентом. Подробнее см. Приоритет маршрутов в сложных сценариях.

      Эту настройку невозможно изменить после создания кластера.

    • --release-channel — релизный канал.

      Эту настройку невозможно изменить после создания кластера.

    • --version — версия Kubernetes. Укажите версию, доступную для выбранного релизного канала.

    • --cluster-ipv4-range — диапазон IP-адресов, из которого будут выделяться IP-адреса для подов.

    • --service-ipv4-range — диапазон IP-адресов, из которого будут выделяться IP-адреса для сервисов.

    • --security-group-ids — список идентификаторов групп безопасности кластера Managed Service for Kubernetes.

      Важно

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

    • --service-account-id — уникальный идентификатор сервисного аккаунта для ресурсов. От его имени будут создаваться ресурсы, необходимые кластеру Managed Service for Kubernetes.

    • --node-service-account-id — уникальный идентификатор сервисного аккаунта для узлов. От его имени узлы будут скачивать из реестра необходимые Docker-образы.

    • --master-location — конфигурация мастера. Укажите в параметре зону доступности и подсеть, где будет размещен мастер.

      Количество параметров --master-location зависит от типа мастера:

      • Для базового мастера передайте один параметр --master-location.
      • Для высокодоступного мастера, который размещается в трех зонах доступности, передайте три параметра --master-location. В каждом из них укажите разные зоны доступности и подсети.
      • Для высокодоступного мастера, который размещается в одной зоне доступности, передайте три параметра --master-location. В каждом из них укажите одинаковую зону доступности и подсеть.
    • --daily-maintenance-window — настройки окна обновлений.

    • --labels — облачные метки для кластера.

    Результат:

    done (5m47s)
    id: cathn0s6qobf********
    folder_id: b1g66jflru0e********
    ...
      service_account_id: aje3932acd0c********
      node_service_account_id: aje3932acd0c********
      release_channel: REGULAR
    
  2. Настройте Container Network Interface кластера:

    Эту настройку невозможно изменить после создания кластера.

    Важно

    Нельзя одновременно включить контроллер сетевых политик Calico и туннельный режим Cilium.

    • Чтобы включить контроллер сетевых политик Calico, передайте в команде создания кластера Managed Service for Kubernetes флаг --enable-network-policy:

      yc managed-kubernetes cluster create \
      ...
        --enable-network-policy
      
    • Чтобы включить туннельный режим Cilium, передайте в команде создания кластера Managed Service for Kubernetes флаг --cilium:

      yc managed-kubernetes cluster create \
      ...
        --cilium
      
  3. Чтобы использовать ключ шифрования Yandex Key Management Service для защиты конфиденциальной информации, передайте в команде создания кластера Managed Service for Kubernetes его имя или идентификатор:

    yc managed-kubernetes cluster create \
    ...
      --kms-key-name <имя_ключа_шифрования> \
      --kms-key-id <идентификатор_ключа_шифрования>
    

    Эту настройку невозможно изменить после создания кластера.

  4. Чтобы включить отправку логов в Yandex Cloud Logging, передайте настройки отправки в команде создания кластера Managed Service for Kubernetes в параметре --master-logging:

    yc managed-kubernetes cluster create \
    ...
      --master-logging enabled=<отправка_логов>,`
        `log-group-id=<идентификатор_лог-группы>,`
        `folder-id=<идентификатор_каталога>,`
        `kube-apiserver-enabled=<отправка_логов_kube-apiserver>,`
        `cluster-autoscaler-enabled=<отправка_логов_cluster-autoscaler>,`
        `events-enabled=<отправка_событий_Kubernetes>`
        `audit-enabled=<отправка_событий_аудита>
    

    Где:

    • enabled — флаг отправки логов: true или false.
    • log-group-id — идентификатор лог-группы, в которую нужно отправлять логи.
    • folder-id — идентификатор каталога, в который нужно отправлять логи. Логи будут отправляться в лог-группу каталога по умолчанию.
    • kube-apiserver-enabled — флаг отправки логов kube-apiserver: true или false.
    • cluster-autoscaler-enabled — флаг отправки логов cluster-autoscaler: true или false.
    • events-enabled — флаг отправки событий Kubernetes: true или false.
    • audit-enabled — флаг отправки событий аудита: true или false.

    Если отправка логов включена, но не указаны ни log-group-id, ни folder-id, логи будут отправляться в каталог, где находится кластер Managed Service for Kubernetes, в лог-группу по умолчанию. Указывать одновременно log-group-id и folder-id нельзя.

Terraform позволяет быстро создать облачную инфраструктуру в Yandex Cloud и управлять ею с помощью файлов конфигураций. В файлах конфигураций хранится описание инфраструктуры на языке HCL (HashiCorp Configuration Language). При изменении файлов конфигураций Terraform автоматически определяет, какая часть вашей конфигурации уже развернута, что следует добавить или удалить.

Terraform распространяется под лицензией Business Source License, а провайдер Yandex Cloud для Terraform — под лицензией MPL-2.0.

Подробную информацию о ресурсах провайдера смотрите в документации на сайте Terraform или в зеркале.

Если у вас еще нет Terraform, установите его и настройте провайдер Yandex Cloud.

Чтобы создать кластер Managed Service for Kubernetes:

  1. Опишите в конфигурационном файле параметры ресурсов, которые необходимо создать:

    • Кластер Managed Service for Kubernetes — описание кластера.

    • Сеть — описание облачной сети, в которой будет расположен кластер Managed Service for Kubernetes. Если подходящая сеть у вас уже есть, описывать ее повторно не нужно.

      Примечание

      При выборе облачной сети из другого каталога назначьте сервисному аккаунту для ресурсов следующие роли в этом каталоге:

      • vpc.privateAdmin
      • vpc.user
      • vpc.bridgeAdmin

      Для использования публичного IP-адреса дополнительно назначьте роль vpc.publicAdmin.

    • Подсети — описание подсетей, к которым будут подключены хосты кластера Managed Service for Kubernetes. Если подходящие подсети у вас уже есть, описывать их повторно не нужно.

    • Сервисный аккаунт для кластера Managed Service for Kubernetes и узлов и настройки роли для этого аккаунта. При необходимости создайте отдельные сервисные аккаунты для кластера Managed Service for Kubernetes и узлов. Если у вас уже есть подходящий сервисный аккаунт, описывать его повторно не нужно.

    Пример структуры конфигурационного файла:

    resource "yandex_kubernetes_cluster" "<имя_кластера_Managed_Service_for_Kubernetes>" {
     network_id = yandex_vpc_network.<имя_сети>.id
     master {
       master_location {
         zone      = yandex_vpc_subnet.<имя_подсети>.zone
         subnet_id = yandex_vpc_subnet.<имя_подсети>.id
       }
     }
     service_account_id      = yandex_iam_service_account.<имя_сервисного_аккаунта>.id
     node_service_account_id = yandex_iam_service_account.<имя_сервисного_аккаунта>.id
       depends_on = [
         yandex_resourcemanager_folder_iam_member.k8s-clusters-agent,
         yandex_resourcemanager_folder_iam_member.vpc-public-admin,
         yandex_resourcemanager_folder_iam_member.images-puller
       ]
    }
     labels {
       "<имя_облачной_метки>"="<значение_облачной_метки>"
     }
    resource "yandex_vpc_network" "<имя_сети>" { name = "<имя_сети>" }
    
    resource "yandex_vpc_subnet" "<имя_подсети>" {
     v4_cidr_blocks = ["<диапазон_адресов_подсети>"]
     zone           = "<зона_доступности>"
     network_id     = yandex_vpc_network.<имя_сети>.id
    }
    
    resource "yandex_iam_service_account" "<имя_сервисного_аккаунта>" {
     name        = "<имя_сервисного_аккаунта>"
     description = "<описание_сервисного_аккаунта>"
    }
    
    resource "yandex_resourcemanager_folder_iam_member" "k8s-clusters-agent" {
     # Сервисному аккаунту назначается роль "k8s.clusters.agent".
     folder_id = "<идентификатор_каталога>"
     role      = "k8s.clusters.agent"
     member    = "serviceAccount:${yandex_iam_service_account.<имя_сервисного_аккаунта>.id}"
    }
    
    resource "yandex_resourcemanager_folder_iam_member" "vpc-public-admin" {
     # Сервисному аккаунту назначается роль "vpc.publicAdmin".
     folder_id = "<идентификатор_каталога>"
     role      = "vpc.publicAdmin"
     member    = "serviceAccount:${yandex_iam_service_account.<имя_сервисного_аккаунта>.id}"
    }
    
    resource "yandex_resourcemanager_folder_iam_member" "images-puller" {
     # Сервисному аккаунту назначается роль "container-registry.images.puller".
     folder_id = "<идентификатор_каталога>"
     role      = "container-registry.images.puller"
     member    = "serviceAccount:${yandex_iam_service_account.<имя_сервисного_аккаунта>.id}"
    }
    

    Примечание

    Облачные метки для кластера Kubernetes составляются по определенным правилам.

    Чтобы включить туннельный режим Cilium, добавьте к описанию кластера Managed Service for Kubernetes блок:

    network_implementation {
     cilium {}
    }
    

    Чтобы включить контроллер сетевых политик Calico, добавьте к описанию кластера Managed Service for Kubernetes строку:

    network_policy_provider = "CALICO"
    

    Важно

    Контроллер сетевых политик Calico и туннельный режим Cilium нельзя включить одновременно. Их также нельзя включить после создания кластера.

    Чтобы включить отправку логов в Yandex Cloud Logging, добавьте к описанию кластера Managed Service for Kubernetes блок master_logging:

    resource "yandex_kubernetes_cluster" "<имя_кластера>" {
     ...
     master {
       ...
       master_logging {
         enabled                    = <отправка_логов>
         log_group_id               = "<идентификатор_лог-группы>"
         folder_id                  = "<идентификатор_каталога>"
         kube_apiserver_enabled     = <отправка_логов_kube-apiserver>
         cluster_autoscaler_enabled = <отправка_логов_cluster-autoscaler>
         events_enabled             = <отправка_событий_Kubernetes>
         audit_enabled              = <отправка_событий_аудита>
       }
     }
    }
    

    Где:

    • enabled — флаг отправки логов: true или false.
    • log_group_id — идентификатор лог-группы, в которую нужно отправлять логи.
    • folder_id — идентификатор каталога, в который нужно отправлять логи. Логи будут отправляться в лог-группу каталога по умолчанию.
    • kube_apiserver_enabled — флаг отправки логов kube-apiserver: true или false.
    • cluster_autoscaler_enabled — флаг отправки логов cluster-autoscaler: true или false.
    • events_enabled — флаг отправки событий Kubernetes: true или false.
    • audit_enabled — флаг отправки событий аудита: true или false.

    Если отправка логов включена, но не указаны ни log_group_id, ни folder_id, логи будут отправляться в каталог, где находится кластер Managed Service for Kubernetes, в лог-группу по умолчанию. Указывать одновременно log_group_id и folder_id нельзя.

    Подробнее см. в документации провайдера Terraform.

  2. Проверьте корректность конфигурационных файлов.

    1. В командной строке перейдите в каталог, в котором создан конфигурационный файл.

    2. Выполните проверку с помощью команды:

      terraform plan
      

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

  3. Создайте кластер Managed Service for Kubernetes.

    1. Если в конфигурации нет ошибок, выполните команду:

      terraform apply
      
    2. Подтвердите создание ресурсов.

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

Чтобы создать кластер Managed Service for Kubernetes, воспользуйтесь методом create для ресурса Cluster.

Тело запроса зависит от типа мастера:

  • Для базового мастера передайте в запросе один параметр masterSpec.locations.
  • Для высокодоступного мастера, который размещается в трех зонах доступности, передайте в запросе три параметра masterSpec.locations. В каждом из них укажите разные зоны доступности и подсети.
  • Для высокодоступного мастера, который размещается в одной зоне доступности, передайте в запросе три параметра masterSpec.locations. В каждом из них укажите одинаковую зону доступности и подсеть.

При передаче параметра masterSpec.locations не нужно указывать параметры masterSpec.zonalMasterSpec или masterSpec.regionalMasterSpec.

Примечание

При выборе облачной сети из другого каталога назначьте сервисному аккаунту для ресурсов следующие роли в этом каталоге:

  • vpc.privateAdmin
  • vpc.user
  • vpc.bridgeAdmin

Для использования публичного IP-адреса дополнительно назначьте роль vpc.publicAdmin.

Чтобы использовать для защиты секретов ключ шифрования Yandex Key Management Service, передайте его идентификатор в параметре kmsProvider.keyId.

Чтобы включить отправку логов в Yandex Cloud Logging, передайте настройки отправки в параметре masterSpec.masterLogging.

Чтобы добавить облачную метку, передайте ее имя и значение в параметре labels.

ПримерыПримеры

Создание кластера Managed Service for Kubernetes с базовым мастеромСоздание кластера Managed Service for Kubernetes с базовым мастером

CLI
Terraform

Создайте кластер Managed Service for Kubernetes с тестовыми характеристиками:

  • Название — k8s-single.
  • Сеть — mynet.
  • Зона доступности — kz1-a.
  • Подсеть — mysubnet.
  • Сервисный аккаунт — myaccount.
  • Идентификатор группы безопасности — enp6saqnq4ie********.

Чтобы создать кластер Managed Service for Kubernetes с базовым мастером, выполните команду:

yc managed-kubernetes cluster create \
   --name k8s-single \
   --network-name mynet \
   --master-location zone=kz1-a,subnet-name=mysubnet \
   --service-account-name myaccount \
   --node-service-account-name myaccount \
   --security-group-ids enp6saqnq4ie********

Создайте кластер Managed Service for Kubernetes и сеть для него с тестовыми характеристиками:

  • Название — k8s-single.

  • Идентификатор каталога — b1gia87mbaom********.

  • Сеть — mynet.

  • Подсеть — mysubnet. Ее сетевые настройки:

    • Зона доступности — kz1-a.
    • Диапазон — 10.1.0.0/16.
  • Сервисный аккаунт — myaccount.

  • Роли сервисного аккаунта — k8s.clusters.agent, vpc.publicAdmin, container-registry.images.puller и kms.keys.encrypterDecrypter.

  • Ключ шифрования Yandex Key Management Service — kms-key.

  • Группа безопасности — k8s-public-services. Она содержит правила для подключения к сервисам из интернета.

Установите Terraform (если он еще не установлен) и настройте провайдер по инструкции, а затем примените конфигурационный файл:

locals {
  folder_id   = "b1gia87mbaom********"
}

resource "yandex_kubernetes_cluster" "k8s-single" {
  name = "k8s-single"
  network_id = yandex_vpc_network.mynet.id
  master {
    master_location {
      zone      = yandex_vpc_subnet.mysubnet.zone
      subnet_id = yandex_vpc_subnet.mysubnet.id
    }
    security_group_ids = [yandex_vpc_security_group.k8s-public-services.id]
  }
  service_account_id      = yandex_iam_service_account.myaccount.id
  node_service_account_id = yandex_iam_service_account.myaccount.id
  depends_on = [
    yandex_resourcemanager_folder_iam_member.k8s-clusters-agent,
    yandex_resourcemanager_folder_iam_member.vpc-public-admin,
    yandex_resourcemanager_folder_iam_member.images-puller,
    yandex_resourcemanager_folder_iam_member.encrypterDecrypter
  ]
  kms_provider {
    key_id = yandex_kms_symmetric_key.kms-key.id
  }
}

resource "yandex_vpc_network" "mynet" {
  name = "mynet"
}

resource "yandex_vpc_subnet" "mysubnet" {
  name = "mysubnet"
  v4_cidr_blocks = ["10.1.0.0/16"]
  zone           = "kz1-a"
  network_id     = yandex_vpc_network.mynet.id
}

resource "yandex_iam_service_account" "myaccount" {
  name        = "myaccount"
  description = "Service account for the single Kubernetes cluster"
}

resource "yandex_resourcemanager_folder_iam_member" "k8s-clusters-agent" {
  # Сервисному аккаунту назначается роль "k8s.clusters.agent".
  folder_id = local.folder_id
  role      = "k8s.clusters.agent"
  member    = "serviceAccount:${yandex_iam_service_account.myaccount.id}"
}

resource "yandex_resourcemanager_folder_iam_member" "vpc-public-admin" {
  # Сервисному аккаунту назначается роль "vpc.publicAdmin".
  folder_id = local.folder_id
  role      = "vpc.publicAdmin"
  member    = "serviceAccount:${yandex_iam_service_account.myaccount.id}"
}

resource "yandex_resourcemanager_folder_iam_member" "images-puller" {
  # Сервисному аккаунту назначается роль "container-registry.images.puller".
  folder_id = local.folder_id
  role      = "container-registry.images.puller"
  member    = "serviceAccount:${yandex_iam_service_account.myaccount.id}"
}

resource "yandex_resourcemanager_folder_iam_member" "encrypterDecrypter" {
  # Сервисному аккаунту назначается роль "kms.keys.encrypterDecrypter".
  folder_id = local.folder_id
  role      = "kms.keys.encrypterDecrypter"
  member    = "serviceAccount:${yandex_iam_service_account.myaccount.id}"
}

resource "yandex_kms_symmetric_key" "kms-key" {
  # Ключ Yandex Key Management Service для шифрования важной информации, такой как пароли, OAuth-токены и SSH-ключи.
  name              = "kms-key"
  default_algorithm = "AES_128"
  rotation_period   = "8760h" # 1 год.
}

resource "yandex_vpc_security_group" "k8s-public-services" {
  name        = "k8s-public-services"
  description = "Правила группы разрешают подключение к сервисам из интернета. Примените правила только для групп узлов."
  network_id  = yandex_vpc_network.mynet.id
  ingress {
    protocol          = "TCP"
    description       = "Правило разрешает проверки доступности с диапазона адресов балансировщика нагрузки. Нужно для работы отказоустойчивого кластера Managed Service for Kubernetes и сервисов балансировщика."
    predefined_target = "loadbalancer_healthchecks"
    from_port         = 0
    to_port           = 65535
  }
  ingress {
    protocol          = "ANY"
    description       = "Правило разрешает взаимодействие мастер-узел и узел-узел внутри группы безопасности."
    predefined_target = "self_security_group"
    from_port         = 0
    to_port           = 65535
  }
  ingress {
    protocol          = "ANY"
    description       = "Правило разрешает взаимодействие под-под и сервис-сервис. Укажите подсети вашего кластера Managed Service for Kubernetes и сервисов."
    v4_cidr_blocks    = concat(yandex_vpc_subnet.mysubnet.v4_cidr_blocks)
    from_port         = 0
    to_port           = 65535
  }
  ingress {
    protocol          = "ICMP"
    description       = "Правило разрешает отладочные ICMP-пакеты из внутренних подсетей."
    v4_cidr_blocks    = ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
  }
  ingress {
    protocol          = "TCP"
    description       = "Правило разрешает входящий трафик из интернета на диапазон портов NodePort. Добавьте или измените порты на нужные вам."
    v4_cidr_blocks    = ["0.0.0.0/0"]
    from_port         = 30000
    to_port           = 32767
  }
  egress {
    protocol          = "ANY"
    description       = "Правило разрешает весь исходящий трафик. Узлы могут связаться с Yandex Container Registry, Yandex Object Storage, Docker Hub и т. д."
    v4_cidr_blocks    = ["0.0.0.0/0"]
    from_port         = 0
    to_port           = 65535
  }
}

Создание кластера Managed Service for Kubernetes с высокодоступным мастером в трех зонах доступностиСоздание кластера Managed Service for Kubernetes с высокодоступным мастером в трех зонах доступности

CLI
Terraform

Создайте кластер Managed Service for Kubernetes с тестовыми характеристиками:

  • Название — k8s-ha-three-zones.
  • Сеть — my-ha-net.
  • Подсеть для зоны доступности kz1-a — mysubnet-a.
  • Подсеть для зоны доступности kz1-b — mysubnet-b.
  • Подсеть для зоны доступности kz1-d — mysubnet-d.
  • Сервисный аккаунт — ha-k8s-account.
  • Идентификатор группы безопасности — enp6saqnq4ie********.

Чтобы создать кластер Managed Service for Kubernetes с высокодоступным мастером в трех зонах доступности, выполните команду:

yc managed-kubernetes cluster create \
   --name k8s-ha-three-zones \
   --network-name my-ha-net \
   --master-location zone=kz1-a,subnet-name=mysubnet-a \
   --master-location zone=kz1-b,subnet-name=mysubnet-b \
   --master-location zone=kz1-d,subnet-name=mysubnet-d \
   --service-account-name ha-k8s-account \
   --node-service-account-name ha-k8s-account \
   --security-group-ids enp6saqnq4ie********

Создайте кластер Managed Service for Kubernetes и сеть для него с тестовыми характеристиками:

  • Название — k8s-ha-three-zones.

  • Идентификатор каталога — b1gia87mbaom********.

  • Сеть — my-ha-net.

  • Подсеть — mysubnet-a. Ее сетевые настройки:

    • Зона доступности — kz1-a.
    • Диапазон — 10.5.0.0/16.
  • Подсеть — mysubnet-b. Ее сетевые настройки:

    • Зона доступности — kz1-b.
    • Диапазон — 10.6.0.0/16.
  • Подсеть — mysubnet-d. Ее сетевые настройки:

    • Зона доступности — kz1-d.
    • Диапазон — 10.7.0.0/16.
  • Сервисный аккаунт — ha-k8s-account.

  • Роли сервисного аккаунта — k8s.clusters.agent, vpc.publicAdmin, container-registry.images.puller и kms.keys.encrypterDecrypter.

  • Ключ шифрования Yandex Key Management Service — kms-key.

  • Группа безопасности — regional-k8s-sg. Она содержит правила для служебного трафика.

Установите Terraform (если он еще не установлен) и настройте провайдер по инструкции, а затем примените конфигурационный файл:

locals {
  folder_id   = "b1gia87mbaom********"
}

resource "yandex_kubernetes_cluster" "k8s-ha-three-zones" {
  name = "k8s-ha-three-zones"
  network_id = yandex_vpc_network.my-ha-net.id
  master {
    master_location {
      zone      = yandex_vpc_subnet.mysubnet-a.zone
      subnet_id = yandex_vpc_subnet.mysubnet-a.id
    }
    master_location {
      zone      = yandex_vpc_subnet.mysubnet-b.zone
      subnet_id = yandex_vpc_subnet.mysubnet-b.id
    }
    master_location {
      zone      = yandex_vpc_subnet.mysubnet-d.zone
      subnet_id = yandex_vpc_subnet.mysubnet-d.id
    }
    security_group_ids = [yandex_vpc_security_group.ha-k8s-sg.id]
  }
  service_account_id      = yandex_iam_service_account.ha-k8s-account.id
  node_service_account_id = yandex_iam_service_account.ha-k8s-account.id
  depends_on = [
    yandex_resourcemanager_folder_iam_member.k8s-clusters-agent,
    yandex_resourcemanager_folder_iam_member.vpc-public-admin,
    yandex_resourcemanager_folder_iam_member.images-puller,
    yandex_resourcemanager_folder_iam_member.encrypterDecrypter
  ]
  kms_provider {
    key_id = yandex_kms_symmetric_key.kms-key.id
  }
}

resource "yandex_vpc_network" "my-ha-net" {
  name = "my-ha-net"
}

resource "yandex_vpc_subnet" "mysubnet-a" {
  name = "mysubnet-a"
  v4_cidr_blocks = ["10.5.0.0/16"]
  zone           = "kz1-a"
  network_id     = yandex_vpc_network.my-ha-net.id
}

resource "yandex_vpc_subnet" "mysubnet-b" {
  name = "mysubnet-b"
  v4_cidr_blocks = ["10.6.0.0/16"]
  zone           = "kz1-b"
  network_id     = yandex_vpc_network.my-ha-net.id
}

resource "yandex_vpc_subnet" "mysubnet-d" {
  name = "mysubnet-d"
  v4_cidr_blocks = ["10.7.0.0/16"]
  zone           = "kz1-d"
  network_id     = yandex_vpc_network.my-ha-net.id
}

resource "yandex_iam_service_account" "ha-k8s-account" {
  name        = "ha-k8s-account"
  description = "Service account for the highly available Kubernetes cluster"
}

resource "yandex_resourcemanager_folder_iam_member" "k8s-clusters-agent" {
  # Сервисному аккаунту назначается роль "k8s.clusters.agent".
  folder_id = local.folder_id
  role      = "k8s.clusters.agent"
  member    = "serviceAccount:${yandex_iam_service_account.ha-k8s-account.id}"
}

resource "yandex_resourcemanager_folder_iam_member" "vpc-public-admin" {
  # Сервисному аккаунту назначается роль "vpc.publicAdmin".
  folder_id = local.folder_id
  role      = "vpc.publicAdmin"
  member    = "serviceAccount:${yandex_iam_service_account.ha-k8s-account.id}"
}

resource "yandex_resourcemanager_folder_iam_member" "images-puller" {
  # Сервисному аккаунту назначается роль "container-registry.images.puller".
  folder_id = local.folder_id
  role      = "container-registry.images.puller"
  member    = "serviceAccount:${yandex_iam_service_account.ha-k8s-account.id}"
}

resource "yandex_resourcemanager_folder_iam_member" "encrypterDecrypter" {
  # Сервисному аккаунту назначается роль "kms.keys.encrypterDecrypter".
  folder_id = local.folder_id
  role      = "kms.keys.encrypterDecrypter"
  member    = "serviceAccount:${yandex_iam_service_account.ha-k8s-account.id}"
}

resource "yandex_kms_symmetric_key" "kms-key" {
  # Ключ Yandex Key Management Service для шифрования важной информации, такой как пароли, OAuth-токены и SSH-ключи.
  name              = "kms-key"
  default_algorithm = "AES_128"
  rotation_period   = "8760h" # 1 год.
}

resource "yandex_vpc_security_group" "ha-k8s-sg" {
  name        = "ha-k8s-sg"
  description = "Правила группы обеспечивают базовую работоспособность кластера Managed Service for Kubernetes. Примените ее к кластеру и группам узлов."
  network_id  = yandex_vpc_network.my-ha-net.id
  ingress {
    protocol          = "TCP"
    description       = "Правило разрешает проверки доступности с диапазона адресов балансировщика нагрузки. Нужно для работы отказоустойчивого кластера Managed Service for Kubernetes и сервисов балансировщика."
    predefined_target = "loadbalancer_healthchecks"
    from_port         = 0
    to_port           = 65535
  }
  ingress {
    protocol          = "ANY"
    description       = "Правило разрешает взаимодействие мастер-узел и узел-узел внутри группы безопасности."
    predefined_target = "self_security_group"
    from_port         = 0
    to_port           = 65535
  }
  ingress {
    protocol          = "ANY"
    description       = "Правило разрешает взаимодействие под-под и сервис-сервис. Укажите подсети вашего кластера Managed Service for Kubernetes и сервисов."
    v4_cidr_blocks    = concat(yandex_vpc_subnet.mysubnet-a.v4_cidr_blocks, yandex_vpc_subnet.mysubnet-b.v4_cidr_blocks, yandex_vpc_subnet.mysubnet-d.v4_cidr_blocks)
    from_port         = 0
    to_port           = 65535
  }
  ingress {
    protocol          = "ICMP"
    description       = "Правило разрешает отладочные ICMP-пакеты из внутренних подсетей."
    v4_cidr_blocks    = ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
  }
  ingress {
    protocol          = "TCP"
    description       = "Правило разрешает входящий трафик из интернета на диапазон портов NodePort. Добавьте или измените порты на нужные вам."
    v4_cidr_blocks    = ["0.0.0.0/0"]
    from_port         = 30000
    to_port           = 32767
  }
  egress {
    protocol          = "ANY"
    description       = "Правило разрешает весь исходящий трафик. Узлы могут связаться с Yandex Container Registry, Yandex Object Storage, Docker Hub и т. д."
    v4_cidr_blocks    = ["0.0.0.0/0"]
    from_port         = 0
    to_port           = 65535
  }
}

Создание кластера Managed Service for Kubernetes с высокодоступным мастером в одной зоне доступностиСоздание кластера Managed Service for Kubernetes с высокодоступным мастером в одной зоне доступности

CLI
Terraform

Создайте кластер Managed Service for Kubernetes с тестовыми характеристиками:

  • Название — k8s-ha-one-zone.
  • Сеть — my-ha-net.
  • Подсеть для зоны доступности kz1-a — my-ha-subnet.
  • Количество одинаковых параметров --master-location — три. Так создается три экземпляра мастера в одной зоне доступности.
  • Зона доступности — kz1-a.
  • Сервисный аккаунт — ha-k8s-account.
  • Идентификатор группы безопасности — enp6saqnq4ie********.

Чтобы создать кластер Managed Service for Kubernetes с высокодоступным мастером в одной зоне доступности, выполните команду:

yc managed-kubernetes cluster create \
   --name k8s-ha-one-zone \
   --network-name my-ha-net \
   --master-location zone=kz1-a,subnet-name=my-ha-subnet \
   --master-location zone=kz1-a,subnet-name=my-ha-subnet \
   --master-location zone=kz1-a,subnet-name=my-ha-subnet \
   --service-account-name ha-k8s-account \
   --node-service-account-name ha-k8s-account \
   --security-group-ids enp6saqnq4ie********

Создайте кластер Managed Service for Kubernetes и сеть для него с тестовыми характеристиками:

  • Название — k8s-ha-one-zone.

  • Идентификатор каталога — b1gia87mbaom********.

  • Сеть — my-ha-net.

  • Подсеть — my-ha-subnet. Ее сетевые настройки:

    • Зона доступности — kz1-a.
    • Диапазон — 10.5.0.0/16.
  • Сервисный аккаунт — ha-k8s-account.

  • Роли сервисного аккаунта — k8s.clusters.agent, vpc.publicAdmin, container-registry.images.puller и kms.keys.encrypterDecrypter.

  • Ключ шифрования Yandex Key Management Service — kms-key.

  • Группа безопасности — ha-k8s-sg. Она содержит правила для служебного трафика.

Установите Terraform (если он еще не установлен) и настройте провайдер по инструкции, а затем примените конфигурационный файл:

locals {
  folder_id   = "b1gia87mbaom********"
}

resource "yandex_kubernetes_cluster" "k8s-ha-one-zone" {
  name = "k8s-ha-one-zone"
  network_id = yandex_vpc_network.my-ha-net.id
  master {
    master_location {
      zone      = yandex_vpc_subnet.my-ha-subnet.zone
      subnet_id = yandex_vpc_subnet.my-ha-subnet.id
    }
    master_location {
      zone      = yandex_vpc_subnet.my-ha-subnet.zone
      subnet_id = yandex_vpc_subnet.my-ha-subnet.id
    }
    master_location {
      zone      = yandex_vpc_subnet.my-ha-subnet.zone
      subnet_id = yandex_vpc_subnet.my-ha-subnet.id
    }
    security_group_ids = [yandex_vpc_security_group.ha-k8s-sg.id]
  }
  service_account_id      = yandex_iam_service_account.ha-k8s-account.id
  node_service_account_id = yandex_iam_service_account.ha-k8s-account.id
  depends_on = [
    yandex_resourcemanager_folder_iam_member.k8s-clusters-agent,
    yandex_resourcemanager_folder_iam_member.vpc-public-admin,
    yandex_resourcemanager_folder_iam_member.images-puller,
    yandex_resourcemanager_folder_iam_member.encrypterDecrypter
  ]
  kms_provider {
    key_id = yandex_kms_symmetric_key.kms-key.id
  }
}

resource "yandex_vpc_network" "my-ha-net" {
  name = "my-ha-net"
}

resource "yandex_vpc_subnet" "my-ha-subnet" {
  name = "my-ha-subnet"
  v4_cidr_blocks = ["10.5.0.0/16"]
  zone           = "kz1-a"
  network_id     = yandex_vpc_network.my-ha-net.id
}

resource "yandex_iam_service_account" "ha-k8s-account" {
  name        = "ha-k8s-account"
  description = "Service account for the highly available Kubernetes cluster"
}

resource "yandex_resourcemanager_folder_iam_member" "k8s-clusters-agent" {
  # Сервисному аккаунту назначается роль "k8s.clusters.agent".
  folder_id = local.folder_id
  role      = "k8s.clusters.agent"
  member    = "serviceAccount:${yandex_iam_service_account.ha-k8s-account.id}"
}

resource "yandex_resourcemanager_folder_iam_member" "vpc-public-admin" {
  # Сервисному аккаунту назначается роль "vpc.publicAdmin".
  folder_id = local.folder_id
  role      = "vpc.publicAdmin"
  member    = "serviceAccount:${yandex_iam_service_account.ha-k8s-account.id}"
}

resource "yandex_resourcemanager_folder_iam_member" "images-puller" {
  # Сервисному аккаунту назначается роль "container-registry.images.puller".
  folder_id = local.folder_id
  role      = "container-registry.images.puller"
  member    = "serviceAccount:${yandex_iam_service_account.ha-k8s-account.id}"
}

resource "yandex_resourcemanager_folder_iam_member" "encrypterDecrypter" {
  # Сервисному аккаунту назначается роль "kms.keys.encrypterDecrypter".
  folder_id = local.folder_id
  role      = "kms.keys.encrypterDecrypter"
  member    = "serviceAccount:${yandex_iam_service_account.ha-k8s-account.id}"
}

resource "yandex_kms_symmetric_key" "kms-key" {
  # Ключ Yandex Key Management Service для шифрования важной информации, такой как пароли, OAuth-токены и SSH-ключи.
  name              = "kms-key"
  default_algorithm = "AES_128"
  rotation_period   = "8760h" # 1 год.
}

resource "yandex_vpc_security_group" "ha-k8s-sg" {
  name        = "ha-k8s-sg"
  description = "Правила группы обеспечивают базовую работоспособность кластера Managed Service for Kubernetes. Примените ее к кластеру и группам узлов."
  network_id  = yandex_vpc_network.my-ha-net.id
  ingress {
    protocol          = "TCP"
    description       = "Правило разрешает проверки доступности с диапазона адресов балансировщика нагрузки. Нужно для работы отказоустойчивого кластера Managed Service for Kubernetes и сервисов балансировщика."
    predefined_target = "loadbalancer_healthchecks"
    from_port         = 0
    to_port           = 65535
  }
  ingress {
    protocol          = "ANY"
    description       = "Правило разрешает взаимодействие мастер-узел и узел-узел внутри группы безопасности."
    predefined_target = "self_security_group"
    from_port         = 0
    to_port           = 65535
  }
  ingress {
    protocol          = "ANY"
    description       = "Правило разрешает взаимодействие под-под и сервис-сервис. Укажите подсети вашего кластера Managed Service for Kubernetes и сервисов."
    v4_cidr_blocks    = concat(yandex_vpc_subnet.my-ha-subnet.v4_cidr_blocks, yandex_vpc_subnet.my-ha-subnet.v4_cidr_blocks, yandex_vpc_subnet.my-ha-subnet.v4_cidr_blocks)
    from_port         = 0
    to_port           = 65535
  }
  ingress {
    protocol          = "ICMP"
    description       = "Правило разрешает отладочные ICMP-пакеты из внутренних подсетей."
    v4_cidr_blocks    = ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16"]
  }
  ingress {
    protocol          = "TCP"
    description       = "Правило разрешает входящий трафик из интернета на диапазон портов NodePort. Добавьте или измените порты на нужные вам."
    v4_cidr_blocks    = ["0.0.0.0/0"]
    from_port         = 30000
    to_port           = 32767
  }
  egress {
    protocol          = "ANY"
    description       = "Правило разрешает весь исходящий трафик. Узлы могут связаться с Yandex Container Registry, Yandex Object Storage, Docker Hub и т. д."
    v4_cidr_blocks    = ["0.0.0.0/0"]
    from_port         = 0
    to_port           = 65535
  }
}

См. такжеСм. также

Обзор способов подключения к кластеру

Была ли статья полезна?

Предыдущая
Посмотреть операции с кластером Kubernetes
Следующая
Изменение кластера Kubernetes
Проект Яндекса
© 2025 ТОО «Облачные Сервисы Казахстан»