共用方式為


KubernetesManifest@1 - 部署至 Kubernetes v1 工作

使用 Kubernetes 資訊清單檔案部署至叢集,或甚至製作資訊清單檔案,以用於使用 Helm 圖表進行部署。

Syntax

# Deploy to Kubernetes v1
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@1
  inputs:
    #action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
    #connectionType: 'kubernetesServiceConnection' # 'azureResourceManager' | 'kubernetesServiceConnection'. Required when action != bake. Service connection type. Default: kubernetesServiceConnection.
    #kubernetesServiceConnection: # string. Alias: kubernetesServiceEndpoint. Required when action != bake && connectionType = kubernetesServiceConnection. Kubernetes service connection. 
    #azureSubscriptionConnection: # string. Alias: azureSubscriptionEndpoint. Required when action != bake && connectionType = azureResourceManager. Azure subscription. 
    #azureResourceGroup: # string. Required when action != bake && connectionType = azureResourceManager. Resource group. 
    #kubernetesCluster: # string. Required when action != bake && connectionType = azureResourceManager. Kubernetes cluster. 
    #useClusterAdmin: false # boolean. Optional. Use when connectionType = azureResourceManager. Use cluster admin credentials. Default: false.
    #namespace: # string. Namespace. 
    #strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
    #trafficSplitMethod: 'pod' # 'pod' | 'smi'. Optional. Use when strategy = canary. Traffic split method. Default: pod.
    #percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
    #baselineAndCanaryReplicas: '1' # string. Required when strategy = Canary && action = deploy && trafficSplitMethod = SMI. Baseline and canary replicas. Default: 1.
    #manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests. 
    #containers: # string. Optional. Use when action = deploy || action = promote || action = bake. Containers. 
    #imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets. 
    #renderType: 'helm' # 'helm' | 'kompose' | 'kustomize'. Optional. Use when action = bake. Render Engine. Default: helm.
    #dockerComposeFile: # string. Required when action = bake && renderType = kompose. Path to docker compose file. 
    #helmChart: # string. Required when action = bake && renderType = helm. Helm Chart. 
    #releaseName: # string. Optional. Use when action = bake && renderType = helm. Helm Release Name. 
    #overrideFiles: # string. Optional. Use when action = bake && renderType = helm. Override Files. 
    #overrides: # string. Optional. Use when action = bake && renderType = helm. Overrides. 
    #kustomizationPath: # string. Optional. Use when action = bake && renderType = kustomize. Kustomization Path. 
    #resourceToPatch: 'file' # 'file' | 'name'. Required when action = patch. Resource to patch. Default: file.
    #resourceFileToPatch: # string. Required when action = patch && resourceToPatch = file. File path. 
    #kind: # 'deployment' | 'replicaset' | 'statefulset'. Required when action = scale || resourceToPatch = name. Kind. 
    #name: # string. Required when action = scale || resourceToPatch = name. Name. 
    #replicas: # string. Required when action = scale. Replica count. 
    #mergeStrategy: 'strategic' # 'json' | 'merge' | 'strategic'. Required when action = patch. Merge Strategy. Default: strategic.
    #arguments: # string. Optional. Use when action = delete. Arguments. 
    #patch: # string. Required when action = patch. Patch. 
    #secretType: 'dockerRegistry' # 'dockerRegistry' | 'generic'. Required when action = createSecret. Type of secret. Default: dockerRegistry.
    #secretName: # string. Optional. Use when action = createSecret. Secret name. 
    #secretArguments: # string. Optional. Use when action = createSecret && secretType = generic. Arguments. 
    #dockerRegistryEndpoint: # string. Optional. Use when action = createSecret && secretType = dockerRegistry. Docker registry service connection. 
    #rolloutStatusTimeout: '0' # string. Optional. Use when action = deploy || action = patch || action = scale || action = promote. Timeout for rollout status. Default: 0.

輸入

action - 行動
string. 允許的值: bake 、 (建立秘密) 、 delete 、、 deploypatchpromote 、、 scalerejectcreateSecret 預設值:deploy

