在 Azure Stack Edge Pro GPU 裝置上啟用 Edge 容器登錄
適用於: Azure Stack Edge Pro - GPUAzure Stack Edge Pro 2Azure Stack Edge Pro RAzure Stack Edge Mini R
本文說明如何啟用 Edge 容器登錄,並從 Azure Stack Edge Pro 裝置上的 Kubernetes 叢集中使用。 本文中使用的範例詳細說明如何將映像從來源登錄 (在此範例中為 Microsoft Container Registry) 推送至 Azure Stack Edge 裝置上的登錄,也就是 Edge 容器登錄。
關於 Edge 容器登錄
容器化計算應用程式會在容器映像上執行,而這些映像會儲存在登錄中。 登錄可以為公用 (如 Docker Hub)、私人或由雲端提供者管理 (如 Azure Container Registry)。 如需詳細資訊,請參閱關於登錄、存放庫和映像。
Edge 容器登錄會在 Azure Stack Edge Pro 裝置的 Edge 上提供存放庫。 您可以使用此登錄來儲存和管理私人容器映像。
在多節點環境中,您可以下載容器映像並將其推送至 Edge 容器登錄一次。 所有 Edge 應用程式都可以使用 Edge 容器登錄進行後續部署。
必要條件
在您開始前,請確定:
您已存取 Azure Stack Edge Pro 裝置。
您已依照啟動 Azure Stack Edge Pro 中的說明來啟動 Azure Stack Edge Pro 裝置。
您已在裝置上啟用計算角色。 當您依照在 Azure Stack Edge Pro 裝置上設定計算的指示在裝置上設定計算時,將會一併在裝置上建立 Kubernetes 叢集。
您在本機 Web UI 的 [裝置] 頁面具有 Kubernetes API 端點。 如需詳細資訊,請參閱取得 Kubernetes API 端點的指示。
您可以使用支援的作業系統來存取用戶端系統。 如果使用 Windows 用戶端,系統應該執行 PowerShell 5.0 或更新版本來存取該裝置。
- 如果您想要提取並推送自己的容器映像,請確定系統已安裝 Docker 用戶端。 如果使用 Windows 用戶端,請在 Windows 上安裝 Docker Desktop。
啟用容器登錄作為附加元件
第一步是啟用 Edge 容器登錄作為附加元件。
若要將容器登錄啟用為附加元件,請輸入:
Set-HcsKubernetesContainerRegistry
此作業可能需要幾分鐘的時間才能完成。
以下是此命令的範例輸出:
[10.128.44.40]: PS>Set-HcsKubernetesContainerRegistry Operation completed successfully. Use Get-HcsKubernetesContainerRegistryInfo for credentials
若要取得容器登錄詳細資料,請輸入:
Get-HcsKubernetesContainerRegistryInfo
以下是此命令的範例輸出:
[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
記下輸出
Get-HcsKubernetesContainerRegistryInfo
的使用者名稱和密碼。 這些認證可用來在推送映像時登入 Edge 容器登錄。
管理容器登錄映像
您可能會想從 Azure Stack Edge 裝置外部存取容器登錄。 您可能也想在登錄中推送或提取映像。
請遵循下列步驟來存取 Edge 容器登錄:
取得 Edge 容器登錄的端點詳細資料。
在裝置的本機 UI 中,前往 [裝置]。
找出 [Edge 容器登錄端點]。
複製此端點,並將對應的 DNS 項目複製到用戶端的
C:\Windows\System32\Drivers\etc\hosts
檔案中,以連線到 Edge 容器登錄端點。<Kubernetes 主要節點的 IP 位址><Edge 容器登錄端點>
從本機 UI 下載 Edge 容器登錄憑證。
在裝置的本機 UI 中,移至 [憑證] 頁面。
找出 [Edge 容器登錄憑證] 的項目。 在此項目的右側,選取 [下載] 以下載用戶端系統上您將用來存取裝置的 Edge 容器登錄憑證。
在用戶端上安裝下載的憑證。 如果使用 Windows 用戶端,請遵循下列步驟:
選取憑證,然後在 [憑證匯入精靈] 中,選取 [本機電腦] 作為儲存位置。
在本機電腦的受信任根存放區中安裝憑證。
安裝憑證之後,請在您的系統上重新啟動 Docker 用戶端。
登入 Edge 容器登錄。 輸入:
docker login <Edge container registry endpoint> -u <username> -p <password>
從 [裝置] 頁面提供 Edge 容器登錄端點,以及您從
Get-HcsKubernetesContainerRegistryInfo
的輸出取得的使用者名稱和密碼。使用 docker push 或 pull 命令,以便從容器登錄推送或提取容器映像。
從 Microsoft Container Registry 映像提取映像。 輸入:
docker pull <Full path to the container image in the Microsoft Container Registry>
以登錄的完整路徑建立映像的別名。
docker tag <Path to the image in the Microsoft container registry> <Path to the image in the Edge container registry/Image name with tag>
將映像推送至您的登錄。
docker push <Path to the image in the Edge container registry/Image name with tag>
執行推送至登錄的映像。
docker run -it --rm -p 8080:80 <Path to the image in the Edge container registry/Image name with tag>
以下是 pull 和 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>
瀏覽至
http://localhost:8080
以檢視執行中的容器。 在此情況下,您會看到 nginx 網頁伺服器正在執行。若要停止並移除該容器,請按
Control+C
。
透過 Kubernetes Pod 使用 Edge 容器登錄映像
您現在可以在 Kubernetes Pod 內部署您在 Edge 容器登錄中推送的映像。
若要部署映像,您必須透過 kubectl 設定叢集存取。 建立命名空間、使用者、授與使用者命名空間的存取權,並取得設定檔。 確認您可以連線至 Kubernetes Pod。
遵循在您的 Azure Stack Edge Pro GPU 裝置上透過 kubectl 連線至 Kubernetes 叢集並加以管理中的所有步驟。
以下是裝置上命名空間的範例輸出,使用者可以從該處存取 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>
系統已在裝置上的所有 Kubernetes 命名空間中設定映像提取祕密。 您可以使用
get secrets
命令來取得祕密。 以下是範例輸出: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>
使用 kubectl 將 Pod 部署至您的命名空間。 使用下列
yaml
。將映像:
<image-name>
取代為推送至容器登錄的映像。 使用含名稱:ase-ecr-credentials
的 imagePullSecrets 參考命名空間中的祕密。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
使用 apply 命令在您建立的命名空間中套用部署。 確認容器正在執行。 以下是範例輸出:
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>
刪除容器登錄映像
Edge Container Registry 儲存體裝載於 Azure Stack Edge Pro 裝置內的本機共用上,且受限於裝置上的可用儲存體。 您須負責使用 Docker HTTP v2 API (https://docs.docker.com/registry/spec/api/) 從容器登錄中刪除未使用的 Docker 映像。
若要移除一或多個容器映像,請遵循下列步驟:
將映像名稱設定為您想要刪除的映像。
PS C:\WINDOWS\system32> $imageName="nginx"
將容器登錄的使用者名稱和密碼設定為 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)
列出與映像相關的標籤
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>
列出與您想要刪除之標籤相關的雜湊。 這會用到上述命令輸出中的標籤。 如果您有多個標籤,請選取其中一個標籤後,在下個命令中使用。
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>
使用 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
刪除未使用的映像之後,與未參考映像相關的空間會自動由夜間執行的流程回收。