Habilitar um registro de contêiner do Edge no seu dispositivo GPU do Azure Stack Edge Pro
APLICA-SE A: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro 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:
Você tem acesso a um dispositivo Azure Stack Edge Pro.
Você ativou o dispositivo Azure Stack Edge Pro conforme descrito em Ativar o Azure Stack Edge Pro.
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.
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.
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.
- 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.
Conecte-se à interface do PowerShell do dispositivo.
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
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
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:
Obtenha os detalhes do ponto de extremidade para o registro de contêiner do Edge.
Na IU local do dispositivo, acesse a página Dispositivo.
Localize o ponto de extremidade do registro de contêiner do Edge.
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>
Baixe o certificado de registro de contêiner do Edge da interface do usuário local.
Na IU local do dispositivo, acesse a página Certificados.
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.
Instale o certificado baixado no cliente. Se estiver usando um cliente Windows, siga estas etapas:
Selecione o certificado e, no Assistente para importação de certificados, selecione o local de armazenamento como Computador local.
Instale o certificado em seu computador local no repositório de raiz confiável.
Depois que o certificado for instalado, reinicie o cliente do Docker no sistema.
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
.Use os comandos push ou pull do Docker para efetuar push ou pull de imagens de contêiner do registro de contêiner.
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>
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>
Envie a imagem por push ao registro.
docker push <Path to the image in the Edge container registry/Image name with tag>
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>
Navegue até
http://localhost:8080
para exibir o contêiner em execução. Nesse caso, você verá o servidor web nginx 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.
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>
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>
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
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:
Defina o nome da imagem para a imagem que você deseja excluir.
PS C:\WINDOWS\system32> $imageName="nginx"
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)
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>
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>
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.