Abilitare il registro contenitori Edge nel dispositivo Azure Stack Edge Pro GPU
SI APPLICA A: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
Questo articolo descrive come abilitare il registro contenitori Edge e usarlo dall'interno del cluster Kubernetes nel dispositivo Azure Stack Edge Pro. L'esempio usato nell'articolo illustra in dettaglio come eseguire il push di un'immagine da un registro di origine, in questo caso registro Contenitori Microsoft, nel registro nel dispositivo Azure Stack Edge, nel registro contenitori Edge.
Informazioni sul registro contenitori Edge
Le applicazioni di calcolo in contenitori vengono eseguite nelle immagini del contenitore e queste immagini vengono archiviate nei registri. I registri possono essere pubblici, ad esempio Docker Hub, il provider privato o cloud gestito, ad esempio Registro Azure Container. Per altre informazioni, vedere Informazioni su registri, repository e immagini.
Un registro contenitori Edge fornisce un repository in Edge nel dispositivo Azure Stack Edge Pro. È possibile usare questo registro per archiviare e gestire le immagini del contenitore privato.
In un ambiente multinodo è possibile scaricare ed eseguire il push delle immagini del contenitore nel registro contenitori Edge una sola volta. Tutte le applicazioni Edge possono usare il registro contenitori Edge per le distribuzioni successive.
Prerequisiti
Prima di iniziare, verificare che:
Si ha accesso a un dispositivo Azure Stack Edge Pro.
Aver attivato il dispositivo Azure Stack Edge Pro come descritto in Attivare il dispositivo Azure Stack Edge Pro.
È stato abilitato il ruolo di calcolo nel dispositivo. È stato creato anche un cluster Kubernetes nel dispositivo quando è stato configurato il calcolo nel dispositivo in base alle istruzioni riportate in Configurare le risorse di calcolo nel dispositivo Azure Stack Edge Pro.
L'endpoint dell'API Kubernetes è disponibile nella pagina Dispositivo dell'interfaccia utente Web locale. Per altre informazioni, vedere le istruzioni in Ottenere l'endpoint dell'API Kubernetes.
È possibile accedere a un sistema client con un sistema operativo supportato. Se si usa un client Windows, il sistema deve eseguire PowerShell 5.0 o versione successiva per accedere al dispositivo.
- Per eseguire il pull e il push delle immagini del contenitore, assicurarsi che il sistema abbia installato il client Docker. Se si usa un client Windows, Installare Docker Desktop in Windows.
Abilitare il registro contenitori come componente aggiuntivo
Il primo passaggio consiste nell'abilitare il registro contenitori di Edge come componente aggiuntivo.
Per abilitare il registro contenitori come componente aggiuntivo, digitare:
Set-HcsKubernetesContainerRegistry
Il completamento dell'operazione può richiedere alcuni minuti.
Di seguito è riportato l'output di esempio di questo comando:
[10.128.44.40]: PS>Set-HcsKubernetesContainerRegistry Operation completed successfully. Use Get-HcsKubernetesContainerRegistryInfo for credentials
Per ottenere i dettagli del registro contenitori, digitare:
Get-HcsKubernetesContainerRegistryInfo
Di seguito è riportato l'esempio di questo 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
Prendere nota del nome utente e della password dall'output di
Get-HcsKubernetesContainerRegistryInfo
. Queste credenziali vengono usate per accedere al registro contenitori di Edge durante il push delle immagini.
Gestire le immagini del registro contenitori
È possibile accedere al registro contenitori dall'esterno del dispositivo Azure Stack Edge. È anche possibile eseguire il push o il pull delle immagini nel Registro di sistema.
Per accedere al registro contenitori di Edge, seguire questa procedura:
Ottenere i dettagli dell'endpoint per il registro contenitori di Edge.
Nell'interfaccia utente locale del dispositivo passare a Dispositivo.
Individuare l'endpoint del registro contenitori di Edge.
Copiare questo endpoint e creare una voce DNS corrispondente nel file
C:\Windows\System32\Drivers\etc\hosts
del client per connettersi all'endpoint del registro contenitori Edge.<Indirizzo IP del nodo principale Kubernetes><Endpoint del registro contenitori Edge>
Scaricare il certificato del registro contenitori Edge dall'interfaccia utente locale.
Nell'interfaccia utente locale del dispositivo passare a Certificati.
Individuare la voce Certificato del registro contenitori Edge. A destra di questa voce, selezionare Scarica per scaricare il certificato del registro contenitori Edge nel sistema client che verrà usato per accedere al dispositivo.
Installare il certificato scaricato nel client. Se si usa un client Windows, seguire questa procedura:
Selezionare il certificato e, in Importazione guidata certificati, selezionare il percorso di archiviazione come computer locale.
Consente di installare il certificato nel computer locale nell'archivio radice attendibile.
Dopo aver installato il certificato, riavviare il client Docker nel sistema.
Accedere al registro contenitori edge. Tipo:
docker login <Edge container registry endpoint> -u <username> -p <password>
Specificare l'endpoint del registro contenitori Edge dalla pagina Dispositivi e il nome utente e la password ottenuti dall'output di
Get-HcsKubernetesContainerRegistryInfo
.Usare i comandi docker push o pull per eseguire il push o il pull delle immagini del contenitore dal registro contenitori.
Eseguire il pull di un'immagine dall'immagine del Registro Azure Container. Tipo:
docker pull <Full path to the container image in the Microsoft Container Registry>
Creare un alias dell'immagine estratta con il percorso completo del 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>
Eseguire il push dell'immagine nel registro.
docker push <Path to the image in the Edge container registry/Image name with tag>
Eseguire l'immagine di cui è stato eseguito il push nel Registro di sistema.
docker run -it --rm -p 8080:80 <Path to the image in the Edge container registry/Image name with tag>
Di seguito è riportato un output di esempio dei comandi pull e 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>
Passare a
http://localhost:8080
per visualizzare il contenitore in esecuzione. In questo caso, verrà visualizzato il server Web nginx in esecuzione.Per arrestare e rimuovere il contenitore, premere
Control+C
.
Usare le immagini del registro contenitori di Edge tramite pod Kubernetes
È ora possibile distribuire l'immagine di cui è stato eseguito il push nel registro contenitori edge dai pod Kubernetes.
Per distribuire l'immagine, è necessario configurare l'accesso al cluster tramite kubectl. Creare uno spazio dei nomi, un utente, concedere all'utente l'accesso allo spazio dei nomi e ottenere un file config. Assicurarsi di potersi connettere ai pod Kubernetes.
Seguire tutti i passaggi descritti in Connettersi a e gestire un cluster Kubernetes tramite kubectl nel dispositivo Azure Stack Edge Pro GPU.
Ecco un output di esempio per uno spazio dei nomi nel dispositivo da cui l'utente può accedere al cluster 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>
I segreti di pull delle immagini sono già impostati in tutti gli spazi dei nomi Kubernetes nel dispositivo. È possibile ottenere segreti usando il comando
get secrets
. Di seguito è riportato un output di esempio: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>
Distribuire un pod nello spazio dei nomi usando kubectl. Usare
yaml
seguente.Sostituire l'immagine
<image-name>
con l'immagine di cui è stato eseguito il push nel registro contenitori. Fare riferimento ai segreti negli spazi dei nomi usando imagePullSecrets con un nome: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
Applicare la distribuzione nello spazio dei nomi creato usando il comando apply. Verificare che il contenitore sia in esecuzione. Di seguito è riportato un output di esempio:
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>
Eliminare le immagini del registro contenitori
L'archiviazione del Registro contenitori di Edge è ospitata in una condivisione locale all'interno del dispositivo Azure Stack Edge Pro, limitata dall'archiviazione disponibile nel dispositivo. È responsabilità dell'utente eliminare le immagini Docker inutilizzate dal registro contenitori usando l'API HTTP v2 docker (https://docs.docker.com/registry/spec/api/).
Per rimuovere una o più immagini del contenitore, seguire questa procedura:
Impostare il nome dell'immagine sull'immagine da eliminare.
PS C:\WINDOWS\system32> $imageName="nginx"
Impostare il nome utente e la password del registro contenitori come credenziali 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)
Elencare i tag associati all'immagine
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>
Elencare il digest associato al tag da eliminare. Viene usato $tags dall'output del comando precedente. Se sono presenti più tag, selezionarli e usarli nel comando successivo.
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>
Eliminare l'immagine usando il digest dell'immagine: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
Dopo aver eliminato le immagini inutilizzate, lo spazio associato alle immagini senza riferimenti viene recuperato automaticamente da un processo che viene eseguito di notte.