使用 Kubernetes 指令清單檔案來部署至叢集,或甚至製作使用 Helm 圖表進行部署的指令清單檔案。
語法
# 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.
#resourceType: 'Microsoft.ContainerService/managedClusters' # string. Optional. Use when action = deploy. Resource type. Default: Microsoft.ContainerService/managedClusters.
# 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、createSecretcreateSecretdeploy、patch、promote、scale、reject、。 預設值: deploy。
指定要執行的動作。
connectionType
-
服務連線類型
string。
action != bake時為必要項。 允許的值: azureResourceManager (Azure Resource Manager)、 kubernetesServiceConnection (Kubernetes Service Connection)。 預設值: kubernetesServiceConnection。
選擇 Kubernetes 服務連接類型。
-
kubernetesServiceConnection(Kubernetes 服務連接) - 允許您提供 KubeConfig 檔、指定服務帳戶或使用 Azure 訂閱 選項匯入 AKS 實例。 使用 Azure 訂用帳戶 選項匯入 AKS 實例,需要在服務連線設定時間存取 Kubernetes 叢集。 -
azureResourceManager(Azure 資源管理器) - 用於選擇 AKS 實例。 不會在服務連線設定時間存取 Kubernetes 叢集。
如需詳細資訊,請參閱<
kubernetesServiceConnection
-
Kubernetes 服務連線
輸入別名: kubernetesServiceEndpoint。
string。
action != bake && connectionType = kubernetesServiceConnection時為必要項。
azureSubscriptionConnection
-
Azure 訂用帳戶
輸入別名: azureSubscriptionEndpoint。
string。
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時使用 。 允許的值:canary、none。 預設值: none。
指定在 deploy 動作或 promote 動作之前,reject 動作中使用的部署策略。 目前,canary 是唯一可接受的部署策略。
trafficSplitMethod
-
流量分割方法
string。 選擇性。
strategy = canary時使用 。 允許的值:pod、smi。 預設值: pod。
針對值 smi,流量分割的百分比會使用服務網格在要求層級完成。 服務網格必須由叢集管理員設定。此工作會處理 SMI TrafficSplit 物件的協調流程。
針對值 pod,在缺少服務網格的情況下,無法在要求層級進行百分比分割。 相反地,會使用百分比輸入來計算基準和 Canary 的複本。 計算是穩定變體輸入指令清單中指定的複本百分比。
percentage
-
百分比
string。
strategy = Canary && action = deploy時為必要項。 預設值: 0。
用來計算指令清單檔中所含工作負載之基準變異和 Canary-variant 複本數目的百分比。
針對指定的百分比輸入,計算:
(百分比 × 複本數目) / 100
如果結果不是整數,則會在建立基準和 Canary 變體時使用結果的數學底板。
例如,假設部署 hello-world 位於輸入指令清單檔案中,且下列幾行位於工作輸入中:
replicas: 4
strategy: canary
percentage: 25
在此情況下,部署 hello-world-baseline 和 hello-world-canary 會建立每個復本一個複本。 基準變體會以與穩定版本相同的映像和標籤來建立,這是部署前的四個復本變體。 Canary 變體是使用對應至新部署變更的映像和標籤來建立。
baselineAndCanaryReplicas
-
基準和 Canary 複本
string。
strategy = Canary && action = deploy && trafficSplitMethod = SMI時為必要項。 預設值: 1。
當您將 trafficSplitMethod 設定為 smi時,服務網格平面中會控制流量分割的百分比。 您可以控制 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時使用 。 允許的值:helm、kompose、kustomize。 預設值: helm。
指定用來產生指令清單檔的轉譯類型。
dockerComposeFile
-
docker compose 檔案 的路徑
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時為必要項。 允許的值:file、name。 預設值: file。
指出下列其中一個修補程式方法:
- 指令清單檔會識別要修補的物件。
- 個別物件會以種類和名稱識別為修補程序目標。
可接受的值為 檔案 和 名稱。
resourceFileToPatch
-
檔案路徑
string。
action = patch && resourceToPatch = file時為必要項。
指定用於修補程式的檔案路徑。
kind
-
種類
string。
action = scale || resourceToPatch = name時為必要項。 允許的值:deployment、replicaset、statefulset。
指定 K8s 物件的種類,例如 deployment、replicaSet 等等。
name
-
名稱
string。
action = scale || resourceToPatch = name時為必要項。
指定 K8s 物件的名稱。
replicas
-
複本計數
string。
action = scale時為必要項。
指定要調整的複本數目。
replicas
-
複本計數
string。
action = scale時為必要項。
指定 K8s 物件的名稱。
mergeStrategy
-
合併策略
string。
action = patch時為必要項。 允許的值:json、merge、strategic。 預設值: strategic。
指定要提供的修補程序類型。
arguments
-
自變數
string。 選擇性。
action = delete時使用 。
指定 kubectl delete 命令的自變數。 例如:arguments: deployment hello-world foo-bar
patch
-
補丁
string。
action = patch時為必要項。
指定修補程序的內容。
secretType
-
秘密類型
string。
action = createSecret時為必要項。 允許的值:dockerRegistry、generic。 預設值: 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 狀態之前等候的時間長度(以秒為單位)。
resourceType
-
資源類型
string。 選擇性。
action = deploy時使用 。 預設值: Microsoft.ContainerService/managedClusters。
資源的類型(佇列、託管集群)。
工作控制選項
除了工作輸入之外,所有工作都有控制選項。 如需詳細資訊,請參閱 控制項選項和一般工作屬性。
輸出變數
此工作會定義下列 輸出變數,您可以在下游步驟、作業和階段中取用這些變數。
manifestsBundle
由bake作創建的清單捆綁包的位置
備註
存取 AKS 時的 Kubernetes Service 連線考慮
您可以使用下列任何選項來建立 Kubernetes 服務連線。
- KubeConfig 實例
- 服務帳戶
- Azure 訂用帳戶
選取 [Azure 訂用帳戶] 選項時,必須在服務連線設定時間存取 Azure DevOps。 可能無法建立服務連線的各種原因,例如,建立私人叢集 或叢集 本機帳戶已停用。 在這些情況下,Azure DevOps 無法在服務連線設定時間連線到您的叢集,您會看到停滯 載入命名空間 畫面。
從 Kubernetes 1.24 開始,預設 不會再建立長期令牌。 Kubernetes 建議不要使用長期令牌。 因此,使用以 Azure 訂用帳戶 選項建立的 Kubernetes 服務連線的工作無法存取驗證所需的永久令牌,且無法存取 Kubernetes 叢集。 這也會導致凍結 載入命名空間 對話框。
使用 Azure Resource Manager 服務連線來存取 AKS
對於 AKS 客戶,Azure Resource Manager 服務連線類型提供連線至私人叢集的最佳方法,或已停用本機帳戶的叢集。 當您建立服務連線時,此方法不相依於叢集連線。 AKS 的存取會延後至管線運行時間,其優點如下:
- 您可以從可看見叢集的自我裝載或擴展集代理程式,存取 (private) 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/專案
- azure-pipelines/管道
- azure-pipelines/pipelineId
- azure-pipelines/execution
- azure-pipelines/executionuri
- azure-pipelines/jobName
秘密處理:
createSecret動作可讓 Docker 登錄服務連線建立 Docker 登錄秘密。 它也可讓您使用純文本變數或秘密變數來建立泛型秘密。 在部署至叢集之前,您可以使用secrets輸入以及deploy動作,以適當的imagePullSecrets值來增強輸入指令清單檔案。Bake 指令清單:工作的
bake動作可讓您將範本製作成 Kubernetes 指令清單檔案。 動作會使用 Helm、Compose 和 Kustomize 等工具。 透過製作,這些 Kubernetes 指令清單檔案可用於部署至叢集。部署策略:選擇具有
canary動作的deploy策略,會導致建立後綴為-baseline和-canary的工作負載名稱。 工作支援兩種流量分割方法:Service Mesh 介面:Service Mesh 介面 (SMI) 抽象概念允許使用
Linkerd和Istio等服務提供者進行設定。 Kubernetes 指令清單工作會將 SMITrafficSplit對象對應至部署策略生命週期中的穩定、基準和 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/demo 和 bar/demo 相符專案。 針對找到的每個相符專案,tagVariable1 或 tagVariable2 的值都會附加為影像名稱的標籤。 您也可以在容器輸入中指定摘要,以進行成品替代。
備註
雖然您可以使用與部署策略相關的 YAML 輸入來撰寫 deploy、promote和 reject 動作,但目前無法使用建置管線支援手動介入工作。
針對發行管線,建議您依下列順序使用與部署策略相關的動作和輸入:
- 使用
strategy: canary和percentage: $(someValue)指定的部署動作。 - 手動介入工作,讓您可以暫停管線,並比較基準變異與 Canary 變體。
- 如果手動介入工作繼續執行,以及拒絕手動介入工作執行的拒絕動作,則會執行升級動作。
建立秘密動作
下列 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 部署使用此工作。
如果工作包含輸入指令清單檔案中定義的 action: deploy 和 strategy: canary,則會針對輸入指令清單檔案中定義的每個工作負載(Deployment、ReplicaSet、Pod...),建立部署的 -baseline 和 -canary 變體。 在此範例中,輸入指令清單檔案中有部署 sampleapp,且完成管線執行編號 22 之後,此部署的穩定變體會部署在叢集中 sampleapp。 在後續執行中(在此案例中為執行數位 23),具有 action: deploy 和 strategy: canary 的 Kubernetes 指令清單工作會導致根據輸入指令清單檔案,建立 sampleapp-baseline 和 sampleapp-canary 部署,其複本數目是由 percentage 工作輸入乘積的乘積所決定,其復本數目會根據輸入指令清單檔案,取得 sampleapp 的最終穩定變體值。
除了複本數目外,基準版本具有與穩定變體相同的組態,而 Canary 版本具有目前執行所導入的新變更(在此案例中,執行數位 23)。 如果在上述步驟之後,在管線中設定手動介入,則可以有機會暫停管線,讓管線管理員可以評估基準和 Canary 版本的關鍵計量,並決定 Canary 變更是否安全且足夠適合完整推出。
Kubernetes 指令清單工作的action: promote 和 strategy: canary 或 action: reject 和 strategy: canary 輸入分別可用來升級或拒絕 Canary 變更。 請注意,在此步驟結束時,只有輸入指令清單檔案中宣告之工作負載的穩定變體會維持在叢集中部署,同時清除暫時基準和 Canary 版本。
需求
| 要求 | 說明 |
|---|---|
| 管線類型 | YAML、傳統組建、傳統版本 |
| 執行於 | Agent、DeploymentGroup |
| 要求 | 沒有 |
| 能力 | 此工作不符合作業中後續工作的任何需求。 |
| 命令限制 | 任意 |
| Settable 變數 | 任意 |
| 代理程式版本 | 所有支援的代理程式版本。 |
| 工作類別 | 部署 |