Yandex Cloud
Поиск
Связаться с намиПодключиться
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
    • Популярные
    • Инфраструктура и сеть
    • Платформа данных
    • Контейнеры
    • Инструменты разработчика
    • Бессерверные вычисления
    • Безопасность
    • Мониторинг и управление ресурсами
    • Машинное обучение
    • Бизнес-инструменты
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Облако для интеграторов
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Контент-программа
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Истории успеха
    • Тарифы Yandex Cloud
    • Промоакции и free tier
    • Правила тарификации
  • Документация
  • Блог
Проект Яндекса
© 2025 ООО «Яндекс.Облако»
Практические руководства
    • Все руководства
    • Настройка подключения к Managed Service for PostgreSQL из контейнера Serverless Containers
    • Создать ВМ с Container Optimized Image
    • Создать ВМ с Container Optimized Image и дополнительным томом для Docker-контейнера
    • Создать группу ВМ с Container Optimized Image и несколькими Docker-контейнерами
    • Создать группу ВМ с Container Optimized Image
    • Создать ВМ с Container Optimized Image и несколькими Docker-контейнерами
    • Изменить ВМ с Container Optimized Image
    • Настройка вывода информации из Docker-контейнера в серийный порт
      • Создание нового Kubernetes-проекта
      • Создание кластера Kubernetes без доступа в интернет
      • Запуск рабочих нагрузок с GPU
      • Использование групп узлов c GPU без предустановленных драйверов
      • Установка Time-Slicing GPUs
      • Миграция ресурсов в другую зону доступности
      • Шифрование секретов

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

  • Необходимые платные ресурсы
  • Перед началом работы
  • Создайте сеть и подсеть
  • Зарегистрируйте доменную зону и добавьте сертификат
  • Создайте сервисные аккаунты
  • Сервисный аккаунт для ресурсов
  • Сервисный аккаунт для узлов
  • Сервисный аккаунт, необходимый для работы Application Load Balancer Ingress-контроллера
  • Создайте группы безопасности
  • Подготовьте ресурсы Kubernetes
  • Создайте кластер Managed Service for Kubernetes
  • Создайте группу узлов Managed Service for Kubernetes
  • Подключитесь к кластеру Managed Service for Kubernetes
  • Подготовьте ресурсы Container Registry
  • Создайте реестр
  • Сконфигурируйте Docker Credential helper
  • Подготовьте Docker-образ
  • Запустите тестовое приложение
  • Установите Application Load Balancer
  • Создайте балансировщик нагрузки
  • Удалите созданные ресурсы
  1. Контейнерная инфраструктура
  2. Managed Service for Kubernetes
  3. Создание нового Kubernetes-проекта

Создание нового Kubernetes-проекта в Yandex Managed Service for Kubernetes

Статья создана
Yandex Cloud
Улучшена
mmerihsesh
Обновлена 21 апреля 2025 г.
  • Необходимые платные ресурсы
  • Перед началом работы
    • Создайте сеть и подсеть
    • Зарегистрируйте доменную зону и добавьте сертификат
  • Создайте сервисные аккаунты
    • Сервисный аккаунт для ресурсов
    • Сервисный аккаунт для узлов
    • Сервисный аккаунт, необходимый для работы Application Load Balancer Ingress-контроллера
  • Создайте группы безопасности
  • Подготовьте ресурсы Kubernetes
    • Создайте кластер Managed Service for Kubernetes
    • Создайте группу узлов Managed Service for Kubernetes
  • Подключитесь к кластеру Managed Service for Kubernetes
  • Подготовьте ресурсы Container Registry
    • Создайте реестр
    • Сконфигурируйте Docker Credential helper
    • Подготовьте Docker-образ
    • Запустите тестовое приложение
  • Установите Application Load Balancer
  • Создайте балансировщик нагрузки
  • Удалите созданные ресурсы

