KubernetesManifest@0 - 部署至 Kubernetes v0 工作
使用組建或發行管線中的 Kubernetes 指令清單工作,使用 Helm 圖表將指令清單製作和部署至 Kubernetes 叢集。
此版本的工作已被取代;使用 KubernetesManifest@1 利用最新功能,例如 工作負載身分識別同盟。
使用組建或發行管線中的 Kubernetes 指令清單工作,使用 Helm 圖表將指令清單製作和部署至 Kubernetes 叢集。
語法
# Deploy to Kubernetes v0
# Use Kubernetes manifest files to deploy to clusters or even bake the manifest files to be used for deployments using Helm charts.
- task: KubernetesManifest@0
inputs:
#action: 'deploy' # 'bake' | 'createSecret' | 'delete' | 'deploy' | 'patch' | 'promote' | 'scale' | 'reject'. Action. Default: deploy.
#kubernetesServiceConnection: # string. Required when action != bake. Kubernetes service connection.
#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
、createSecret
createSecret
delete
、deploy
、patch
、promote
、scale
、reject
。 預設值:deploy
。
指定要執行的動作。
namespace
-
命名空間
string
。
使用 –namespace
旗標指定命令的命名空間。 如果未提供命名空間,命令將會在預設命名空間中執行。
strategy
-
策略
string
。 選擇性。
action = deploy || action = promote || action = reject
時使用 。 允許的值:canary
、none
。 預設值:none
。
指定在 promote
動作或 reject
動作之前,deploy
動作中使用的部署策略。 目前,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 Path
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
時為必要項。
指定要調整的複本數目。
mergeStrategy
-
合併策略
string
。
action = patch
時為必要項。 允許的值:json
、merge
、strategic
。 預設值:strategic
。
指定要提供的修補程序類型。
arguments
-
自變數
string
。 選擇性。
action = delete
時使用 。
指定 kubectl delete
命令的自變數。 例如:arguments: deployment hello-world foo-bar
patch
-
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
狀態之前等候的時間長度(以秒為單位)。
工作控制選項
除了工作輸入之外,所有工作都有控制選項。 如需詳細資訊,請參閱 控制項選項和一般工作屬性。
輸出變數
此工作會定義下列 輸出變數,您可以在下游步驟、作業和階段中取用這些變數。
manifestsBundle
指定製作動作所建立之指令清單組合的位置。
備註
備註
此工作有較新版本可供使用 connectionType
屬性,以不同方式為 Kubernetes 叢集提供其他支援。 如需詳細資訊,請參閱 KubernetesManifest@1 和 KubernetesManifest@1 服務連線備註
在組建或發行管線中使用 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 指令清單:工作的
bake
動作可讓您將範本製作成 Kubernetes 指令清單檔案。 動作會使用 Helm、Compose 和 Kustomize 等工具。 透過製作,這些 Kubernetes 指令清單檔案可用於部署至叢集。部署策略:選擇具有
deploy
動作的canary
策略,會導致建立後綴為-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 變數 | 任意 |
代理程式版本 | 所有支援的代理程式版本。 |
工作類別 | 部署 |