Compartilhar via


Habilitar um registro de contêiner do Edge no seu dispositivo GPU do Azure Stack Edge Pro

APLICA-SE A: Sim, ao SKU do Pro GPUAzure Stack Edge Pro - GPUSim, ao SKU do Pro 2Azure Stack Edge Pro 2Sim, ao SKU do Pro RAzure Stack Edge Pro RSim, ao SKU do Mini RAzure Stack Edge Mini R

Este artigo descreve como habilitar o registro de contêiner de borda e usá-lo de dentro do cluster Kubernetes em seu dispositivo Azure Stack Edge Pro. O exemplo usado no artigo fornece detalhes sobre como enviar por push uma imagem de um registro de origem, nesse caso, o registro de contêiner da Microsoft, para o registro no dispositivo Azure Stack Edge, o registro de contêiner do Edge.

Sobre o Registro de contêiner do Edge

Os aplicativos de computação em contêineres são executados em imagens de contêiner e essas imagens são armazenadas em registros. Os registros podem ser públicos, como o Docker Hub, privado ou o provedor de nuvem gerenciado, como o Registro de Contêiner do Azure. Para obter mais informações, confira Sobre registros, repositórios e imagens.

Um registro de contêiner de borda fornece um repositório no Edge, em seu dispositivo Azure Stack Edge Pro. Você pode usar esse registro para armazenar e gerenciar suas imagens de contêiner privadas.

Em um ambiente de vários nós, as imagens de contêiner podem ser baixadas e enviadas por push para o registro de contêiner do Edge uma vez. Todos os aplicativos de borda podem usar o registro de contêiner do Edge para implantações subsequentes.

Pré-requisitos

Antes de começar, verifique se:

  1. Você tem acesso a um dispositivo Azure Stack Edge Pro.

  2. Você ativou o dispositivo Azure Stack Edge Pro conforme descrito em Ativar o Azure Stack Edge Pro.

  3. Você habilitou a função de computação no dispositivo. Um cluster Kubernetes também foi criado ao configurar a função de computação no dispositivo, conforme as instruções em Configurar a função de Computação no Azure Stack Edge Pro.

  4. O ponto de extremidade da API do Kubernetes é da página do Dispositivo da IU da Web local. Para obter mais informações, confira as instruções em Obter pontos de extremidade da API do Kubernetes.

  5. Você tem acesso a um sistema cliente com um Sistema operacional com suporte. Se estiver usando um cliente Windows, o sistema deverá executar o PowerShell 5.0 ou posterior para acessar o dispositivo.

    1. Se você quiser efetuar pull e enviar por push suas próprias imagens de contêiner, verifique se o sistema tem o cliente Docker instalado. Se estiver usando um cliente Windows, Instale o Docker Desktop no Windows.

Habilitar o registro de contêiner como complemento

A primeira etapa é habilitar o registro de contêiner do Edge como um complemento.

  1. Conecte-se à interface do PowerShell do dispositivo.

  2. Para habilitar o registro de contêiner como um complemento, digite:

    Set-HcsKubernetesContainerRegistry

    Essa operação pode levar vários minutos para ser concluída.

    Aqui está a amostra de saída deste comando:

    [10.128.44.40]: PS>Set-HcsKubernetesContainerRegistry
    Operation completed successfully. Use Get-HcsKubernetesContainerRegistryInfo for credentials    
    
  3. Para obter os detalhes do registro de contêiner, digite:

    Get-HcsKubernetesContainerRegistryInfo

    Aqui está a amostra fora deste 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. Anote o nome de usuário e a senha da saída de Get-HcsKubernetesContainerRegistryInfo. Essas credenciais são usadas para entrar no registro de contêiner do Edge ao enviar imagens por push.

Gerenciar imagens do registro de contêiner

Talvez você queira acessar o registro de contêiner fora do seu dispositivo Azure Stack Edge. Você também poderá querer enviar por push ou efetuar pull de imagens no registro.