В этой статье описан запуск нового Kubernetes-проекта в Yandex Cloud. Приложение из Yandex Container Registry будет развернуто в кластере Managed Service for Kubernetes и опубликовано в интернете через Ingress-контроллер Yandex Application Load Balancer.

Если вам нужно создать кластер Managed Service for Kubernetes без доступа в интернет, обратитесь к разделу Создание и настройка кластера Managed Service for Kubernetes без доступа в интернет.

Чтобы запустить приложение:

  1. Создайте сервисные аккаунты.
  2. Создайте группы безопасности.
  3. Подготовьте ресурсы Kubernetes.
  4. Подключитесь к кластеру Managed Service for Kubernetes.
  5. Подготовьте ресурсы Container Registry.
  6. Установите Application Load Balancer.
  7. Создайте балансировщик нагрузки.

Если созданные ресурсы вам больше не нужны, удалите их.

Необходимые платные ресурсыНеобходимые платные ресурсы

В стоимость поддержки описываемого решения входят:

  • Плата за DNS-зону и DNS-запросы (см. тарифы Cloud DNS).
  • Плата за кластер Managed Service for Kubernetes: использование мастера и исходящий трафик (см. тарифы Managed Service for Kubernetes).
  • Плата за узлы кластера (ВМ): использование вычислительных ресурсов, операционной системы и хранилища (см. тарифы Compute Cloud).
  • Плата за сервис Container Registry: использование хранилища и исходящий трафик (см. тарифы Container Registry).
  • Плата за использование вычислительных ресурсов L7-балансировщика (см. тарифы Application Load Balancer).
  • Плата за публичный IP-адрес для L7-балансировщика (см. тарифы Virtual Private Cloud).

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

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

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

  2. Установите утилиту потоковой обработки JSON-файлов jq:

    sudo apt update && sudo apt install jq
    

Создайте сеть и подсетьСоздайте сеть и подсеть

  1. Создайте сеть с именем yc-auto-network:

    yc vpc network create --name yc-auto-network
    
  2. Создайте подсеть в зоне доступности ru-central1-a:

    yc vpc subnet create \
      --name yc-auto-subnet-0 \
      --network-name yc-auto-network \
      --range 192.168.1.0/24 \
      --zone ru-central1-a
    

Зарегистрируйте доменную зону и добавьте сертификатЗарегистрируйте доменную зону и добавьте сертификат

  1. Зарегистрируйте публичную доменную зону и делегируйте домен.

  2. Если у вас уже есть сертификат для доменной зоны, добавьте сведения о нем в сервис Yandex Certificate Manager.

    Если у вас нет сертификата, выпустите новый сертификат от Let's Encrypt® и добавьте его в Certificate Manager.

  3. Получите идентификатор сертификата:

    yc certificate-manager certificate list
    

    Результат:

    +-----------------+-------+----------------+---------------------+----------+--------+
    |       ID        | NAME  |    DOMAINS     |      NOT AFTER      |   TYPE   | STATUS |
    +-----------------+-------+----------------+---------------------+----------+--------+
    | <идентификатор> | <имя> | <доменное_имя> | 2022-04-06 17:19:37 | IMPORTED | ISSUED |
    +-----------------+-------+----------------+---------------------+----------+--------+
    

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

Для работы кластера Managed Service for Kubernetes и балансировщика нагрузки нужны сервисные аккаунты:

  • Сервисный аккаунт с ролями k8s.clusters.agent и vpc.publicAdmin на каталог, в котором создается кластер Managed Service for Kubernetes. От имени этого сервисного аккаунта будут создаваться ресурсы, необходимые кластеру Managed Service for Kubernetes.
  • Сервисный аккаунт с ролью container-registry.images.puller на каталог с реестром Docker-образов. От имени этого сервисного аккаунта узлы будут скачивать из реестра необходимые Docker-образы.
  • Для работы Ingress-контроллера Application Load Balancer, с ролями:
    • alb.editor — для создания необходимых ресурсов.
    • vpc.publicAdmin — для управления внешней связностью.
    • certificate-manager.certificates.downloader — для работы с сертификатами, зарегистрированными в сервисе Certificate Manager.
    • compute.viewer — для использования узлов кластера Managed Service for Kubernetes в целевых группах балансировщика нагрузки.

