Поделиться через


Включение реестра контейнеров Edge на устройстве GPU Azure Stack Edge Pro

ОБЛАСТЬ ПРИМЕНЕНИЯ: Да для SKU GPU ProAzure Stack Edge Pro — GPUДа для SKU Pro 2Azure Stack Edge Pro 2Да для SKU R ProAzure Stack Edge Pro RДа для номера SKU Mini RAzure Stack Edge Mini R

В этой статье описывается, как включить реестр контейнеров Edge и использовать его изнутри кластера Kubernetes на устройстве Azure Stack Edge Pro. В примере, приведенном в статье, подробно описано, как отправить образ из исходного реестра (в данном случае реестра контейнеров Майкрософт) в реестр на устройстве Azure Stack Edge — реестр контейнеров Edge.

О реестре контейнеров Edge

Контейнерные вычислительные приложения выполняются на образах контейнеров, и эти образы хранятся в реестрах. Реестры могут быть общедоступными, например Docker Hub, частными или управляемыми поставщиками облачных служб, например Реестр контейнеров Azure. Дополнительные сведения см. в статье О реестрах, репозиториях и образах.

Реестр контейнеров Edge предоставляет репозиторий в Edge — на устройстве Azure Stack Edge Pro. Этот реестр можно использовать для хранения частных образов контейнеров и управления ими.

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

Необходимые компоненты

Перед тем как начать, убедитесь в следующем.

  1. У вас есть доступ к устройству Azure Stack Edge Pro.

  2. Устройство Azure Stack Edge Pro активировано, как описано в статье Активация Azure Stack Edge Pro.

  3. Роль вычислений на устройстве включена. Также создан Кластер Kubernetes на устройстве при настройке вычислений на устройстве в соответствии с инструкциями, приведенными в разделе Настройка вычислений на устройстве Azure Stack Edge Pro.

  4. Убедитесь в наличии конечной точки API Kubernetes, зайдя со страницы Устройство локального пользовательского веб-интерфейса. Дополнительные сведения см. в инструкциях в статье Получение конечной точки API Kubernetes.

  5. У вас есть доступ к клиентской системе с поддерживаемой операционной системой. При использовании клиента Windows система должна запустить PowerShell 5.0 или более поздней версии для доступа к устройству.

    1. Если вам нужно извлекать и отправлять собственные образы контейнеров, убедитесь, что в системе установлен клиент Docker. При использовании клиента Windows установите Docker Desktop в Windows.

Включение реестра контейнеров в качестве надстройки

Первым шагом является включение реестра контейнеров Edge в качестве надстройки.

  1. Подключитесь к интерфейсу PowerShell на устройстве.

  2. Чтобы включить реестр контейнеров в качестве надстройки, введите:

    Set-HcsKubernetesContainerRegistry

    Выполнение этой операции займет несколько минут.

    Пример выходных данных этой команды:

    [10.128.44.40]: PS>Set-HcsKubernetesContainerRegistry
    Operation completed successfully. Use Get-HcsKubernetesContainerRegistryInfo for credentials    
    
  3. Чтобы получить подробные сведения о реестре контейнеров, введите:

    Get-HcsKubernetesContainerRegistryInfo

    Пример выходных данных этой команды:

    [10.128.44.40]: PS> Get-HcsKubernetesContainerRegistryInfo
    
    Endpoint                                   IPAddress    Username     Password
    --------                                   ---------    --------     --------
    ecr.dbe-hw6h1t2.microsoftdatabox.com:31001 10.128.44.41 ase-ecr-user i3eTsU4zGYyIgxV
    
  4. Запишите имя пользователя и пароль из выходных данных Get-HcsKubernetesContainerRegistryInfo. Эти учетные данные используются для входа в реестр контейнеров Edge при передаче образов.

Управление образами реестра контейнеров

Вам может потребоваться доступ к реестру контейнеров извне устройства Azure Stack Edge. Также может потребоваться отправить или извлечь образы, содержащиеся в реестре.

