Включение реестра контейнеров Edge на устройстве GPU Azure Stack Edge Pro
ОБЛАСТЬ ПРИМЕНЕНИЯ: Azure Stack Edge Pro — GPUAzure Stack Edge Pro 2Azure Stack Edge Pro 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 для последующих развертываний.
Необходимые компоненты
Перед тем как начать, убедитесь в следующем.
У вас есть доступ к устройству Azure Stack Edge Pro.
Устройство Azure Stack Edge Pro активировано, как описано в статье Активация Azure Stack Edge Pro.
Роль вычислений на устройстве включена. Также создан Кластер Kubernetes на устройстве при настройке вычислений на устройстве в соответствии с инструкциями, приведенными в разделе Настройка вычислений на устройстве Azure Stack Edge Pro.
Убедитесь в наличии конечной точки API Kubernetes, зайдя со страницы Устройство локального пользовательского веб-интерфейса. Дополнительные сведения см. в инструкциях в статье Получение конечной точки API Kubernetes.
У вас есть доступ к клиентской системе с поддерживаемой операционной системой. При использовании клиента Windows система должна запустить PowerShell 5.0 или более поздней версии для доступа к устройству.
- Если вам нужно извлекать и отправлять собственные образы контейнеров, убедитесь, что в системе установлен клиент Docker. При использовании клиента Windows установите Docker Desktop в Windows.
Включение реестра контейнеров в качестве надстройки
Первым шагом является включение реестра контейнеров Edge в качестве надстройки.
Чтобы включить реестр контейнеров в качестве надстройки, введите:
Set-HcsKubernetesContainerRegistry
Выполнение этой операции займет несколько минут.
Пример выходных данных этой команды:
[10.128.44.40]: PS>Set-HcsKubernetesContainerRegistry Operation completed successfully. Use Get-HcsKubernetesContainerRegistryInfo for credentials
Чтобы получить подробные сведения о реестре контейнеров, введите:
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
Запишите имя пользователя и пароль из выходных данных
Get-HcsKubernetesContainerRegistryInfo
. Эти учетные данные используются для входа в реестр контейнеров Edge при передаче образов.
Управление образами реестра контейнеров
Вам может потребоваться доступ к реестру контейнеров извне устройства Azure Stack Edge. Также может потребоваться отправить или извлечь образы, содержащиеся в реестре.
Выполните следующие действия для доступа к реестру контейнеров Edge:
Получите сведения о конечной точке для реестра контейнеров Edge.
В локальном пользовательском интерфейсе устройства перейдите в раздел Устройство.
Найдите конечную точку реестра контейнеров Edge.
Скопируйте эту конечную точку и создайте соответствующую запись DNS в файле
C:\Windows\System32\Drivers\etc\hosts
клиента, чтобы подключиться к конечной точке реестра контейнеров Edge.<IP-адрес конечной точки реестра контейнеров edge для основного узла><Kubernetes>
Скачайте сертификат реестра контейнеров Edge из локального пользовательского интерфейса.
В локальном пользовательском интерфейсе устройства перейдите в раздел Сертификаты.
Найдите запись Edge container registry certificate (Сертификат реестра контейнеров Edge). Справа от этой записи выберите Скачать, чтобы скачать сертификат реестра контейнеров Edge на клиентской системе, которая будет использоваться для доступа к устройству.
Установите скачанный сертификат на клиенте. При использовании клиента Windows выполните следующие действия.
Выберите сертификат и в мастере импорта сертификатов выберите расположение хранилища Локальный компьютер.
Установите сертификат на локальном компьютере в доверенном корневом хранилище.
После установки сертификата перезапустите клиент Docker в системе.
Войдите в реестр контейнеров Edge. Тип:
docker login <Edge container registry endpoint> -u <username> -p <password>
Укажите конечную точку реестра контейнеров Edge на странице Устройства, а также имя пользователя и пароль, полученные из выходных данных
Get-HcsKubernetesContainerRegistryInfo
.Используйте команды Docker push или pull для отправки или извлечения образов контейнеров из реестра контейнеров.
Извлечение образа из образа Microsoft Container Registry. Тип:
docker pull <Full path to the container image in the Microsoft Container Registry>
Создайте псевдоним извлеченного вами образа с полным путем к реестру.
docker tag <Path to the image in the Microsoft container registry> <Path to the image in the Edge container registry/Image name with tag>
Отправьте образ в реестр.
docker push <Path to the image in the Edge container registry/Image name with tag>
Запустите образ, отправленный в реестр.
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>
Перейдите по адресу
http://localhost:8080
, чтобы просмотреть запущенный контейнер. В этом случае вы увидите запущенный веб-сервер nginx.Чтобы остановить и удалить контейнер, нажмите
Control+C
.
Использование образов реестра контейнеров Edge посредством модулей Kubernetes Pod
Теперь можно развернуть образ, отправленный в реестр контейнеров Edge, из модулей Kubernetes Pod.
Для развертывания образа необходимо настроить доступ к кластеру через 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>
Секреты извлечения образа уже заданы во всех пространствах имен 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>
Разверните модуль 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
Примените развертывание в созданном пространстве имен с помощью команды 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/).
Чтобы удалить один или несколько образов контейнеров, выполните следующие действия.
Задайте имя образа, который нужно удалить.
PS C:\WINDOWS\system32> $imageName="nginx"
Задайте имя пользователя и пароль для реестра контейнеров как учетные данные 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)
Выведите список тегов, связанных с образом
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>
Выведите хэш-код, связанный с тегом, который нужно удалить. В этом случае используется $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>
Удалите образ с помощью хэш-кода 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
После удаления неиспользуемых образов пространство, связанное с неуправляемыми изображениями, автоматически удаляется процессом, который выполняется ночью.