Сервисный аккаунт для ресурсовСервисный аккаунт для ресурсов

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

  1. Запишите в переменную идентификатор каталога из конфигурации вашего профиля Yandex Cloud CLI:

    Bash
    PowerShell
    FOLDER_ID=$(yc config get folder-id)
    
    $FOLDER_ID = yc config get folder-id
    
  2. Создайте сервисный аккаунт:

    Bash
    PowerShell
    yc iam service-account create --name k8s-res-sa-$FOLDER_ID
    
    yc iam service-account create --name k8s-res-sa-$FOLDER_ID
    
  3. Запишите в переменную идентификатор сервисного аккаунта:

    Bash
    PowerShell
    RES_SA_ID=$(yc iam service-account get --name k8s-res-sa-$FOLDER_ID --format json | jq .id -r)
    
    $RES_SA_ID = (yc iam service-account get --name k8s-res-sa-$FOLDER_ID --format json | ConvertFrom-Json).id
    
  4. Назначьте сервисному аккаунту роль editor на каталог:

    yc resource-manager folder add-access-binding \
      --id $FOLDER_ID \
      --role editor \
      --subject serviceAccount:$RES_SA_ID
    

Сервисный аккаунт для узловСервисный аккаунт для узлов

Чтобы создать сервисный аккаунт, от имени которого узлы будут скачивать из реестра необходимые Docker-образы.

  1. Запишите в переменную идентификатор каталога из конфигурации вашего профиля Yandex Cloud CLI:

    Bash
    PowerShell
    FOLDER_ID=$(yc config get folder-id)
    
    $FOLDER_ID = yc config get folder-id
    
  2. Создайте сервисный аккаунт:

    Bash
    PowerShell
    yc iam service-account create --name k8s-node-sa-$FOLDER_ID
    
    yc iam service-account create --name k8s-node-sa-$FOLDER_ID
    
  3. Запишите в переменную идентификатор сервисного аккаунта:

    Bash
    PowerShell
    NODE_SA_ID=$(yc iam service-account get --name k8s-node-sa-$FOLDER_ID --format json | jq .id -r)
    
    $NODE_SA_ID = (yc iam service-account get --name k8s-node-sa-$FOLDER_ID --format json | ConvertFrom-Json).id
    
  4. Назначьте сервисному аккаунту роль container-registry.images.puller на каталог:

    yc resource-manager folder add-access-binding \
      --id $FOLDER_ID \
      --role container-registry.images.puller \
      --subject serviceAccount:$NODE_SA_ID
    

Сервисный аккаунт, необходимый для работы Application Load Balancer Ingress-контроллераСервисный аккаунт, необходимый для работы Application Load Balancer Ingress-контроллера

  1. Запишите в переменную идентификатор каталога из конфигурации вашего профиля Yandex Cloud CLI:

    Bash
    PowerShell
    FOLDER_ID=$(yc config get folder-id)
    
    $FOLDER_ID = yc config get folder-id
    
  2. Создайте сервисный аккаунт:

    Bash
    PowerShell
    yc iam service-account create --name k8s-ic-sa-$FOLDER_ID
    
    yc iam service-account create --name k8s-ic-sa-$FOLDER_ID
    
  3. Запишите в переменную идентификатор сервисного аккаунта:

    Bash
    PowerShell
    IC_SA_ID=$(yc iam service-account get --name k8s-ic-sa-$FOLDER_ID --format json | jq .id -r)
    
    $RES_SA_ID = (yc iam service-account get --name k8s-ic-sa-$FOLDER_ID --format json | ConvertFrom-Json).id
    
  4. Назначьте сервисному аккаунту роли на каталог:

    • alb.editor.
    • vpc.publicAdmin.
    • certificate-manager.certificates.downloader.
    • compute.viewer.
    yc resource-manager folder add-access-binding \
      --id $FOLDER_ID \
      --role alb.editor \
      --role vpc.publicAdmin \
      --role certificate-manager.certificates.downloader \
      --role compute.viewer \
      --subject serviceAccount:$IC_SA_ID
    
  5. Создайте для сервисного аккаунта авторизованный ключ и сохраните в файл sa-key.json:

    yc iam key create \
      --service-account-id $IC_SA_ID \
      --output sa-key.json
    

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

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