Выполните следующие действия для доступа к реестру контейнеров Edge:

  1. Получите сведения о конечной точке для реестра контейнеров Edge.

    1. В локальном пользовательском интерфейсе устройства перейдите в раздел Устройство.

    2. Найдите конечную точку реестра контейнеров Edge. Конечная точка реестра контейнеров Edge на странице

    3. Скопируйте эту конечную точку и создайте соответствующую запись DNS в файле C:\Windows\System32\Drivers\etc\hosts клиента, чтобы подключиться к конечной точке реестра контейнеров Edge.

      <IP-адрес конечной точки реестра контейнеров edge для основного узла><Kubernetes>

      Добавление записи DNS для конечной точки реестра контейнеров Edge

  2. Скачайте сертификат реестра контейнеров Edge из локального пользовательского интерфейса.

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

    2. Найдите запись Edge container registry certificate (Сертификат реестра контейнеров Edge). Справа от этой записи выберите Скачать, чтобы скачать сертификат реестра контейнеров Edge на клиентской системе, которая будет использоваться для доступа к устройству.

      Скачивание сертификата конечной точки реестра контейнеров Edge

  3. Установите скачанный сертификат на клиенте. При использовании клиента Windows выполните следующие действия.

    1. Выберите сертификат и в мастере импорта сертификатов выберите расположение хранилища Локальный компьютер.

      Установка сертификата 1

    2. Установите сертификат на локальном компьютере в доверенном корневом хранилище.

      Установка сертификата 2

  4. После установки сертификата перезапустите клиент Docker в системе.

  5. Войдите в реестр контейнеров Edge. Тип:

    docker login <Edge container registry endpoint> -u <username> -p <password>

    Укажите конечную точку реестра контейнеров Edge на странице Устройства, а также имя пользователя и пароль, полученные из выходных данных Get-HcsKubernetesContainerRegistryInfo.

  6. Используйте команды Docker push или pull для отправки или извлечения образов контейнеров из реестра контейнеров.

    1. Извлечение образа из образа Microsoft Container Registry. Тип:

      docker pull <Full path to the container image in the Microsoft Container Registry>

    2. Создайте псевдоним извлеченного вами образа с полным путем к реестру.

      docker tag <Path to the image in the Microsoft container registry> <Path to the image in the Edge container registry/Image name with tag>

    3. Отправьте образ в реестр.

      docker push <Path to the image in the Edge container registry/Image name with tag>

    4. Запустите образ, отправленный в реестр.

      docker run -it --rm -p 8080:80 <Path to the image in the Edge container registry/Image name with tag>

      Ниже приведен пример выходных данных команд pull и push.

      PS C:\WINDOWS\system32> docker login ecr.dbe-hw6h1t2.microsoftdatabox.com:31001 -u ase-ecr-user -p 3bbo2sOtDe8FouD
      WARNING! Using --password via the CLI is insecure. Use --password-stdin.
      Login Succeeded
      PS C:\WINDOWS\system32> docker pull mcr.microsoft.com/oss/nginx/nginx:1.17.5-alpine
      1.17.5-alpine: Pulling from oss/nginx/nginx
      Digest: sha256:5466bbc0a989bd1cd283c0ba86d9c2fc133491ccfaea63160089f47b32ae973b
      Status: Image is up to date for mcr.microsoft.com/oss/nginx/nginx:1.17.5-alpine
      mcr.microsoft.com/oss/nginx/nginx:1.17.5-alpine
      PS C:\WINDOWS\system32> docker tag mcr.microsoft.com/oss/nginx/nginx:1.17.5-alpine ecr.dbe-hw6h1t2.microsoftdatabox.com:31001/nginx:2.0
      PS C:\WINDOWS\system32> docker push ecr.dbe-hw6h1t2.microsoftdatabox.com:31001/nginx:2.0
      The push refers to repository [ecr.dbe-hw6h1t2.microsoftdatabox.com:31001/nginx]
      bba7d2385bc1: Pushed
      77cae8ab23bf: Pushed
      2.0: digest: sha256:b4c0378c841cd76f0b75bc63454bfc6fe194a5220d4eab0d75963bccdbc327ff size: 739
      PS C:\WINDOWS\system32> docker run -it --rm -p 8080:80 ecr.dbe-hw6h1t2.microsoftdatabox.com:31001/nginx:2.0
      2020/11/10 00:00:49 [error] 6#6: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "localhost:8080", referrer: "http://localhost:8080/"
      172.17.0.1 - - [10/Nov/2020:00:00:49 +0000] "GET /favicon.ico HTTP/1.1" 404 555 "http://localhost:8080/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36" "-"
      ^C
      PS C:\WINDOWS\system32>    
      
  7. Перейдите по адресу http://localhost:8080, чтобы просмотреть запущенный контейнер. В этом случае вы увидите запущенный веб-сервер nginx.

    Просмотр запущенного контейнера

    Чтобы остановить и удалить контейнер, нажмите Control+C.

