Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
Проект Яндекса
© 2023 ООО «Яндекс.Облако»
Yandex Managed Service for Kubernetes
  • Сопоставление с другими сервисами Yandex Cloud
  • Начало работы
  • Пошаговые инструкции
  • Практические руководства
    • Все руководства
    • Создание нового Kubernetes-проекта в Yandex Cloud
    • Интеграция с Container Registry
    • Подпись и проверка Docker-образов Container Registry
    • Сканирование уязвимостей Container Registry при непрерывном развертывании приложений с помощью GitLab
    • Запуск рабочих нагрузок с GPU
    • Установка Ingress-контроллера NGINX с Let's Encrypt®
    • Установка Ingress-контроллера NGINX с сертификатом из Certificate Manager
    • Резервное копирование в Object Storage
    • Горизонтальное масштабирование приложения в кластере
    • Вертикальное масштабирование приложения в кластере
    • Развертывание и нагрузочное тестирование gRPC-сервиса с масштабированием
    • Работа со снапшотами
    • Интеграция с корпоративной зоной DNS
    • Автоматическое масштабирование DNS по размеру кластера
    • Настройка локального кеширования DNS
    • Проверка DNS Challenge для сертификатов Let's Encrypt®
    • Мониторинг кластера с помощью Prometheus и Grafana
    • Непрерывное развертывание контейнеризованных приложений с помощью GitLab
    • Изменение параметров сервера метрик (Metrics Server)
    • Использование продуктов Cloud Marketplace
  • Концепции
  • Управление доступом
  • Правила тарификации
  • Справочник API
  • Вопросы и ответы
  1. Практические руководства
  2. Интеграция с Container Registry

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

Статья создана
Yandex Cloud
,
улучшена
Anton P.
  • Перед началом работы
  • Создайте сервисные аккаунты
    • Создайте сервисный аккаунт для ресурсов
    • Создайте сервисный аккаунт для узлов
  • Подготовьте ресурсы 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. В консоли управления выберите облако и нажмите кнопку Create icon Создать каталог.

  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 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 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.
  • Пошаговые инструкции для Container Registry.

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

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