Habilitar o registro de contêiner de Borda em seu dispositivo de GPU 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 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:
Você tem acesso a um dispositivo Azure Stack Edge Pro.
Você ativou seu 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 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.
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.
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.
- 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.
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
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
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:
Obtenha os detalhes do ponto de extremidade para o registro do contêiner de Borda.
Na interface do usuário local do dispositivo, vá para Dispositivo.
Localize o ponto de extremidade do Registro do contêiner de Borda.
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>
Baixe o certificado de registro do contêiner de borda da interface do usuário local.
Na interface do usuário local do dispositivo, vá para Certificados.
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.
Instale o certificado baixado no cliente. Se estiver a utilizar um cliente Windows, siga estes passos:
Selecione o certificado e, no Assistente para Importação de Certificados, selecione o local da loja como Máquina local.
Instale o certificado em sua máquina local no armazenamento raiz confiável.
Depois que o certificado for instalado, reinicie o cliente Docker no sistema.
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
.Use os comandos docker push ou pull para enviar ou extrair imagens de contêiner do registro de contêiner.
Puxe uma imagem 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 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>
Envie a imagem para o seu registo.
docker push <Path to the image in the Edge container registry/Image name with tag>
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>
Navegue até
http://localhost:8080
para exibir o contêiner em execução. Neste caso, você verá o servidor web nginx 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.
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>
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>
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
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:
Defina o nome da imagem para a imagem que pretende eliminar.
PS C:\WINDOWS\system32> $imageName="nginx"
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)
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>
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>
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.