Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Настройка групп безопасности
    • Подключение к узлу по SSH
    • Создание файла конфигурации
    • Обновление Kubernetes
    • Настройка автомасштабирования
    • Установка приложений
      • Основы работы с Cloud Marketplace
      • Установка Jaeger
      • Установка Metrics Provider
    • Сетевые сценарии
      • Обеспечение доступа к приложению, запущенному в кластере Kubernetes
      • Настройка контроллера сетевых политик Calico
      • Настройка контроллера сетевых политик Cilium
      • Настройка Node Local DNS для контроллера сетевых политик Cilium
    • Работа с постоянными томами
      • Динамическая подготовка тома
      • Статическая подготовка тома
      • Управление классами хранилищ
      • Увеличение размера тома для подов
      • Увеличение размера тома для контроллера StatefulSet
      • Подключение тома в блочном режиме
      • Интеграция с Yandex Object Storage
    • Управление кластером Kubernetes
      • Добавление учетных данных кластера Kubernetes в конфигурационный файл kubectl
      • Информация об имеющихся кластерах
      • Создание кластера Kubernetes
      • Изменение кластера Kubernetes
      • Создание пространства имен в кластере Kubernetes
      • Удаление кластера Kubernetes
    • Управление группой узлов
      • Информация об имеющихся группах узлов
      • Создание группы узлов
      • Изменение группы узлов
      • Управление метками узлов кластера Kubernetes
      • Удаление группы узлов
    • Подключение внешних узлов к кластеру
  • Практические руководства
    • Все руководства
    • Интеграция с Container Registry
    • Запуск рабочих нагрузок с GPU
    • Установка NGINX Ingress-контроллера с Let's Encrypt®
    • Настройка Application Load Balancer Ingress-контроллера
    • Резервное копирование в Object Storage
    • Горизонтальное масштабирование приложения в кластере
    • Работа со снапшотами
    • Интеграция с корпоративной зоной DNS
    • Автоматическое масштабирование DNS по размеру кластера
    • Настройка локального кеширования DNS
    • Настройка Fluent Bit для работы с Yandex Cloud Logging
    • Синхронизация с секретами Yandex Lockbox
    • Использование продуктов Yandex Cloud Marketplace
      • Использование Jaeger для трассировки запросов в Yandex Managed Service for YDB
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Релизные каналы и обновления
    • Шифрование секретов
    • Использование объектов API Kubernetes
      • Том
      • Сервис
    • Группа узлов
      • Автоматическое масштабирование группы узлов
      • Расселение подов с узла
      • Динамическое резервирование ресурсов для узла
      • Группы узлов с GPU
    • Сеть в Managed Service for Kubernetes
    • Внешние узлы кластера
    • Сетевые настройки и политики кластера
    • Автоматическое масштабирование
    • Квоты и лимиты
    • Рекомендации по использованию Managed Service for Kubernetes
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • ClusterService
      • NodeGroupService
      • VersionService
      • OperationService
    • REST (англ.)
      • Overview
      • Cluster
        • Overview
        • create
        • delete
        • get
        • list
        • listNodeGroups
        • listNodes
        • listOperations
        • start
        • stop
        • update
      • NodeGroup
        • Overview
        • create
        • delete
        • get
        • list
        • listNodes
        • listOperations
        • update
      • Version
        • Overview
        • list
  • Вопросы и ответы
    • Общие вопросы
    • Хранилище данных
    • Настройка и обновление
    • Автоматическое масштабирование
    • Ресурсы
    • Логи
    • Все вопросы на одной странице
  1. Практические руководства
  2. Интеграция с Container Registry

Интеграция с Container Registry

Статья создана
Yandex.Cloud
  • Перед началом работы
  • Создайте сервисные аккаунты
    • Создайте сервисный аккаунт для ресурсов
    • Создайте сервисный аккаунт для узлов
  • Подготовьте ресурсы Kubernetes
    • Создайте кластер Kubernetes
    • Создайте группу узлов
  • Подготовьте ресурсы Container Registry
    • Создайте реестр
    • Сконфигурируйте Docker Credential helper
    • Подготовьте Docker-образ
  • Подключитесь к кластеру Kubernetes
  • Запустите тестовое приложение
  • Удалите созданные ресурсы

Для интеграции Kubernetes и Yandex Container Registry создайте следующие ресурсы: сервисные аккаунты для управления ресурсами и доступами к ним, кластер Kubernetes, группу узлов, а также реестр и Docker-образ. Для упрощения аутентификации настройте Docker Credential helper и убедитесь, что под с приложением из Container Registry запускается без дополнительной аутентификации, используя сервисный аккаунт.

  1. Создайте сервисные аккаунты
    1. Создайте сервисный аккаунт для ресурсов
    2. Создайте сервисный аккаунт для узлов
  2. Подготовьте необходимые ресурсы Kubernetes
    1. Создайте кластер Kubernetes
    2. Создайте группу узлов
  3. Подготовьте необходимые ресурсы Container Registry
    1. Создайте реестр
    2. Сконфигурируйте Credential helper
    3. Подготовьте Docker-образ
  4. Подключитесь к кластеру Kubernetes
  5. Запустите тестовое приложение
  6. Удалите созданные ресурсы

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

Перейдите в консоль Yandex Cloud и выберите каталог, в котором будете выполнять операции. Если такого каталога нет, создайте его:

Консоль управления
CLI
API
  1. На странице облака нажмите кнопку Создать каталог.

  2. Введите имя каталога. Требования к имени:

    • Длина — от 3 до 63 символов.
    • Может содержать строчные буквы латинского алфавита, цифры и дефисы.
    • Первый символ — буква. Последний символ — не дефис.
  3. (опционально) Введите описание каталога.

  4. Выберите опцию Создать сеть по умолчанию. Будет создана сеть с подсетями в каждой зоне доступности. Также в этой сети будет создана группа безопасности по умолчанию, внутри которой весь сетевой трафик разрешен.

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

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

  1. Посмотрите описание команды создания каталога:

    yc resource-manager folder create --help
    
  2. Создайте новый каталог:

    • с именем и без описания:

      yc resource-manager folder create \
         --name new-folder
      
      • Длина — от 3 до 63 символов.
      • Может содержать строчные буквы латинского алфавита, цифры и дефисы.
      • Первый символ — буква. Последний символ — не дефис.
    • с именем и описанием:

      yc resource-manager folder create \
         --name new-folder \
         --description "my first folder with description"
      

Воспользуйтесь методом create для ресурса Folder сервиса Yandex Resource Manager.

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

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

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

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

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

  1. Запишите в переменную идентификатор каталога из конфигурации вашего профиля 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. Запишите в переменную идентификатор каталога из конфигурации вашего профиля 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
    

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

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

Создайте кластер Kubernetes и укажите ранее созданные сервисные аккаунты в параметрах --service-account-id и --node-service-account-id.

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

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

> 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

Создайте группу узлов

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

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

    Bash
    PowerShell
    $ yc managed-kubernetes node-group create \
     --name k8s-demo-ng \
     --cluster-name k8s-demo \
     --platform-id standard-v3 \
     --public-ip \
     --cores 2 \
     --memory 4 \
     --core-fraction 50 \
     --disk-type network-ssd \
     --fixed-size 2 \
     --location subnet-name=yc-auto-subnet-0,zone=ru-central1-a \
     --async
    
    > yc managed-kubernetes node-group create `
     --name k8s-demo-ng `
     --cluster-name k8s-demo `
     --platform-id standard-v3 `
     --public-ip `
     --cores 2 `
     --memory 4 `
     --core-fraction 50 `
     --disk-type network-ssd `
     --fixed-size 2 `
     --location subnet-name=yc-auto-subnet-0,zone=ru-central1-a `
     --async
    

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

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

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

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

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

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

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

yc container registry configure-docker

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

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

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

    FROM ubuntu:latest
    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/ubuntu:hello
      
    3. Загрузите Docker-образ в реестр:

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

    yc container image list
    
    +----------------------+---------------------+-----------------------------+-------+-----------------+
    |          ID          |       CREATED       |            NAME             | TAGS  | COMPRESSED SIZE |
    +----------------------+---------------------+-----------------------------+-------+-----------------+
    | crpa2mf008mpjig73rp6 | 2019-11-20 11:52:17 | crp71hkgiolp6677hg9i/ubuntu | hello | 27.5 MB         |
    +----------------------+---------------------+-----------------------------+-------+-----------------+
    

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

Чтобы работать с кластером Kubernetes с помощью kubectl:

  • Настройте группы безопасности кластера.

    Важно

    Настройки групп безопасности могут препятствовать подключению к кластеру.

  • Добавьте учетные данные кластера Kubernetes в конфигурационный файл kubectl:

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

      yc managed-kubernetes cluster get-credentials --external --name k8s-demo
      
    2. Проверьте конфигурацию kubectl:

      kubectl config view
      apiVersion: v1
      clusters:
      - cluster:
          certificate-authority-data: DATA+OMITTED
      ...
      
    • По умолчанию учетные данные добавляются в директорию $HOME/.kube/config.
    • Если необходимо изменить расположение конфигураций, используйте флаг --kubeconfig <путь к файлу>.

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

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

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

    kubectl run --attach hello-ubuntu --image cr.yandex/${REGISTRY_ID}/ubuntu:hello
    
  2. Найдите запущенный под и посмотрите его полное имя:

    kubectl get po
    
    NAME                            READY   STATUS      RESTARTS   AGE
    hello-ubuntu-5847fb96b4-54g48   0/1     Completed   3          61s
    
  3. Посмотрите логи контейнера, запущенного на этом поде:

    kubectl logs hello-ubuntu-5847fb96b4-54g48
    
    Hi, I'm inside
    

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

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

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

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

    Важно

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

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

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

      yc iam service-account delete --id $NODE_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
      

См. также

  • Docker-образ
  • Аутентифицироваться в Container Registry
  • Пошаговые инструкции для Container Registry

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

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Перед началом работы
  • Создайте сервисные аккаунты
  • Создайте сервисный аккаунт для ресурсов
  • Создайте сервисный аккаунт для узлов
  • Подготовьте ресурсы Kubernetes
  • Создайте кластер Kubernetes
  • Создайте группу узлов
  • Подготовьте ресурсы Container Registry
  • Создайте реестр
  • Сконфигурируйте Docker Credential helper
  • Подготовьте Docker-образ
  • Подключитесь к кластеру Kubernetes
  • Запустите тестовое приложение
  • Удалите созданные ресурсы