Также настройте группы безопасности, необходимые для работы Application Load Balancer.

Важно

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

Подготовьте ресурсы KubernetesПодготовьте ресурсы Kubernetes

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

Совет

В данном примере используются базовые параметры кластера. Часть настроек, например выбор Container Network Interface, шифрование секретов с помощью Yandex Key Management Service и ряд других, нельзя изменить после создания кластера. Рекомендуем ознакомиться с подробной инструкцией по созданию кластера Managed Service for Kubernetes.

Создайте кластер Managed Service for Kubernetes и укажите ранее созданные сервисные аккаунты во флагах --service-account-id и --node-service-account-id и группы безопасности во флаге --security-group-ids.

Bash
PowerShell

Выполните команду:

yc managed-kubernetes cluster create \
  --name k8s-demo \
  --network-name yc-auto-network \
  --zone ru-central1-a \
  --subnet-name yc-auto-subnet-0 \
  --public-ip \
  --service-account-id $RES_SA_ID \
  --node-service-account-id $NODE_SA_ID \
  --security-group-ids <идентификаторы_групп_безопасности>

Выполните команду:

yc managed-kubernetes cluster create `
  --name k8s-demo `
  --network-name yc-auto-network `
  --zone ru-central1-a `
  --subnet-name yc-auto-subnet-0 `
  --public-ip `
  --service-account-id $RES_SA_ID `
  --node-service-account-id $NODE_SA_ID `
  --security-group-ids <идентификаторы_групп_безопасности>

Создайте группу узлов Managed Service for KubernetesСоздайте группу узлов Managed Service for Kubernetes

  1. Проверьте, что создание кластера Managed Service for Kubernetes успешно завершено.

    1. В консоли управления выберите каталог, в котором был создан кластер Managed Service for Kubernetes.
    2. В списке сервисов выберите Managed Service for Kubernetes.
    3. Проверьте, что кластер Managed Service for Kubernetes успешно создан:
      • В столбце Статус должно быть указано Running.
      • В столбце Состояние должно быть указано Healthy.
  2. Создайте группу узлов Managed Service for Kubernetes и укажите ранее созданные группы безопасности во флаге --network-interface security-group-ids:

    Bash
    PowerShell
    yc managed-kubernetes node-group create \
      --name k8s-demo-ng \
      --cluster-name k8s-demo \
      --platform standard-v3 \
      --cores 2 \
      --memory 4 \
      --core-fraction 50 \
      --disk-type network-ssd \
      --fixed-size 2 \
      --network-interface subnets=yc-auto-subnet-0,ipv4-address=nat,security-group-ids=[<идентификаторы_групп_безопасности>] \
      --async
    
    yc managed-kubernetes node-group create `
      --name k8s-demo-ng `
      --cluster-name k8s-demo `
      --platform standard-v3 `
      --cores 2 `
      --memory 4 `
      --core-fraction 50 `
      --disk-type network-ssd `
      --fixed-size 2 `
      --network-interface subnets=yc-auto-subnet-0,ipv4-address=nat,security-group-ids=[<идентификаторы_групп_безопасности>] `
      --async
    

