共用方式為


在 Azure Stack Edge Pro GPU 裝置上啟用 Edge 容器登錄

適用於: 是,適用於 Pro GPU SKUAzure Stack Edge Pro - GPU是,適用於 Pro 2 SKUAzure Stack Edge Pro 2是,適用於 Pro R SKUAzure Stack Edge Pro R是,適用於 Mini R SKUAzure 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 容器登錄進行後續部署。

必要條件

在您開始前,請確定:

  1. 您已存取 Azure Stack Edge Pro 裝置。

  2. 您已依照啟動 Azure Stack Edge Pro 中的說明來啟動 Azure Stack Edge Pro 裝置。

  3. 您已在裝置上啟用計算角色。 當您依照在 Azure Stack Edge Pro 裝置上設定計算的指示在裝置上設定計算時,將會一併在裝置上建立 Kubernetes 叢集。

  4. 您在本機 Web UI 的 [裝置] 頁面具有 Kubernetes API 端點。 如需詳細資訊,請參閱取得 Kubernetes API 端點的指示。

  5. 您可以使用支援的作業系統來存取用戶端系統。 如果使用 Windows 用戶端,系統應該執行 PowerShell 5.0 或更新版本來存取該裝置。

    1. 如果您想要提取並推送自己的容器映像,請確定系統已安裝 Docker 用戶端。 如果使用 Windows 用戶端,請在 Windows 上安裝 Docker Desktop

啟用容器登錄作為附加元件

第一步是啟用 Edge 容器登錄作為附加元件。

  1. 連線至裝置的 PowerShell 介面

  2. 若要將容器登錄啟用為附加元件,請輸入:

    Set-HcsKubernetesContainerRegistry

    此作業可能需要幾分鐘的時間才能完成。

    以下是此命令的範例輸出:

    [10.128.44.40]: PS>Set-HcsKubernetesContainerRegistry
    Operation completed successfully. Use Get-HcsKubernetesContainerRegistryInfo for credentials    
    
  3. 若要取得容器登錄詳細資料,請輸入:

    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
    
  4. 記下輸出 Get-HcsKubernetesContainerRegistryInfo 的使用者名稱和密碼。 這些認證可用來在推送映像時登入 Edge 容器登錄。

管理容器登錄映像

您可能會想從 Azure Stack Edge 裝置外部存取容器登錄。 您可能也想在登錄中推送或提取映像。

請遵循下列步驟來存取 Edge 容器登錄:

  1. 取得 Edge 容器登錄的端點詳細資料。

    1. 在裝置的本機 UI 中,前往 [裝置]

    2. 找出 [Edge 容器登錄端點][裝置] 頁面上的 Edge 容器登錄端點

    3. 複製此端點,並將對應的 DNS 項目複製到用戶端的 C:\Windows\System32\Drivers\etc\hosts 檔案中,以連線到 Edge 容器登錄端點。

      <Kubernetes 主要節點的 IP 位址><Edge 容器登錄端點>

      新增 Edge 容器登錄端點的 DNS 項目

  2. 從本機 UI 下載 Edge 容器登錄憑證。

    1. 在裝置的本機 UI 中,移至 [憑證] 頁面。

    2. 找出 [Edge 容器登錄憑證] 的項目。 在此項目的右側,選取 [下載] 以下載用戶端系統上您將用來存取裝置的 Edge 容器登錄憑證。

      下載 Edge 容器登錄端點憑證

  3. 在用戶端上安裝下載的憑證。 如果使用 Windows 用戶端,請遵循下列步驟:

    1. 選取憑證,然後在 [憑證匯入精靈] 中,選取 [本機電腦] 作為儲存位置。

      安裝憑證 1

    2. 在本機電腦的受信任根存放區中安裝憑證。

      安裝憑證 2

  4. 安裝憑證之後,請在您的系統上重新啟動 Docker 用戶端。

  5. 登入 Edge 容器登錄。 輸入:

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

    從 [裝置] 頁面提供 Edge 容器登錄端點,以及您從 Get-HcsKubernetesContainerRegistryInfo 的輸出取得的使用者名稱和密碼。

  6. 使用 docker push 或 pull 命令,以便從容器登錄推送或提取容器映像。

    1. 從 Microsoft Container Registry 映像提取映像。 輸入:

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

    2. 以登錄的完整路徑建立映像的別名。

      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. 將映像推送至您的登錄。

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

    4. 執行推送至登錄的映像。

      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>    
      
  7. 瀏覽至 http://localhost:8080 以檢視執行中的容器。 在此情況下,您會看到 nginx 網頁伺服器正在執行。

    檢視執行中的容器

    若要停止並移除該容器,請按 Control+C

透過 Kubernetes Pod 使用 Edge 容器登錄映像

您現在可以在 Kubernetes Pod 內部署您在 Edge 容器登錄中推送的映像。

  1. 若要部署映像,您必須透過 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>
    
  2. 系統已在裝置上的所有 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>   
    
  3. 使用 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
    
  4. 使用 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 映像。

若要移除一或多個容器映像,請遵循下列步驟:

  1. 將映像名稱設定為您想要刪除的映像。

    PS C:\WINDOWS\system32> $imageName="nginx"    
    
  2. 將容器登錄的使用者名稱和密碼設定為 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. 列出與映像相關的標籤

    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. 列出與您想要刪除之標籤相關的雜湊。 這會用到上述命令輸出中的標籤。 如果您有多個標籤,請選取其中一個標籤後,在下個命令中使用。

    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. 使用 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    
    

刪除未使用的映像之後,與未參考映像相關的空間會自動由夜間執行的流程回收。

下一步