Yandex.Cloud
  • Сервисы
  • Почему Yandex.Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Yandex Managed Service for Kubernetes
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Подключение к узлу по SSH
    • Создание файла конфигурации
    • Сетевые сценарии
      • Обеспечение доступа к приложению, запущенному в кластере Kubernetes
      • Работа с сетевыми политиками кластера Kubernetes
    • Шифрование секретов
    • Работа с постоянными томами
      • Динамическая подготовка тома
      • Статическая подготовка тома
      • Управление классами хранилищ
      • Увеличение размера тома
      • Подключение тома в блочном режиме
    • Управление кластером Kubernetes
      • Добавление учетных данных кластера Kubernetes в конфигурационный файл kubectl
      • Получение информации о кластере Kubernetes
      • Создание кластера Kubernetes
      • Изменение кластера Kubernetes
      • Удаление кластера Kubernetes
    • Управление группой узлов
      • Получение информации о группе узлов
      • Создание группы узлов
      • Изменение группы узлов
      • Удаление группы узлов
  • Сценарии использования
    • Интеграция с Container Registry
    • Запуск рабочих нагрузок с GPU
    • Резервное копирование в Object Storage
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Релизные каналы и обновления
    • Использование объектов API Kubernetes
      • Том
      • Сервис
    • Группа узлов
      • Автоматическое масштабирование группы узлов
      • Расселение подов с узла
      • Динамическое резервирование ресурсов для узла
      • Группы узлов с GPU
    • Сетевые политики кластера Kubernetes
    • Квоты и лимиты
  • Управление доступом
  • Правила тарификации
  • Справочник API
    • Аутентификация в API
    • gRPC
      • Обзор
      • ClusterService
      • NodeGroupService
      • VersionService
      • OperationService
    • REST
      • Обзор
      • Cluster
        • Обзор
        • create
        • delete
        • get
        • list
        • listNodeGroups
        • listOperations
        • update
      • NodeGroup
        • Обзор
        • create
        • delete
        • get
        • list
        • listOperations
        • update
      • Version
        • Обзор
        • list
  • Вопросы и ответы
  1. Сценарии использования
  2. Интеграция с Container Registry

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

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

Для интеграции Kubernetes и 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. Нажмите кнопку Создать.

Если у вас еще нет интерфейса командной строки 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-v2 \
     --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-v2 `
     --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
  • Пошаговые инструкции
В этой статье:
  • Перед началом работы
  • Создайте сервисные аккаунты
  • Создайте сервисный аккаунт для ресурсов
  • Создайте сервисный аккаунт для узлов
  • Подготовьте ресурсы Kubernetes
  • Создайте кластер Kubernetes
  • Создайте группу узлов
  • Подготовьте ресурсы Container Registry
  • Создайте реестр
  • Сконфигурируйте Docker Credential helper
  • Подготовьте Docker-образ
  • Подключитесь к кластеру Kubernetes
  • Запустите тестовое приложение
  • Удалите созданные ресурсы
Language
Вакансии
Политика конфиденциальности
Условия использования
© 2021 ООО «Яндекс.Облако»