組建並部署到 Azure Kubernetes Service

Azure Pipelines

Azure Kubernetes Service 管理您的託管 Kubernetes 環境,讓您更快速且更輕鬆地部署和管理容器化應用程式。 這項服務也可以依需求布建、升級和調整資源,而不需讓應用程式離線,以免除進行中作業和維護的負擔。

在此逐步指南中,您將瞭解如何建立持續組建和部署應用程式的管線。 每次您在包含 Dockerfile 的存放庫中變更程式碼時,都會將映射推送至您的 Azure Container Registry,然後將資訊清單部署至您的 Azure Kubernetes Service 叢集。

必要條件

為確保您的 Azure DevOps 專案具有存取 Azure 訂用帳戶所需的授權,請 建立 Azure Resource Manager 服務連線。 當您在專案中建立管線以部署至 Azure Kubernetes Service 時,需要服務連接。 否則,叢集和 Container Registry 的下拉式清單會是 空的。

  • GitHub 帳戶,您可以在其中建立存放庫。 如果您沒有帳戶,可以免費建立一個

  • Azure DevOps 的組織。 如果您沒有帳戶,可以免費建立一個。 (Azure DevOps 的組織與您的 GitHub 組織不同。 如果您想要在兩者之間對齊,請指定相同的名稱。 )

    如果您的小組已經有一個,請確定您是要使用之 Azure DevOps 專案的系統管理員。

  • 在 Microsoft 主控的代理程式上執行管線的能力。 您可以購買 並行作業 ,也可以要求免費層。 若要要求免費層,請遵循本文中的指示。 請注意,可能需要美國2-3 個工作天才能授與免費層。

  • 一個 Azure 帳戶。 如果您沒有存放庫,您可以免費建立一個

    提示

    如果您是新的,開始使用的最簡單方式是使用與 Azure Pipelines 組織和 Azure 訂用帳戶的擁有者相同的電子郵件地址。

取得程式碼

派生下列包含範例應用程式和 Dockerfile 的存放庫:

https://github.com/MicrosoftDocs/pipelines-javascript-docker

建立 Azure 資源

登入 Azure 入口網站,然後選取右上角的 Cloud Shell 按鈕。

建立容器登錄

# Create a resource group
az group create --name myapp-rg --location eastus

# Create a container registry
az acr create --resource-group myapp-rg --name myContainerRegistry --sku Basic

# Create a Kubernetes cluster
az aks create \
    --resource-group myapp-rg \
    --name myapp \
    --node-count 1 \
    --enable-addons monitoring \
    --generate-ssh-keys \
    --kubernetes-version 1.16.10

登入 Azure Pipelines

登入 Azure Pipelines。 登入之後,您的瀏覽器會移至 https://dev.azure.com/my-organization-name 並顯示您的 Azure DevOps 儀表板。

在您選取的組織內建立 專案。 如果您的組織中沒有任何專案,您會看到 [ 建立專案] 以開始 使用畫面。 否則,請選取儀表板右上角的 [ 建立專案 ] 按鈕。

建立管線

連接並選取存放庫

  1. 登入您的 Azure DevOps 組織,然後瀏覽至您的專案。

  2. 移至 [ 管線],然後選取 [ 新增管線]。

  3. 先選取 GitHub 作為原始程式碼的位置,以逐步完成精靈的步驟。

  4. 系統可能會將您重新導向至 GitHub 以進行登入。 若是如此,請輸入您的 GitHub 認證。

  5. 當存放庫清單出現時,請選取您的存放庫。

  6. 系統可能會將您重新導向至 GitHub 以安裝 Azure Pipelines 應用程式。 若是如此,請選取 [ 核准 & 安裝]。

出現 [ 設定 ] 索引標籤時,請選取 [ 部署至 Azure Kubernetes Service]。

  1. 如果出現提示,請選取您在其中建立登錄和叢集的訂用帳戶。

  2. 選取叢集 myapp

  3. 在 [ 命名空間] 中,選取 [ 現有],然後選取 [ 預設]。

  4. 選取 container registry 的名稱。

  5. 您可以將映射名稱和服務埠設定為預設值。

  6. 設定 [ 啟用提取要求的審核應用程式 ] 核取方塊,以查看要在後續步驟中自動產生的管線 YAML 中包含的 應用程式 相關設定。

  7. 選取 [ 驗證並設定]。

    當 Azure Pipelines 建立您的管線時,它會:

    • 建立 Docker 登錄服務 連線,讓您的管線將映射推送至您的容器登錄。

    • 在環境中建立 環境 和 Kubernetes 資源。 針對已啟用 RBAC 的叢集,建立的 Kubernetes 資源會隱含地在叢集中建立 ServiceAccount 和 RoleBinding 物件,讓建立的 ServiceAccount 無法在所選的命名空間之外執行作業。

    • 產生定義您的管線的 >azure-pipelines.yml. yml 檔案。

    • 產生 Kubernetes 資訊清單檔。 這些檔案是根據您在上面所做的選擇來 hydrating ymlyml 範本而產生的。

  8. 當您的新管線出現時,請參閱 YAML 查看其功能。 如需詳細資訊,請參閱 如何建立您的管線 。 當您準備好時,請選取 [ 儲存並執行]。

  9. 將建立新管線的認可隨即出現。 您可以看到上述產生的檔案。 選取 [儲存並執行]。

  10. 如果您想要的話,請將 認可訊息 變更為類似于 將管線新增至存放庫 的內容。 當您準備好時,請選取 [ 儲存並執行 ] 以將新的管線認可至您的存放庫,然後開始第一次執行新的管線!