Подключитесь к кластеру Managed Service for KubernetesПодключитесь к кластеру Managed Service for Kubernetes

Установите kubectl и настройте его на работу с созданным кластером.

Подготовьте ресурсы Container RegistryПодготовьте ресурсы Container Registry

Создайте реестрСоздайте реестр

Создайте реестр контейнеров:

yc container registry create --name yc-auto-cr

Сконфигурируйте Docker Credential helperСконфигурируйте Docker Credential helper

Для упрощения аутентификации в Container Registry сконфигурируйте Docker Credential helper. Он позволяет работать с приватными реестрами Yandex Cloud, не выполняя команду docker login.

Для настройки Credential helper выполните команду:

yc container registry configure-docker

Подготовьте Docker-образПодготовьте Docker-образ

Соберите Docker-образ и загрузите его в реестр.

  1. Создайте Dockerfile hello.dockerfile и сохраните в него следующие строки:

    FROM nginx
    CMD echo "Hi, I'm inside"
    
  2. Соберите Docker-образ.

    1. Получите идентификатор реестра, созданного ранее, и запишите его в переменную:

      Bash
      PowerShell
      REGISTRY_ID=$(yc container registry get --name yc-auto-cr --format json | jq .id -r)
      
      $REGISTRY_ID = (yc container registry get --name yc-auto-cr --format json | ConvertFrom-Json).id
      
    2. Соберите Docker-образ:

      docker build . -f hello.dockerfile -t cr.yandex/$REGISTRY_ID/nginx:hello
      
    3. Загрузите Docker-образ в реестр:

      docker push cr.yandex/$REGISTRY_ID/nginx:hello
      
  3. Проверьте, что Docker-образ загрузился в реестр:

    yc container image list
    

    Результат:

    +----------------------+---------------------+----------------------------+-------+-----------------+
    |          ID          |       CREATED       |            NAME            | TAGS  | COMPRESSED SIZE |
    +----------------------+---------------------+----------------------------+-------+-----------------+
    | crpa2mf008mp******** | 2019-11-20 11:52:17 | crp71hkgiolp********/nginx | hello | 27.5 MB         |
    +----------------------+---------------------+----------------------------+-------+-----------------+
    

Запустите тестовое приложениеЗапустите тестовое приложение

Создайте под с приложением из Docker-образа и убедитесь, что для загрузки Docker-образа не потребовалась дополнительная аутентификация в Container Registry.

  1. Запустите под с приложением из Docker-образа:

    kubectl run --attach hello-nginx --image cr.yandex/$REGISTRY_ID/nginx:hello
    
  2. Убедитесь, что под перешел в состояние Running, и узнайте его полное имя:

    kubectl get pods
    

    Результат:

    NAME                          READY  STATUS   RESTARTS  AGE
    hello-nginx-5847fb96**-*****  1/1    Running  0         1h
    
  3. Посмотрите логи контейнера, запущенного на этом поде:

    kubectl logs hello-nginx-5847fb96**-*****
    

    Результат:

    Hi, I'm inside
    

    Под загрузил Docker-образ без дополнительной аутентификации на стороне Container Registry.

Установите Application Load BalancerУстановите Application Load Balancer

Чтобы установить Application Load Balancer, воспользуйтесь инструкцией.