指定要執行的動作。


connectionType - 服務連線類型
string. 當 action != bake 時為必要。 允許的值: azureResourceManager (Azure Resource Manager) , kubernetesServiceConnection (Kubernetes Service 連線) 。 預設值:kubernetesServiceConnection

選取 Kubernetes 服務連線類型。

  • kubernetesServiceConnection (Kubernetes Service 連線) - 可讓您提供 KubeConfig 檔案、指定服務帳戶,或使用 Azure 訂 用帳戶選項匯入 AKS 實例。 使用 Azure 訂 用帳戶選項匯入 AKS 實例需要 Kubernetes 叢集在服務連線設定時間進行存取。
  • azureResourceManager (Azure Resource Manager) - 可讓您選取 AKS 實例。 無法在服務連線設定時間存取 Kubernetes 叢集。

如需詳細資訊,請參閱


kubernetesServiceConnection - Kubernetes 服務連線
輸入別名: kubernetesServiceEndpointstring. 當 action != bake && connectionType = kubernetesServiceConnection 時為必要。

指定 Kubernetes 服務連線


azureSubscriptionConnection - Azure 訂用帳戶
輸入別名: azureSubscriptionEndpointstring. 當 action != bake && connectionType = azureResourceManager 時為必要。

選取包含Azure Container Registry的 Azure Resource Manager 訂用帳戶。注意:若要設定新的服務連線,請從清單中選取 Azure 訂用帳戶,然後按一下 [授權]。 如果您的訂用帳戶未列出,或您想要使用現有的服務主體,您可以使用 [新增] 或 [管理] 按鈕來設定 Azure 服務連線。


azureResourceGroup - 資源群組
string. 當 action != bake && connectionType = azureResourceManager 時為必要。

選取 Azure 資源群組。


kubernetesCluster - Kubernetes 叢集
string. 當 action != bake && connectionType = azureResourceManager 時為必要。

選取 Azure 受控叢集。


useClusterAdmin - 使用叢集管理員認證
boolean. 選擇性。 使用 時 connectionType = azureResourceManager 。 預設值:false

使用叢集管理員認證,而不是預設叢集使用者認證。


namespace - 命名 空間
string.

使用 –namespace 旗標指定命令的命名空間。 如果未提供命名空間,命令將會在預設命名空間中執行。


strategy - 策略
string. 選擇性。 使用 時 action = deploy || action = promote || action = reject 。 允許值:canarynone。 預設值:none

指定動作或 reject 動作之前 promote 動作中使用的 deploy 部署策略。 目前是唯 canary 一可接受的部署策略。


trafficSplitMethod - 流量分割方法
string. 選擇性。 使用 時 strategy = canary 。 允許值:podsmi。 預設值:pod

針對 值 smi ,流量分割的百分比會使用服務網格在要求層級完成。 服務網格必須由叢集管理員設定。此工作會處理 SMI 流量Split 物件的協調流程。

針對 值 pod ,在缺少服務網格的情況下,要求層級無法進行百分比分割。 相反地,會使用百分比輸入來計算基準和 Canary 的複本。 計算是穩定變體輸入資訊清單中指定的複本百分比。


percentage - 百分比
string. 當 strategy = Canary && action = deploy 時為必要。 預設值:0

用來計算資訊清單檔案中工作負載的比較基準變異和 Canary-variant 複本數目的百分比。

針對指定的百分比輸入,計算:

(×) / 100複本數目百分比

如果結果不是整數,則會在建立基準和 Canary 變體時使用結果的數學底板。

例如,假設部署 hello-world 位於輸入資訊清單檔案中,而下列幾行位於工作輸入中:

replicas: 4
strategy: canary
percentage: 25

在此情況下,部署 hello-world-baselinehello-world-canary 會以每個複本建立一個複本。 基準變體是使用與穩定版本相同的映射和標籤來建立,這是部署前的四個複本變體。 Canary 變體是使用對應至新部署變更的映射和標記來建立。