Siga estas etapas para acessar o registro de contêiner do Edge:

  1. Obtenha os detalhes do ponto de extremidade para o registro de contêiner do Edge.

    1. Na IU local do dispositivo, acesse a página Dispositivo.

    2. Localize o ponto de extremidade do registro de contêiner do Edge. Ponto de extremidade do registro de contêiner do Edge na página Dispositivo

    3. Copie esse ponto de extremidade e crie uma entrada DNS correspondente no arquivo C:\Windows\System32\Drivers\etc\hosts do cliente para se conectar ao ponto de extremidade do registro de contêiner do Edge.

      <Endereço IP do nó principal do Kubernetes><Ponto de extremidade do registro de contêiner do Edge>

      Adicionar entrada DNS para o ponto de extremidade de registro de contêiner do Edge

  2. Baixe o certificado de registro de contêiner do Edge da interface do usuário local.

    1. Na IU local do dispositivo, acesse a página Certificados.

    2. Localize a entrada para o Certificado de registro de contêiner do Edge. À direita dessa entrada, selecione o Download para baixar o certificado de registro de contêiner do Edge no sistema cliente que você usará para acessar seu dispositivo.

      Baixar certificado do ponto de extremidade do registro de contêiner do Edge

  3. Instale o certificado baixado no cliente. Se estiver usando um cliente Windows, siga estas etapas:

    1. Selecione o certificado e, no Assistente para importação de certificados, selecione o local de armazenamento como Computador local.

      Instalar certificado 1

    2. Instale o certificado em seu computador local no repositório de raiz confiável.

      Instalar certificado 2

  4. Depois que o certificado for instalado, reinicie o cliente do Docker no sistema.

  5. Entre no registro de contêiner do Edge. Tipo:

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

    Forneça o ponto de extremidade do registro de contêiner do Edge na página Dispositivos e o nome de usuário e a senha obtidos da saída de Get-HcsKubernetesContainerRegistryInfo.

  6. Use os comandos push ou pull do Docker para efetuar push ou pull de imagens de contêiner do registro de contêiner.

    1. Efetuar pull de uma imagem a partir da imagem do Microsoft Container Registry. Tipo:

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

    2. Crie um alias da imagem da qual você efetuou pull com o caminho totalmente qualificado para o 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. Envie a imagem por push ao registro.

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

    4. Execute a imagem enviada por push ao registro.

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

      Aqui está um exemplo de saída dos comandos 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. Navegue até http://localhost:8080 para exibir o contêiner em execução. Nesse caso, você verá o servidor web nginx em execução.

    Exibir o contêiner em execução

    Para parar e remover o contêiner, pressione Control+C.

Usar imagens do registro de contêiner do Edge via pods do Kubernetes

Agora você pode implantar a imagem enviada por push no registro de contêiner do Edge de dentro dos pods Kubernetes.

  1. Para implantar a imagem, você precisa configurar o acesso ao cluster via kubectl. Crie um namespace, um usuário, conceda acesso de usuário ao namespace e obtenha um arquivo de configuração. Verifique se você pode se conectar aos pods do Kubernetes.

    Siga todas as etapas em Conectar-se a um cluster do Kubernetes e gerenciá-lo por meio do kubectl em seu dispositivo de GPU do Azure Stack Edge Pro.

    Aqui está um exemplo de saída para um namespace em seu dispositivo de onde o usuário pode acessar o cluster do 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. Os segredos de pull de imagem já estão definidos em todos os namespaces do Kubernetes em seu dispositivo. Você pode criar um usando o comando get secrets. Aqui está uma amostra de saída:

    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. Implante um pod em seu namespace usando kubectl. Use o seguinte yaml.

    Substitua a imagem: <image-name> pela imagem enviada por push ao registro de contêiner. Confira os segredos em seus namespaces usando imagePullSecrets com um 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. Aplique a implantação no namespace que você criou usando o comando apply. Verifique se o contêiner está em execução. Aqui está uma amostra de saída:

    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>
    

Excluir imagens do registro de contêiner

O armazenamento do registro de contêiner do Edge é hospedado em um compartilhamento local dentro de seu dispositivo Azure Stack Edge Pro, que é limitado pelo armazenamento disponível no dispositivo. É sua responsabilidade excluir imagens não utilizadas do Docker do registro de contêiner usando a API HTTP v2 do Docker (https://docs.docker.com/registry/spec/api/).

Para remover uma ou mais imagens de contêiner, siga estas etapas:

  1. Defina o nome da imagem para a imagem que você deseja excluir.

    PS C:\WINDOWS\system32> $imageName="nginx"    
    
  2. Definir o nome de usuário e a senha do registro de contêiner como uma credencial do 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. Listar as marcas associadas à imagem

    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. Liste o hash associado à marca que você deseja excluir. Isso usa $tags da saída do comando acima. Se você tiver várias marcas, selecione uma delas e use no próximo 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>    
    
  5. Excluir a imagem usando o hash da imagem:marca

    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    
    

Depois de excluir as imagens não usadas, o espaço associado às imagens não referenciadas é automaticamente recuperado por um processo que é executado à noite.

Próximas etapas