Использование образов реестра контейнеров Edge посредством модулей Kubernetes Pod

Теперь можно развернуть образ, отправленный в реестр контейнеров Edge, из модулей Kubernetes Pod.

  1. Для развертывания образа необходимо настроить доступ к кластеру через kubectl. Создайте пространство имен, пользователя, предоставьте пользователю доступ к пространству имен и получите файл config. Убедитесь, что вы можете подключиться к модулям Kubernetes Pod.

    Выполните все действия, описанные в статье Подключение к кластеру Kubernetes и управление им через kubectl на устройстве GPU Azure Stack Edge Pro.

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

    [10.128.44.40]: PS>New-HcsKubernetesNamespace -Namespace myecr
    [10.128.44.40]: PS>New-HcsKubernetesUser -UserName ecruser
    apiVersion: v1
    clusters:
    - cluster:
        certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUN5RENDQWJDZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJd01URXdOVEF6TkRJek1Gb1hEVE13TVRFd016QXpOREl6TUZvd0ZURVRNQkVnNjOVRLWndCQ042cm1XQms2eXFwcXI1MUx6bApTaXMyTy91UEJ2YXNSSUUzdzgrbmEwdG1aTERZZ2F6MkQwMm42Q29mUmtyUTR2d1lLTnR1MlpzR3pUdz0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
        server: https://compute.dbe-hw6h1t2.microsoftdatabox.com:6443
        name: kubernetes
        ===================CUT=========================================CUT==============
        client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUMwRENDQWJpZ0F3SUJBZ0lJYmVWRGJSTzZ3ell3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TURFeE1EVXdNelF5TXpCYUZ3MHlNVEV4TURreU16UTRNal
        ===================CUT=========================================CUT==============
        DMVUvN3lFOG5UU3k3b2VPWitUeHdzCjF1UDByMjhDZ1lCdHdRY0ZpcFh1blN5ak16dTNIYjhveFI2V3VWWmZldFFKNElKWEFXOStVWGhKTFhyQ2x4bUcKWHRtbCt4UU5UTzFjQVNKRVZWVDd6Tjg2ay9kSU43S3JIVkdUdUxlUDd4eGVjV2VRcWJrZEVScUsxN0liTXpiVApmbnNxc0dobEdmLzdmM21kTGtyOENrcWs5TU5aM3MvUVIwRlFCdk94ZVpuUlpTeDVGbUR5S1E9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
    
    [10.128.44.40]: PS>Grant-HcsKubernetesNamespaceAccess -Namespace myecr -UserName ecruser
    [10.128.44.40]: PS>kubectl get pods -n "myecr"
    No resources found.
    PS C:\WINDOWS\system32>
    
  2. Секреты извлечения образа уже заданы во всех пространствах имен Kubernetes на устройстве. Получить секреты можно с помощью команды get secrets. Пример выходных данных:

    PS C:\WINDOWS\system32> .\kubectl.exe get secrets -n myecr
    NAME                  TYPE                                  DATA   AGE
    ase-ecr-credentials   kubernetes.io/dockerconfigjson        1      99m
    default-token-c7kww   kubernetes.io/service-account-token   3      107m
    sec-smbcredentials    microsoft.com/smb                     2      99m
    PS C:\WINDOWS\system32>   
    
  3. Разверните модуль Pod в пространстве имен с помощью kubectl. Используйте следующий код yaml.

    Замените образ <image-name> на образ, отправленный в реестр контейнеров. Обращайтесь к секретам в пространствах имен, используя imagePullSecrets с именем ase-ecr-credentials.

    apiVersion: v1
    kind: Pod
    metadata:
      name: nginx
    spec:
      containers:
      - name: nginx
        image: ecr.dbe-hw6h1t2.microsoftdatabox.com:31001/nginx:2.0
        imagePullPolicy: Always
      imagePullSecrets:
      - name: ase-ecr-credentials
    
  4. Примените развертывание в созданном пространстве имен с помощью команды apply. Убедитесь, что контейнер работает. Пример выходных данных:

    PS C:\Windows\System32> .\kubectl.exe apply -f .\deployment.yml -n myecr
    pod/nginx configured
    PS C:\Windows\System32> .\kubectl.exe get pods -n myecr
    NAME    READY   STATUS    RESTARTS   AGE
    nginx   1/1     Running   0          27m
    PS C:\Windows\System32>
    