查看管線執行,並部署您的應用程式

當管線執行時,請監看您的組建階段,然後您的部署階段,從執行) 的 blue (移至綠色 (完成) 。 您可以選取階段和作業來觀看管線的運作方式。

注意

如果您使用 Microsoft 裝載的代理程式,則必須將 Microsoft 裝載的代理程式 IP 範圍新增至您的防火牆。 從每 周的 JSON檔案取得每週的 IP 範圍清單,此清單會每個星期三發行一次。 新的 IP 範圍會在下列星期一生效。 如需詳細資訊,請參閱 Microsoft 裝載的 代理程式。 若要尋找 Azure DevOps 組織所需的 IP 範圍,請瞭解如何 識別 Microsoft 裝載的代理程式可能的 ip 範圍

在管線執行完成後,探索發生什麼事,然後查看您的應用程式部署。 從管線摘要:

  1. 選取 [ 環境 ] 索引標籤。

  2. 選取 [ View 環境]。

  3. 如果您的應用程式是部署到的命名空間,請選取該實例。 如果您卡在上述的預設值中,它將會是 預設 命名空間中的 myapp 應用程式。

  4. 選取 [ 服務 ] 索引標籤。

  5. 選取外部 IP 位址,並將其複製到剪貼簿。

  6. 開啟新的瀏覽器索引標籤或視窗,然後輸入 < IP 位址 > :8080。

如果您正在建立我們的範例應用程式,則 Hello world 會出現在您的瀏覽器中。

如何建立您的管線

當您完成選取選項,然後繼續驗證和設定管線 (請參閱上述) Azure Pipelines 使用 [ 部署至 Azure Kubernetes Service ] 範本為您建立管線。

組建階段會使用 Docker 工作來建立映射,並將其推送至 Azure Container Registry。

- stage: Build
  displayName: Build stage
  jobs:  
  - job: Build
    displayName: Build job
    pool:
      vmImage: $(vmImageName)
    steps:
    - task: Docker@2
      displayName: Build and push an image to container registry
      inputs:
        command: buildAndPush
        repository: $(imageRepository)
        dockerfile: $(dockerfilePath)
        containerRegistry: $(dockerRegistryServiceConnection)
        tags: |
          $(tag)
          
    - task: PublishPipelineArtifact@1
      inputs:
        artifactName: 'manifests'
        path: 'manifests'

部署作業會使用 Kubernetes 資訊清單 工作來建立 imagePullSecret Kubernetes 叢集節點所需的,以從 Azure Container Registry 資源提取。 然後,Kubernetes 資訊清單工作會使用資訊清單檔案來部署至 Kubernetes 叢集。

- stage: Deploy
  displayName: Deploy stage
  dependsOn: Build
  jobs:
  - deployment: Deploy
    displayName: Deploy job
    pool:
      vmImage: $(vmImageName)
    environment: 'azooinmyluggagepipelinesjavascriptdocker.aksnamespace'
    strategy:
      runOnce:
        deploy:
          steps:
          - task: DownloadPipelineArtifact@2
            inputs:
              artifactName: 'manifests'
              downloadPath: '$(System.ArtifactsDirectory)/manifests'

          - task: KubernetesManifest@0
            displayName: Create imagePullSecret
            inputs:
              action: createSecret
              secretName: $(imagePullSecret)
              namespace: $(k8sNamespace)
              dockerRegistryEndpoint: $(dockerRegistryServiceConnection)
              
          - task: KubernetesManifest@0
            displayName: Deploy to Kubernetes cluster
            inputs:
              action: deploy
              namespace: $(k8sNamespace)
              manifests: |
                $(System.ArtifactsDirectory)/manifests/deployment.yml
                $(System.ArtifactsDirectory)/manifests/service.yml
              imagePullSecrets: |
                $(imagePullSecret)
              containers: |
                $(containerRegistry)/$(imageRepository):$(tag)

清除資源

當您完成上述建立的資源時,可以使用下列命令來刪除它們:

az group delete --name myapp-rg

在出現提示時輸入 y

az group delete --name MC_myapp-rg_myapp_eastus

在出現提示時輸入 y

深入了解

我們邀請您深入瞭解: