Habilitación de un registro de contenedor de Edge en un dispositivo de Azure Stack Edge Pro con GPU
SE APLICA A: Azure Stack Edge Pro: GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
En este artículo se describe cómo habilitar el registro de contenedor de Edge y usarlo desde el clúster de Kubernetes en el dispositivo de Azure Stack Edge Pro. En el ejemplo que se usa en el artículo se detalla cómo se inserta una imagen de un registro de origen, en este caso, Microsoft Container Registry, en el registro del dispositivo de Azure Stack Edge, el registro de contenedor de Edge.
Acerca del registro de contenedor de Edge
Las aplicaciones de proceso de contenedor se ejecutan en imágenes de contenedor y estas imágenes se almacenan en registros. Los registros pueden ser públicos, como Docker Hub, privados o administrados por un proveedor de nube, como Azure Container Registry. Para obtener más información, consulte Acerca de los registros, repositorios e imágenes.
Un registro de contenedor de Edge proporciona un repositorio en Edge, en el dispositivo de Azure Stack Edge Pro. Puede usar este registro para almacenar y administrar las imágenes de contenedor privadas.
En un entorno de varios nodos, las imágenes de contenedor se pueden descargar e insertar en el registro de contenedor de Edge una vez. Todas las aplicaciones de Edge pueden usar el registro de contenedor de Edge para las implementaciones posteriores.
Requisitos previos
Antes de comenzar, asegúrese de que:
Tiene acceso a un dispositivo Azure Stack Edge Pro.
Ha activado un dispositivo Azure Stack Edge Pro como se describe en Activación de Azure Stack Edge Pro.
Ha habilitado el rol de proceso en el dispositivo. También se ha creado un clúster de Kubernetes en el dispositivo al configurar el proceso en el dispositivo según las instrucciones de Configuración del proceso en un dispositivo Azure Stack Edge Pro.
Tiene el punto de conexión de la API de Kubernetes de la página Dispositivo de la interfaz de usuario web local. Para obtener más información, consulte las instrucciones en Obtención de los puntos de conexión de Kubernetes.
Tiene acceso a un sistema cliente con un sistema operativo compatible. Si usa un cliente Windows, el sistema debe ejecutar PowerShell 5.0 o posterior para acceder al dispositivo.
- Si quiere extraer e insertar sus propias imágenes de contenedor, asegúrese de que el sistema tiene instalado el cliente de Docker. Si usa un cliente Windows, instale el escritorio de Docker en Windows.
Habilitación de un registro de contenedor como complemento
El primer paso es habilitar el registro de contenedor de Edge como complemento.
Conexión a la interfaz de PowerShell del dispositivo.
Para habilitar el registro de contenedor como complemento, escriba:
Set-HcsKubernetesContainerRegistry
Esta operación puede tardar varios minutos en completarse.
Esta es la salida de ejemplo de este comando:
[10.128.44.40]: PS>Set-HcsKubernetesContainerRegistry Operation completed successfully. Use Get-HcsKubernetesContainerRegistryInfo for credentials
Para obtener los detalles del registro de contenedor, escriba:
Get-HcsKubernetesContainerRegistryInfo
Esta es la salida de ejemplo de este comando:
[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
Anote el nombre de usuario y la contraseña de la salida de
Get-HcsKubernetesContainerRegistryInfo
. Estas credenciales se usan para iniciar sesión en el registro de contenedor de Edge mientras se insertan imágenes.
Administración de imágenes del registro de contenedor
Puede que quiera tener acceso al registro de contenedor desde fuera del dispositivo de Azure Stack Edge. También puede que quiera insertar o extraer imágenes en el registro.
Siga estos pasos para obtener acceso al registro de contenedor de Edge:
Obtenga los detalles del punto de conexión para el registro de contenedor de Edge.
En la interfaz de usuario local, vaya a Dispositivo.
Busque el punto de conexión del registro de contenedor de Edge.
Copie este punto de conexión y cree una entrada DNS correspondiente en el archivo
C:\Windows\System32\Drivers\etc\hosts
del cliente para conectarse al punto de conexión del registro de contenedor de Edge.<Dirección IP del nodo principal de Kubernetes><Punto de conexión del registro de contenedor de Edge>
Descargue el certificado de registro de contenedor de Edge desde la interfaz de usuario local.
En la interfaz de usuario local, vaya a Certificados.
Busque la entrada para el certificado de registro de contenedor de Edge. A la derecha de esta entrada, seleccione Descargar para descargar el certificado de registro de contenedor de Edge en el sistema cliente que usará para tener acceso al dispositivo.
Instale el certificado descargado en el cliente. Si usa un cliente Windows, siga estos pasos:
Seleccione el certificado y, en el Asistente para importar certificados, seleccione la ubicación del almacén como Máquina local.
Instale el certificado en la máquina local del almacén raíz de confianza.
Una vez instalado el certificado, reinicie el cliente de Docker en el sistema.
Inicie sesión en el registro de contenedor de Edge. Escriba:
docker login <Edge container registry endpoint> -u <username> -p <password>
Proporcione el punto de conexión del registro de contenedor de Edge en la página Dispositivos y el nombre de usuario y la contraseña que ha obtenido de la salida de
Get-HcsKubernetesContainerRegistryInfo
.Use los comandos de inserción o extracción de Docker para insertar o extraer imágenes de contenedor desde el registro de contenedor.
Extraiga una imagen de la imagen del registro de contenedor de Microsoft. Escriba:
docker pull <Full path to the container image in the Microsoft Container Registry>
Cree un alias de la imagen que extrajo con la ruta de acceso completa al registro.
docker tag <Path to the image in the Microsoft container registry> <Path to the image in the Edge container registry/Image name with tag>
Inserte la imagen en el registro.
docker push <Path to the image in the Edge container registry/Image name with tag>
Ejecute la imagen insertada en el registro.
docker run -it --rm -p 8080:80 <Path to the image in the Edge container registry/Image name with tag>
Esta es una salida de ejemplo de los comandos de inserción y extracción:
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>
Vaya a
http://localhost:8080
para ver el contenedor en ejecución. En este caso, verá el servidor web nginx en ejecución.Para detener y quitar el contenedor, presione
Control+C
.
Uso de imágenes de registro de contenedor de Edge a través de pods de Kubernetes
Ya puede implementar la imagen que insertó en el registro de contenedor de Edge desde dentro de los pods de Kubernetes.
Para implementar la imagen, debe configurar el acceso al clúster mediante kubectl. Cree un espacio de nombres y un usuario, conceda al usuario acceso al espacio de nombres y obtenga un archivo de configuración. Asegúrese de que puede conectarse a los pods de Kubernetes.
Siga todos los pasos que se indican en Conexión y administración de un clúster de Kubernetes mediante kubectl en un dispositivo de Azure Stack Edge Pro con GPU.
Esta es una salida de ejemplo de un espacio de nombres en el dispositivo desde el que el usuario puede tener acceso al clúster de 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>
Los secretos de extracción de imágenes ya están establecidos en todos los espacios de nombres de Kubernetes en el dispositivo. Puede obtener los secretos con el comando
get secrets
. Esta es una salida de ejemplo: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>
Implemente un pod en el espacio de nombres mediante kubectl. Use el siguiente
yaml
.Reemplace la imagen
<image-name>
por la imagen insertada en el registro de contenedor. Consulte los secretos de los espacios de nombres con imagePullSecrets con un nombre: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
Aplique la implementación en el espacio de nombres que creó con el comando de aplicación. Compruebe que el contenedor se está ejecutando. Esta es una salida de ejemplo:
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>
Eliminación de imágenes del registro de contenedor
El almacenamiento del registro de contenedor de Edge se hospeda en un recurso compartido local dentro del dispositivo de Azure Stack Edge Pro, que está limitado por el almacenamiento disponible en el dispositivo. Es su responsabilidad eliminar las imágenes de Docker no utilizadas del registro de contenedor mediante la API de Docker HTTP v2 (https://docs.docker.com/registry/spec/api/).
Para quitar una o varias imágenes de contenedor, siga estos pasos:
Establezca el nombre de la imagen en la imagen que quiere eliminar.
PS C:\WINDOWS\system32> $imageName="nginx"
Establezca el nombre de usuario y la contraseña del registro de contenedor como credencial de 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)
Enumere las etiquetas asociadas a la imagen.
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>
Enumere el hash asociado a la etiqueta que quiere eliminar. Utiliza $tags de la salida del comando anterior. Si tiene varias etiquetas, seleccione una de ellas y úsela en el siguiente comando.
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>
Elimine la imagen con el hash de 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
Después de eliminar las imágenes no utilizadas, un proceso que se ejecuta cada noche recupera automáticamente el espacio asociado a las imágenes sin referencia.