Удаление образов реестра контейнеров

Хранилище реестра контейнеров Edge размещается в локальном общем ресурсе на устройстве Azure Stack Edge Pro, который ограничен доступным хранилищем на устройстве. Вы несете ответственность за удаление неиспользуемых образов Docker из реестра контейнеров с помощью API Docker HTTP версии 2 (https://docs.docker.com/registry/spec/api/).

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

  1. Задайте имя образа, который нужно удалить.

    PS C:\WINDOWS\system32> $imageName="nginx"    
    
  2. Задайте имя пользователя и пароль для реестра контейнеров как учетные данные PS

    PS C:\WINDOWS\system32> $username="ase-ecr-user"
    PS C:\WINDOWS\system32> $password="3bbo2sOtDe8FouD"
    PS C:\WINDOWS\system32> $securePassword = ConvertTo-SecureString $password -AsPlainText -Force
    PS C:\WINDOWS\system32> $credential = New-Object System.Management.Automation.PSCredential ($username, $securePassword)    
    
  3. Выведите список тегов, связанных с образом

    PS C:\WINDOWS\system32> $tags = Invoke-RestMethod -Credential $credential -Uri "https://ecr.dbe-hw6h1t2.microsoftdatabox.com:31001/v2/nginx/tags/list" | Select-Object -ExpandProperty tags
    PS C:\WINDOWS\system32> $tags
    2.0
    PS C:\WINDOWS\system32> $tags = Invoke-RestMethod -Credential $credential -Uri "https://ecr.dbe-hw6h1t2.microsoftdatabox.com:31001/v2/$imageName/tags/list" | Select-Object -ExpandProperty tags
    PS C:\WINDOWS\system32> $tags
    2.0
    PS C:\WINDOWS\system32>    
    
  4. Выведите хэш-код, связанный с тегом, который нужно удалить. В этом случае используется $tags из выходных данных указанной выше команды. При наличии нескольких тегов выберите один из них и используйте его в следующей команде.

    PS C:\WINDOWS\system32> $response = Invoke-WebRequest -Method Head -Credential $credential -Uri "https://ecr.dbe-hw6h1t2.microsoftdatabox.com:31001/v2/$imageName/manifests/$tags" -Headers @{ 'Accept' = 'application/vnd.docker.distribution.manifest.v2+json' }
    PS C:\WINDOWS\system32> $digest = $response.Headers['Docker-Content-Digest']
    PS C:\WINDOWS\system32> $digest
    sha256:b4c0378c841cd76f0b75bc63454bfc6fe194a5220d4eab0d75963bccdbc327ff
    PS C:\WINDOWS\system32>    
    
  5. Удалите образ с помощью хэш-кода image:tag

    PS C:\WINDOWS\system32> Invoke-WebRequest -Method Delete -Credential $credential -Uri "https://ecr.dbe-hw6h1t2.microsoftdatabox.com:31001/v2/$imageName/manifests/$digest" | Select-Object -ExpandProperty StatusDescription    
    

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

Следующие шаги