baselineAndCanaryReplicas - 基準和 Canary 複本
string. 當 strategy = Canary && action = deploy && trafficSplitMethod = SMI 時為必要。 預設值:1

當您設定 trafficSplitMethodsmi 時,服務網格平面會控制流量分割的百分比。 您可以控制與流量分割無關的 Canary 和基準變體的實際複本數目。

例如,假設輸入部署資訊清單指定穩定變體的 30 個複本。 此外,假設您為工作指定下列輸入:

strategy: canary
trafficSplitMethod: smi
percentage: 20
baselineAndCanaryReplicas: 1

在此情況下,穩定變體會接收 80% 的流量,而基準和 Canary 變體則分別會收到指定之 20% 的一半。 基準和 Canary 變體不會分別收到三個複本。 它們會改為接收指定的複本數目,這表示每個複本都會收到一個複本。


manifests - 體現
string. 當 action = deploy || action = promote || action = reject 時為必要。

指定要用於部署之資訊清單檔案的路徑。 每一行都代表單一路徑。 檔案比對模式是每一行可接受的值。


containers - 容器
string. 選擇性。 使用 時 action = deploy || action = promote || action = bake

指定要用於資訊清單檔案替代之影像的完整資源 URL。 URL contosodemo.azurecr.io/helloworld:test 是範例。


imagePullSecrets - ImagePullSecrets
string. 選擇性。 使用 時 action = deploy || action = promote

指定多行輸入,其中每一行都包含已在叢集內設定的 Docker 登錄密碼名稱。 輸入資訊清單檔案中找到的工作負載會在每個秘密名稱下 imagePullSecrets 新增。


renderType - 轉譯引擎
string. 選擇性。 使用 時 action = bake 。 允許值:helmkomposekustomize。 預設值:helm

指定用來產生資訊清單檔案的轉譯類型。


dockerComposeFile - Docker 撰寫檔案的路徑
string. 當 action = bake && renderType = kompose 時為必要。

指定 docker-compose 檔案路徑。


helmChart - Helm 圖表
string. 當 action = bake && renderType = helm 時為必要。

指定要製作的 Helm 圖表路徑。


releaseName - Helm 版本名稱
string. 選擇性。 使用 時 action = bake && renderType = helm

指定要使用的 Helm 版本名稱。


overrideFiles - 覆寫檔案
string. 選擇性。 使用 時 action = bake && renderType = helm

指定接受覆寫檔案路徑的多行輸入。 從 Helm 圖表製作資訊清單檔案時,會使用檔案。


overrides - 重寫
string. 選擇性。 使用 時 action = bake && renderType = helm

指定要設定的覆寫值。


kustomizationPath - Kustomization 路徑
string. 選擇性。 使用 時 action = bake && renderType = kustomize

指定引數,該引數必須是包含檔案的目錄路徑,或具有指定存放庫根目錄路徑尾碼 same 的 Git 存放庫 URL。


resourceToPatch - 要修補的資源
string. 當 action = patch 時為必要。 允許值:filename。 預設值:file

指出下列其中一個修補程式方法:

  • 資訊清單檔會識別要修補的物件。
  • 個別物件是以種類和名稱識別為修補程式目標。

可接受的值為 檔案名稱


resourceFileToPatch - 檔案路徑
string. 當 action = patch && resourceToPatch = file 時為必要。

指定用於修補程式的檔案路徑。


kind - 種類
string. 當 action = scale || resourceToPatch = name 時為必要。 允許值:deploymentreplicasetstatefulset

指定 K8s 物件的種類,例如 deploymentreplicaSet 等等。


name - 名字
string. 當 action = scale || resourceToPatch = name 時為必要。

指定 K8s 物件的名稱。


replicas - 複本計數
string. 當 action = scale 時為必要。

指定要調整的複本數目。


replicas - 複本計數
string. 當 action = scale 時為必要。

指定 K8s 物件的名稱。


mergeStrategy - 合併策略
string. 當 action = patch 時為必要。 允許值:jsonmergestrategic。 預設值:strategic

指定提供的修補程式類型。


arguments - 參數
string. 選擇性。 使用 時 action = delete

指定命令的 kubectl delete 引數。 例如: arguments: deployment hello-world foo-bar


patch - 補丁
string. 當 action = patch 時為必要。

指定修補程式的內容。


secretType - 秘密類型
string. 當 action = createSecret 時為必要。 允許值:dockerRegistrygeneric。 預設值:dockerRegistry

建立或更新泛型或 docker imagepullsecret 。 指定 dockerRegistry 以建立或更新 imagepullsecret 所選登錄的 。 是 imagePullSecret 將包含容器登錄密碼的秘密傳遞至 Kubelet 的方法,因此可以代表 Pod 提取私人映射。


secretName - 秘密名稱
string. 選擇性。 使用 時 action = createSecret

指定秘密的名稱。 您可以在 Kubernetes YAML 組態檔中使用此秘密名稱。


secretArguments - 參數
string. 選擇性。 使用 時 action = createSecret && secretType = generic

指定要在秘密中插入的索引鍵和常值。 例如, --from-literal=key1=value1--from-literal=key2="top secret"


dockerRegistryEndpoint - Docker 登錄服務連線
string. 選擇性。 使用 時 action = createSecret && secretType = dockerRegistry

指定用來在叢集中建立 Docker 登錄秘密之指定服務連線的認證。 然後,欄位底下的 imagePullSecrets 資訊清單檔案可以參考此秘密的名稱。


rolloutStatusTimeout - 推出狀態的逾時
string. 選擇性。 使用 時 action = deploy || action = patch || action = scale || action = promote 。 預設值:0

指定在結束 watch on rollout 狀態之前等候) 以秒為單位 (的時間長度。


工作控制選項

除了工作輸入之外,所有工作都有控制選項。 如需詳細資訊,請參閱 控制選項和一般工作屬性

輸出變數

此工作會定義下列 輸出變數,您可以在下游步驟、作業和階段中使用。

manifestsBundle
製作動作所建立的資訊清單配套位置

備註

存取 AKS 時的 Kubernetes Service 連線考慮

您可以使用下列任何選項來建立 Kubernetes 服務連線。

  • KubeConfig
  • 服務帳戶
  • Azure 訂用帳戶

選擇 Kubernetes 服務連線驗證方法的螢幕擷取畫面。

選取 [Azure 訂 用帳戶] 選項時,Kubernetes 必須在服務連線設定時間存取 Azure DevOps。 可能無法建立服務連線的各種原因,例如您 建立私人叢集 ,或叢集 已停用本機帳戶。 在這些情況下,Azure DevOps 無法在服務連線設定時間連線到叢集,您會看到停滯的 載入命名空間 畫面。

選擇 Kubernetes 服務連線驗證對話方塊停滯在載入命名空間的螢幕擷取畫面。

從 Kubernetes 1.24 開始, 預設不會再建立長期權杖。 Kubernetes 不建議使用長期權杖。 因此,使用以 Azure 訂 用帳戶建立的 Kubernetes 服務連線工作,無法存取驗證所需的永久權杖,而且無法存取 Kubernetes 叢集。 這也會導致凍結的 [載入命名空間 ] 對話方塊。

使用 Azure Resource Manager服務連線來存取 AKS

對於 AKS 客戶,Azure Resource Manager服務連線類型提供連線到私人叢集的最佳方法,或已停用本機帳戶的叢集。 當您建立服務連線時,此方法不相依于叢集連線。 AKS 的存取會延後至管線執行時間,其優點如下:

  • 您可以從可看見叢集的自我裝載或擴展集代理程式,存取 (私人) AKS 叢集。
  • 系統會針對使用 Azure Resource Manager服務連線的每個工作建立權杖。 這可確保您使用短期權杖連線到 Kubernetes,這是 Kubernetes 建議
  • 即使停用本機帳戶,也可以存取 AKS。

服務連線常見問題

我收到下列錯誤訊息:找不到與服務帳戶相關聯的任何秘密。 這是為什麼?

您使用 Kubernetes 服務連線搭配 Azure 訂用帳戶選項。 我們正在更新這個方法來建立長期存留的權杖。 這預期會在 5 月中提供。 不過,建議您開始使用 Azure 服務連線類型,而不是根據 Kubernetes 指引使用長期權杖。

我使用的是 AKS,不想變更任何專案,我可以繼續搭配 Kubernetes 服務連線使用工作嗎?

我們正在更新這個方法來建立長期存留的權杖。 這預期會在 5 月中提供。 不過,請注意,此方法是針對 Kubernetes 指引

我使用的是 Kubernetes 工作和 Kubernetes 服務連線,但不是 AKS。 我應該擔心嗎?

您工作會如往常一樣繼續運作。

是否會移除 Kubernetes 服務連線類型?

我們的 Kubernetes 工作會使用任何 Kubernetes 叢集,不論其執行位置為何。 Kubernetes 服務連線將繼續存在。

我是 AKS 客戶,而且一切都正常運作,我應該採取動作嗎?

不需要變更任何專案。 如果您在建立期間使用 Kubernetes 服務連線和選取的 Azure 訂用帳戶,您應該留意 使用長期權杖的 Kubernetes 指引

我正在建立 Kubernetes 環境,而且沒有選項可以使用服務連線

如果無法在環境建立期間存取 AKS,您可以使用空的環境,並將輸入設定 connectionType 為 Azure Resource Manager服務連線。

我已使用 Azure Active Directory RBAC 設定 AKS,而我的管線無法運作。 這些更新會解決嗎?

啟用 AAD RBAC 時存取 Kubernetes 與權杖建立無關。 為了防止互動式提示,我們將在未來的更新中支援 kubelogin

在組建或發行管線中使用 Kubernetes 資訊清單工作,將資訊清單模擬並部署至 Kubernetes 叢集。

此工作支援下列專案:

  • 成品替代:部署動作會以輸入容器映射的清單,連同其標記和摘要一起指定。 在將應用程式套用至叢集之前,相同的輸入會取代為非範本化資訊清單檔。 此替代可確保叢集節點提取正確的映射版本。

  • 資訊清單穩定性:已檢查已部署 Kubernetes 物件的推出狀態。 穩定性檢查會併入,以判斷工作狀態是成功還是失敗。

  • 可追蹤注釋:注釋會新增至已部署的 Kubernetes 物件,以取代可追蹤性資訊。 支援下列批註:

    • azure-pipelines/org
    • azure-pipelines/project
    • azure-pipelines/pipeline
    • azure-pipelines/pipelineId
    • azure-pipelines/execution
    • azure-pipelines/executionuri
    • azure-pipelines/jobName
  • 秘密處理:動作 createSecret 可讓 Docker 登錄服務連線建立 Docker 登錄秘密。 它也可讓您使用純文字變數或秘密變數來建立泛型秘密。 部署至叢集之前,您可以使用 secrets 輸入以及 deploy 動作,以適當的 imagePullSecrets 值來增強輸入資訊清單檔案。

  • 製作資訊清單:工作的 bake 動作允許將範本製作成 Kubernetes 資訊清單檔案。 動作會使用 Helm、Compose 和 Kustomize 等工具。 透過製作,這些 Kubernetes 資訊清單檔案可用於部署至叢集。

  • 部署策略:選擇 canary 動作的策略 deploy 會導致建立尾碼為 -baseline-canary 的工作負載名稱。 此工作支援兩種流量分割方法:

    • 服務網格介面服務網格介面 (SMI) 抽象概念允許使用 和 等 LinkerdIstio 服務提供者進行設定。 Kubernetes 資訊清單工作會將 SMI TrafficSplit 物件對應至部署策略生命週期中的穩定、基準和 Canary 服務。

      以服務網格為基礎的 Canary 部署,且使用此工作更精確。 此精確度是因為服務提供者如何啟用以細微百分比為基礎的流量分割。 服務網格會使用插入 Pod 的服務登錄和 Sidecar 容器。 此插入會與應用程式容器一起發生,以達到細微的流量分割。

    • 沒有服務網格的 Kubernetes:如果沒有服務網格,您可能不會在要求層級取得您想要的確切百分比分割。 不過,您可以使用穩定變體旁邊的基準和 Canary 變體來執行 Canary 部署。

      當符合選取器標籤條件約束時,服務會將要求傳送至所有三個工作負載變體的 Pod。 Kubernetes 資訊清單會在建立基準和 Canary 變體時接受這些要求。 此路由行為可達到只將部分要求傳送至 Canary 的預期效果。

    使用發行管線中的 手動介入工作 ,或 YAML 管線中的 延遲工作 ,比較基準和 Canary 工作負載。 請先進行比較,再使用工作的升級或拒絕動作。

部署動作

下列 YAML 程式碼是使用資訊清單檔部署至 Kubernetes 命名空間的範例:

steps:
- task: KubernetesManifest@0
  displayName: Deploy
  inputs:
    kubernetesServiceConnection: someK8sSC1
    namespace: default
    manifests: |
      manifests/deployment.yml
      manifests/service.yml
    containers: |
      foo/demo:$(tagVariable1)
      bar/demo:$(tagVariable2)
    imagePullSecrets: |
      some-secret
      some-other-secret

在上述範例中,工作會嘗試尋找影像 foo/demobar/demo 資訊清單檔案影像欄位中的相符專案。 針對找到的每個相符專案,或 tagVariable2 的值 tagVariable1 會附加為映射名稱的標記。 您也可以在容器輸入中指定摘要,以進行成品替代。

注意

雖然您可以使用與部署策略相關的 YAML 輸入來撰寫 deploypromotereject 動作,但目前無法針對建置管線支援手動介入工作。

針對發行管線,建議您以下列順序使用與部署策略相關的動作和輸入:

  1. 使用 strategy: canarypercentage: $(someValue) 指定的部署動作。
  2. 手動介入工作,讓您可以暫停管線,並比較基準變異與 Canary 變體。
  3. 如果繼續手動介入工作,以及拒絕手動介入工作執行的動作,則會執行升級動作。

建立秘密動作

下列 YAML 程式碼示範使用 Docker 登錄服務連線建立 Docker登錄秘密的範例:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: dockerRegistry
    secretName: foobar
    dockerRegistryEndpoint: demoACR
    kubernetesServiceConnection: someK8sSC
    namespace: default

此 YAML 程式碼示範建立一般秘密的範例:

steps:
- task: KubernetesManifest@0
  displayName: Create secret
  inputs: 
    action: createSecret
    secretType: generic
    secretName: some-secret
    secretArguments: --from-literal=key1=value1
    kubernetesServiceConnection: someK8sSC
    namespace: default

製作動作

下列 YAML 程式碼是從 Helm 圖表製作資訊清單檔案的範例。 請注意第一個工作中的名稱輸入用法。 稍後會從部署步驟參考此名稱,以指定制作步驟所產生的資訊清單路徑。

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from Helm chart
  inputs:
    action: bake
    helmChart: charts/sample
    overrides: 'image.repository:nginx'

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: someK8sSC
    namespace: default
    manifests: $(bake.manifestsBundle)
    containers: |
      nginx: 1.7.9

注意

若要直接使用 Helm 來管理發行和復原,請參閱 套件和部署 Helm 圖表工作

Kustomize 範例

下列 YAML 程式碼是使用 Kustomize 產生的模擬資訊清單檔案範例,其中包含檔案 kustomization.yaml

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from kustomization path
  inputs:
    action: bake
    renderType: kustomize
    kustomizationPath: folderContainingKustomizationFile

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: k8sSC1
    manifests: $(bake.manifestsBundle)

Kompose 範例

下列 YAML 程式碼是使用 Kompose 產生的模擬資訊清單檔案範例,這是 Docker Compose 的轉換工具。

steps:
- task: KubernetesManifest@0
  name: bake
  displayName: Bake K8s manifests from Docker Compose
  inputs:
    action: bake
    renderType: kompose
    dockerComposeFile: docker-compose.yaml

- task: KubernetesManifest@0
  displayName: Deploy K8s manifests
  inputs:
    kubernetesServiceConnection: k8sSC1
    manifests: $(bake.manifestsBundle)

調整動作

下列 YAML 程式碼顯示縮放物件的範例:

steps:
- task: KubernetesManifest@0
  displayName: Scale
  inputs: 
    action: scale
    kind: deployment
    name: bootcamp-demo
    replicas: 5
    kubernetesServiceConnection: someK8sSC
    namespace: default

修補動作

下列 YAML 程式碼顯示物件修補的範例:

steps:
- task: KubernetesManifest@0
  displayName: Patch
  inputs: 
    action: patch
    kind: pod
    name: demo-5fbc4d6cd9-pgxn4
    mergeStrategy: strategic
    patch: '{"spec":{"containers":[{"name":"demo","image":"foobar/demo:2239"}]}}'
    kubernetesServiceConnection: someK8sSC
    namespace: default

刪除動作

此 YAML 程式碼會顯示刪除範例物件:

steps:
- task: KubernetesManifest@0
  displayName: Delete
  inputs:
    action: delete
    arguments: deployment expressapp
    kubernetesServiceConnection: someK8sSC
    namespace: default

疑難排解

我的 Kubernetes 叢集位於防火牆後方,而我使用的是託管的代理程式。 如何部署到此叢集?

您可以藉由允許託管代理程式的 IP 位址,授與託管的代理程式可透過防火牆存取。 如需詳細資訊,請參閱代理程式 IP 範圍

要求對穩定服務路由和使用 Canary 部署的變體服務路由運作方式為何?

Kubernetes 中 Pod 和服務之間的標籤選取器關聯性允許設定部署,讓單一服務能將要求路由傳送至穩定和 Canary 變體。 Kubernetes 資訊清單工作針對 Canary 部署會使用此工作。

如果工作包含 和 strategy: canaryaction: deploy 輸入,則會針對在輸入資訊清單檔案 -baseline 中定義的每個工作負載 (Deployment、ReplicaSet、Pod...) ,則會建立部署的 和 -canary 變體。 在此範例中,輸入資訊清單檔中有部署 sampleapp ,而且在完成管線執行數位 22 之後,此部署 sampleapp 的穩定變體會部署在叢集中。 在此案例中,後續的執行 (執行數位 23) ,Kubernetes 資訊清單工作會使用 action: deploy ,並 strategy: canary 會導致建立 sampleapp-baseline 和 sampleapp-canary 部署,其複本數目取決於工作輸入的 percentage 乘積,其最終穩定變體 sampleapp 的值取決於輸入資訊清單檔案所需的複本數目。

除了複本數目之外,基準版本具有與穩定變體相同的設定,而 Canary 版本在此案例中,目前執行 (引進的新變更,則執行數位 23) 。 如果在上述步驟之後,在管線中設定手動介入,則可以有機會暫停管線,讓管線管理員可以評估基準和 Canary 版本的關鍵計量,並決定是否 Canary 變更是安全且足以完整推出。

action: promoteKubernetes 資訊清單工作的 和 strategy: canaryaction: rejectstrategy: canary 輸入可用來分別升級或拒絕 Canary 變更。 請注意,在此步驟結束時,只有輸入資訊清單檔案中宣告之工作負載的穩定變體會保留在叢集中,同時清除暫時基準和 Canary 版本。

規格需求

需求 描述
管線類型 YAML、傳統組建、傳統版本
執行于 Agent、DeploymentGroup
要求
Capabilities 此工作不符合作業中後續工作的任何需求。
命令限制 任何
Settable 變數 任何
代理程式版本 所有支援的代理程式版本。
工作類別 部署