Partilhar via


Habilitar o registro de contêiner de Borda em seu dispositivo de GPU Azure Stack Edge Pro

APLICA-SE A: Sim para Pro GPU SKUAzure Stack Edge Pro - GPUSim para Pro 2 SKUAzure Stack Edge Pro 2Sim para Pro R SKUAzure Stack Edge Pro RSim para Mini R SKUAzure 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 detalha como enviar uma imagem de um registro de origem, neste caso, o registro Microsoft Container, para o registro no dispositivo Azure Stack Edge, o registro de contêiner de Borda.

Sobre o registro de contêiner de borda

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, privados ou gerenciados por provedores de nuvem, como o Registro de Contêiner do Azure. Para obter mais informações, consulte Sobre registros, repositórios e imagens.

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

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 de Borda uma vez. Todos os aplicativos de Borda podem usar o registro de contêiner de Borda para implantações subsequentes.

Pré-requisitos

Antes de começar, certifique-se de que:

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

  2. Você ativou seu 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 no dispositivo quando você configurou a computação no dispositivo de acordo com as instruções em Configurar computação em seu dispositivo Azure Stack Edge Pro.

  4. Você tem o ponto de extremidade da API do Kubernetes na página Dispositivo da interface do usuário da Web local. Para obter mais informações, consulte as instruções em Obter ponto de extremidade da API do Kubernetes.

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

    1. Se você quiser puxar e enviar suas próprias imagens de contêiner, certifique-se de que o sistema tenha 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 de Borda 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

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

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

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

    Get-HcsKubernetesContainerRegistryInfo

    Aqui está o exemplo 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 na saída do Get-HcsKubernetesContainerRegistryInfo. Essas credenciais são usadas para entrar no registro de contêiner de Borda enquanto envia imagens.

Gerenciar imagens de registro de contêiner

Talvez você queira acessar o registro de contêiner de fora do seu dispositivo Azure Stack Edge. Você também pode querer enviar ou extrair imagens no registro.

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

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

    1. Na interface do usuário local do dispositivo, vá para Dispositivo.

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

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

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

      Adicionar entrada DNS para o ponto de extremidade do Registro do contêiner de Borda

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

    1. Na interface do usuário local do dispositivo, vá para Certificados.

    2. Localize a entrada para o certificado de registro do contêiner de Borda. À direita desta entrada, selecione Download para baixar o certificado de registro de contêiner de borda em seu sistema cliente que você usará para acessar seu dispositivo.

      Baixar certificado de ponto de extremidade do Registro de contêiner de borda

  3. Instale o certificado baixado no cliente. Se estiver a utilizar um cliente Windows, siga estes passos:

    1. Selecione o certificado e, no Assistente para Importação de Certificados, selecione o local da loja como Máquina local.

      Instalar certificado 1

    2. Instale o certificado em sua máquina local no armazenamento raiz confiável.

      Instalar certificado 2

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

  5. Entre no registro de contêiner de Borda. Tipo:

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

    Forneça o ponto de extremidade do Registro do contêiner de Borda na página Dispositivos e o nome de usuário e a senha que você obteve da saída do Get-HcsKubernetesContainerRegistryInfo.

  6. Use os comandos docker push ou pull para enviar ou extrair imagens de contêiner do registro de contêiner.

    1. Puxe uma imagem 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 que você puxou com o caminho totalmente qualificado para o seu 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 para o seu registo.

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

    4. Execute a imagem que você enviou para o seu 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. Neste caso, você verá o servidor web nginx em execução.

    Exibir o contêiner em execução

    Para parar e remover o recipiente, pressione Control+C.

Usar imagens de registro de contêiner do Edge por meio de pods do Kubernetes

Agora você pode implantar a imagem que você enviou em seu registro de contêiner Edge de dentro dos pods do Kubernetes.

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

    Siga todas as etapas em Conectar-se e gerenciar um cluster Kubernetes via kubectl em seu dispositivo GPU Azure Stack Edge Pro.

    Aqui está uma saída de exemplo 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 no seu dispositivo. Você pode obter segredos usando o get secrets comando. Eis uma saída de exemplo:

    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 para o registro do contêiner. Consulte 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. Eis uma saída de exemplo:

    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 de Borda é hospedado em um compartilhamento local em seu dispositivo Azure Stack Edge Pro, que é limitado pelo armazenamento disponível no dispositivo. É sua responsabilidade excluir imagens docker não utilizadas do registro de contêiner usando Docker HTTP v2 API (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 pretende eliminar.

    PS C:\WINDOWS\system32> $imageName="nginx"    
    
  2. Definir o nome de usuário e a senha do registro do contêiner como uma credencial 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 tags 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 resumo associado à tag que você deseja excluir. Isso usa $tags da saída do comando acima. Se você tiver várias tags, 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. Exclua a imagem usando o resumo da 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    
    

Depois de eliminar as imagens não utilizadas, o espaço associado às imagens não referenciadas é automaticamente recuperado por um processo que é executado todas as noites.

Próximos passos