Condividi tramite


Abilitare il registro contenitori Edge nel dispositivo Azure Stack Edge Pro GPU

SI APPLICA A:Yes for Pro GPU SKUAzure Stack Edge Pro - GPUYes for Pro 2 SKUAzure Stack Edge Pro 2Yes for Pro R SKUAzure Stack Edge Pro RYes for Mini R SKUAzure 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 Hub Docker, privato o provider di servizi cloud gestiti, 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:

  1. Si ha accesso a un dispositivo Azure Stack Edge Pro.

  2. Aver attivato il dispositivo Azure Stack Edge Pro come descritto in Attivare il dispositivo Azure Stack Edge Pro.

  3. È 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.

  4. 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.

  5. Si ha accesso 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.

    1. Se si vuole 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.

  1. Connessione all'interfaccia di PowerShell del dispositivo.

  2. 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    
    
  3. 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
    
  4. 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:

  1. Ottenere i dettagli dell'endpoint per il registro contenitori di Edge.

    1. Nell'interfaccia utente locale del dispositivo passare a Dispositivo.

    2. Individuare l'endpoint del registro contenitori edge. Edge container registry endpoint on Device page

    3. Copiare questo endpoint e creare una voce DNS corrispondente nel C:\Windows\System32\Drivers\etc\hosts file del client per connettersi all'endpoint del registro contenitori Edge.

      <Indirizzo IP dell'endpoint del registro contenitori Edge del nodo><principale kubernetes>

      Add DNS entry for Edge container registry endpoint

  2. Scaricare il certificato del registro contenitori Edge dall'interfaccia utente locale.

    1. Nell'interfaccia utente locale del dispositivo passare a Certificati.

    2. Individuare la voce per il certificato del registro contenitori Edge. A destra di questa voce, selezionare download per scaricare il certificato del registro contenitori Edge nel sistema client che verrà usato per accedere al dispositivo.

      Download Edge container registry endpoint certificate

  3. Installare il certificato scaricato nel client. Se si usa un client Windows, seguire questa procedura:

    1. Selezionare il certificato e nell'Importazione guidata certificati selezionare Percorso archivio come Computer locale.

      Install certificate 1

    2. Installare il certificato nel computer locale nell'archivio radice attendibile.

      Install certificate 2

  4. Dopo aver installato il certificato, riavviare il client Docker nel sistema.

  5. 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.

  6. Usare i comandi docker push o pull per eseguire il push o il pull delle immagini del contenitore dal registro contenitori.

    1. 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>

    2. 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>

    3. Eseguire il push dell'immagine nel registro.

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

    4. 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>    
      
  7. Passare a http://localhost:8080 per visualizzare il contenitore in esecuzione. In questo caso, verrà visualizzato il server Web nginx in esecuzione.

    View the running container

    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.

  1. 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 di configurazione . Assicurarsi di potersi connettere ai pod Kubernetes.

    Seguire tutti i passaggi descritti in Connessione per 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>
    
  2. I segreti di pull delle immagini sono già impostati in tutti gli spazi dei nomi Kubernetes nel dispositivo. È possibile ottenere segreti usando il get secrets comando . 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>   
    
  3. Distribuire un pod nello spazio dei nomi usando kubectl. Usare il codice seguente yaml.

    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
    
  4. 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 di Registro Azure Container 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 DOcker HTTP v2 (https://docs.docker.com/registry/spec/api/).

Per rimuovere una o più immagini del contenitore, seguire questa procedura:

  1. Impostare il nome dell'immagine sull'immagine da eliminare.

    PS C:\WINDOWS\system32> $imageName="nginx"    
    
  2. 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)    
    
  3. 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>    
    
  4. 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>    
    
  5. 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.

Passaggi successivi