Создайте балансировщик нагрузкиСоздайте балансировщик нагрузки

  1. Создайте балансировщик нагрузки для сервисов Kubernetes.

    1. Создайте файл ingress.yaml с манифестом Ingress-контроллера:

      ---
      apiVersion: networking.k8s.io/v1
      kind: Ingress
      metadata:
        name: alb-demo-tls
        annotations:
          ingress.alb.yc.io/subnets: <список_идентификаторов_подсетей>
          ingress.alb.yc.io/security-groups: <список_идентификаторов_групп_безопасности>
          ingress.alb.yc.io/external-ipv4-address: <способ_назначения_IP-адреса>
          ingress.alb.yc.io/group-name: <имя_группы_ресурсов_Ingress>
      spec:
        tls:
          - hosts:
              - <доменное_имя>
            secretName: yc-certmgr-cert-id-<идентификатор_TLS-сертификата>
        rules:
          - host: <доменное_имя>
            http:
              paths:
                - pathType: Prefix
                  path: "/"
                  backend:
                    service:
                      name: service-hello
                      port:
                        name: http
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: service-hello
      spec:
        selector:
          run: hello-nginx
        type: NodePort
        ports:
          - name: http
            port: 80
            targetPort: 80
            protocol: TCP
            nodePort: 30080
      

      Где:

      • ingress.alb.yc.io/subnets — укажите одну или несколько подсетей, с которыми будет работать Application Load Balancer.

      • ingress.alb.yc.io/security-groups — укажите одну или несколько групп безопасности для Application Load Balancer. Если параметр не задан, используется группа безопасности по умолчанию. Хотя бы одна из групп безопасности должна разрешать исходящее TCP-соединение к порту 10501 в подсети группы узлов или в ее группу безопасности.

      • ingress.alb.yc.io/external-ipv4-address — чтобы получить новый и предоставить публичный доступ к Application Load Balancer из интернета, укажите заранее полученный IP-адрес, либо установите значение auto.

        Если вы указали значение auto, то при удалении Ingress-контроллера IP-адрес также будет удален из облака. Чтобы избежать этого, используйте имеющийся зарезервированный адрес.

      • ingress.alb.yc.io/group-name — укажите имя группы. Группа объединяет ресурсы Kubernetes Ingress, обслуживаемые отдельным экземпляром Application Load Balancer.

    2. Создайте балансировщик нагрузки:

      kubectl apply -f ingress.yaml
      
    3. Дождитесь создания балансировщика нагрузки и получения им публичного IP-адреса, это может занять несколько минут:

      kubectl get ingress alb-demo-tls
      

      Ожидаемый результат — непустое значение в поле ADDRESS для созданного балансировщика нагрузки:

      NAME          CLASS   HOSTS           ADDRESS     PORTS    AGE
      alb-demo-tls  <none>  <доменное_имя>  <IP-адрес>  80, 443  15h
      

      По конфигурации балансировщика нагрузки будет автоматически развернут L7-балансировщик.

  2. Перейдите по ссылке https://<доменное_имя> и убедитесь, что ваше приложение успешно опубликовано.

    Примечание

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

Удалите созданные ресурсыУдалите созданные ресурсы

Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:

  1. Удалите кластер Managed Service for Kubernetes:

    yc managed-kubernetes cluster delete --name k8s-demo
    
  2. Удалите сервисные аккаунты.

    • Удалите сервисный аккаунт для ресурсов:

      yc iam service-account delete --id $RES_SA_ID
      
    • Удалите сервисный аккаунт для узлов:

      yc iam service-account delete --id $NODE_SA_ID
      
    • Удалите сервисный аккаунт для балансировщика нагрузки:

      yc iam service-account delete --id $IC_SA_ID
      
  3. Удалите ресурсы Container Registry.

    1. Узнайте идентификатор Docker-образа, загруженного в реестр:

      Bash
      PowerShell
      IMAGE_ID=$(yc container image list --format json | jq .[0].id -r)
      
      $IMAGE_ID = (yc container image list --format json | ConvertFrom-Json).id
      
    2. Удалите Docker-образ:

      yc container image delete --id $IMAGE_ID
      
    3. Удалите реестр:

      yc container registry delete --name yc-auto-cr
      
  4. Удалите L7-балансировщик нагрузки.

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

Предыдущая
Настройка вывода информации из Docker-контейнера в серийный порт
Следующая
Создание кластера Kubernetes без доступа в интернет
Проект Яндекса
© 2025 ООО «Яндекс.Облако»