KubernetesManifest@0 - Kubernetes v0 タスクにデプロイする

ビルドまたはリリース パイプラインで 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.
# Deploy Kubernetes manifests 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: 'default' # string. Required when action != bake. Namespace. Default: default.
    #strategy: 'none' # 'canary' | 'none'. Optional. Use when action = deploy || action = promote || action = reject. Strategy. Default: none.
    #percentage: '0' # string. Required when strategy = Canary && action = deploy. Percentage. Default: 0.
    #manifests: # string. Required when action = deploy || action = promote || action = reject. Manifests. 
    #containers: # string. Optional. Use when action = deploy || action = promote. Containers. 
    #imagePullSecrets: # string. Optional. Use when action = deploy || action = promote. ImagePullSecrets. 
    #renderType: 'helm2' # 'helm2'. Optional. Use when action = bake. Render Engine. Default: helm2.
    #helmChart: # string. Required when action = bake && renderType = helm2. Helm Chart. 
    #releaseName: # string. Optional. Use when action = bake && renderType = helm2. Helm Release Name. 
    #overrideFiles: # string. Optional. Use when action = bake && renderType = helm2. Override Files. 
    #overrides: # string. Optional. Use when action = bake && renderType = helm2. Overrides. 
    #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.

入力

action - アクション
string. 使用できる値: bake、(シークレットの作成)delete、、、deploypatchpromote、、 scalerejectcreateSecret 既定値: deploy

実行する操作を指定します。


kubernetesServiceConnection - Kubernetes サービス接続
string. action != bake の場合に必要です。

Kubernetes サービス接続を指定します。


namespace - 名前 空間
string.

フラグを使用してコマンドの名前空間を –namespace 指定します。 名前空間が指定されていない場合、コマンドは既定の名前空間で実行されます。


namespace - 名前 空間
string. action != bake の場合に必要です。 既定値: default

フラグを使用してコマンドの名前空間を –namespace 指定します。 名前空間が指定されていない場合、コマンドは既定の名前空間で実行されます。


strategy - 戦略
string. 任意。 の場合は action = deploy || action = promote || action = rejectを使用します。 使用できる値: canarynone。 既定値: none

アクションまたはrejectアクションの前にアクションでdeploy使用されるデプロイ戦略をpromote指定します。 現時点では、 canary のみが許容されるデプロイ戦略です。


trafficSplitMethod - トラフィック分割方法
string. 任意。 の場合は strategy = canaryを使用します。 使用できる値: podsmi。 既定値: pod

smiの場合、割合トラフィック分割は、サービス メッシュを使用して要求レベルで実行されます。 サービス メッシュは、クラスター管理者によって設定する必要があります。このタスクは、SMI TrafficSplit オブジェクトのオーケストレーションを処理します。

podの場合、サービス メッシュがない場合、要求レベルではパーセント分割を実行できません。 代わりに、パーセンテージ入力を使用して、ベースラインとカナリアのレプリカを計算します。 計算は、安定したバリアントの入力マニフェストで指定されたレプリカの割合です。


percentage - 割合
string. strategy = Canary && action = deploy の場合に必要です。 既定値: 0

マニフェスト ファイルに含まれるワークロードのベースラインバリアントレプリカとカナリアバリアントレプリカの数を計算するために使用される割合。

指定したパーセンテージ入力の場合は、次の値を計算します。

(レプリカ数×割合) / 100

結果が整数でない場合は、ベースラインバリアントとカナリアバリアントが作成されるときに、結果の数学的フロアが使用されます。

たとえば、配置 hello-world が入力マニフェスト ファイル内にあり、タスク入力に次の行があるとします。

replicas: 4
strategy: canary
percentage: 25

この場合、デプロイ hello-world-baselinehello-world-canary はそれぞれ 1 つのレプリカで作成されます。 ベースライン バリアントは、デプロイ前の 4 レプリカバリアントである安定バージョンと同じイメージとタグを使用して作成されます。 カナリアバリアントは、新しくデプロイされた変更に対応するイメージとタグを使用して作成されます。


baselineAndCanaryReplicas - ベースライン レプリカとカナリア レプリカ
string. strategy = Canary && action = deploy && trafficSplitMethod = SMI の場合に必要です。 既定値: 1

を にsmi設定trafficSplitMethodすると、トラフィック分割の割合がサービス メッシュ プレーンで制御されます。 カナリアバリアントとベースラインバリアントのレプリカの実際の数は、トラフィックの分割とは別に制御できます。

たとえば、入力配置マニフェストで、安定したバリアントに対して 30 個のレプリカが指定されているとします。 また、タスクに対して次の入力を指定するとします。

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

この場合、安定バリアントはトラフィックの 80% を受信し、ベースラインバリアントとカナリアバリアントはそれぞれ指定された 20% の半分を受信します。 ベースラインバリアントとカナリアバリアントはそれぞれ 3 つのレプリカを受け取りません。 代わりに、指定した数のレプリカを受け取ります。つまり、それぞれが 1 つのレプリカを受信します。


manifests - マニフェスト
string. action = deploy || action = promote || action = reject の場合に必要です。

配置に使用するマニフェスト ファイルへのパスを指定します。 各行は 1 つのパスを表します。 ファイル一致パターンは、各行に許容される値です。


containers - コンテナー
string. 任意。 の場合は action = deploy || action = promote || action = bakeを使用します。

マニフェスト ファイルの置換に使用するイメージの完全修飾リソース URL を指定します。 URL contosodemo.azurecr.io/helloworld:test は例です。


containers - コンテナー
string. 任意。 の場合は action = deploy || action = promoteを使用します。

マニフェスト ファイルの置換に使用するイメージの完全修飾 URL を指定します。 この入力は、改行で区切られた形式で複数の成果物の置換の指定を受け入れます。 次に例を示します。

containers: |
  contosodemo.azurecr.io/foo:test1
  contosodemo.azurecr.io/bar:test2

この例では、入力マニフェスト ファイルのイメージ フィールドで、 と contosodemo.azurecr.io/bar へのcontosodemo.azurecr.io/fooすべての参照が検索されます。 検出された一致ごとに、 タグ test1 または test2 一致した参照が置き換えられます。


imagePullSecrets - ImagePullSecrets
string. 省略可能。 の場合は action = deploy || action = promoteを使用します。

各行に、クラスター内で既に設定されている Docker レジストリ シークレットの名前が含まれる複数行の入力を指定します。 各シークレット名は、入力マニフェスト ファイル内にあるワークロードの 下 imagePullSecrets に追加されます。


renderType - レンダリング エンジン
string. 任意。 の場合は action = bakeを使用します。 許可値: helmkomposekustomize。 既定値: helm

マニフェスト ファイルの生成に使用するレンダリングの種類を指定します。


renderType - レンダリング エンジン
string. 任意。 の場合は action = bakeを使用します。 使用できる値: helm2 (Helm 2)。 既定値: helm2

マニフェスト ファイルの生成に使用するレンダリングの種類を指定します。


dockerComposeFile - docker compose ファイルへのパス
string. action = bake && renderType = kompose の場合に必要です。

docker-compose ファイル パスを指定します。


helmChart - Helm Chart
string. action = bake && renderType = helm の場合に必要です。

ベイクする Helm グラフのパスを指定します。


helmChart - Helm Chart
string. action = bake && renderType = helm2 の場合に必要です。

ベイクする Helm グラフ パスを指定します。


releaseName - Helm リリース名
string. 省略可能。 の場合は action = bake && renderType = helmを使用します。

使用する Helm リリース名を指定します。


releaseName - Helm リリース名
string. 省略可能。 の場合は action = bake && renderType = helm2を使用します。

使用する Helm リリース名を指定します。


overrideFiles - ファイルをオーバーライドする
string. 省略可能。 の場合は action = bake && renderType = helmを使用します。

オーバーライド ファイルへのパスを受け入れる複数行入力を指定します。 ファイルは、Helm チャートのマニフェスト ファイルがベイクされるときに使用されます。


overrideFiles - ファイルをオーバーライドする
string. 省略可能。 の場合は action = bake && renderType = helm2を使用します。

オーバーライド ファイルへのパスを受け入れる複数行入力を指定します。 ファイルは、Helm チャートのマニフェスト ファイルがベイクされるときに使用されます。


overrides - オーバーライド
string. 任意。 の場合は action = bake && renderType = helmを使用します。

設定するオーバーライド値を指定します。


overrides - オーバーライド
string. 任意。 の場合は action = bake && renderType = helm2を使用します。

Helm を使用するマニフェスト ファイルをベイク処理するときに、コマンド ライン スイッチ --set を介して使用される追加のオーバーライド値を指定します。

の形式key:valueで、オーバーライド値をペアとしてkey-value指定します。 複数のオーバーライド ペアを使用する場合は、各key-valueペアをkey-value個別の行で指定します。 異なる key-value ペア間の区切り記号として改行文字を使用します。


kustomizationPath - Kustomization パス
string. 省略可能。 の場合は action = bake && renderType = kustomizeを使用します。

ファイルを含むディレクトリへのパス、またはリポジトリ ルートに対して を指定するパス サフィックスを持つ git リポジトリ URL である必要がある引数を指定 same します。


resourceToPatch - パッチを適用するリソース
string. action = patch の場合に必要です。 使用できる値: filename。 既定値: file

次のいずれかのパッチ方法を示します。

  • マニフェスト ファイルは、修正プログラムを適用するオブジェクトを識別します。
  • 個々のオブジェクトは、種類と名前によってパッチ ターゲットとして識別されます。

許容される値は 、ファイル名前です


resourceFileToPatch - ファイル パス
string. action = patch && resourceToPatch = file の場合に必要です。

パッチに使用するファイルへのパスを指定します。


kind - 種類
string. action = scale || resourceToPatch = name の場合に必要です。 許可値: deploymentreplicasetstatefulset

などdeploymentreplicaSet、K8s オブジェクトの種類を指定します。


name - 名前
string. action = scale || resourceToPatch = name の場合に必要です。

K8s オブジェクトの名前を指定します。


replicas - レプリカ数
string. action = scale の場合に必要です。

スケーリングするレプリカの数を指定します。


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 に渡して、ポッドの代わりにプライベート イメージをプルできるようにする方法です。


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
ベイク アクションによって作成されるマニフェスト バンドルの場所を指定します。

解説

Note

このタスクには、 プロパティを使用して、さまざまな方法で Kubernetes クラスターをターゲットにするための追加のサポートを提供する新しいバージョンがあります connectionType 。 詳細については、「KubernetesManifest@1KubernetesManifest@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 レジストリ シークレットを作成できます。 また、プレーンテキスト変数またはシークレット変数を使用して汎用シークレットを作成することもできます。 クラスターにデプロイする前に、 アクションと共に入力をsecretsdeploy使用して、入力マニフェスト ファイルを適切なimagePullSecrets値で拡張できます。

  • マニフェストのベイク: bake タスクのアクションを使用すると、テンプレートを Kubernetes マニフェスト ファイルにベイクできます。 アクションでは、Helm、Compose、Kustomize などのツールが使用されます。 ベイク処理では、これらの Kubernetes マニフェスト ファイルはクラスターへのデプロイに使用できます。

  • デプロイ戦略: アクションをcanary使用して戦略をdeploy選択すると、 と -canaryのサフィックスが付いたワークロード名が作成されます-baseline。 このタスクでは、次の 2 つのトラフィック分割方法がサポートされています。

    • サービス メッシュ インターフェイス: Service Mesh Interface (SMI) の抽象化により、 や IstioなどのLinkerdサービス メッシュ プロバイダーを使用した構成が可能になります。 Kubernetes マニフェスト タスクは、デプロイ戦略のライフ サイクル中に、SMI TrafficSplit オブジェクトを安定した、ベースライン、およびカナリア サービスにマップします。

      サービス メッシュに基づいてこのタスクを使用するカナリア デプロイの方が正確です。 この精度は、サービス メッシュ プロバイダーがトラフィックの細かい割合ベースの分割を可能にする方法が原因です。 サービス メッシュは、ポッドに挿入されるサービス レジストリとサイドカー コンテナーを使用します。 このインジェクションは、細かいトラフィック分割を実現するために、アプリケーション コンテナーと共に発生します。

    • サービス メッシュのない Kubernetes: サービス メッシュがない場合は、要求レベルで必要な正確な割合の分割が得られない場合があります。 ただし、安定したバリアントの横にあるベースラインバリアントとカナリアバリアントを使用してカナリアデプロイを行うことができます。

      セレクター ラベルの制約が満たされると、サービスは 3 つのワークロードバリアントのポッドに要求を送信します。 Kubernetes マニフェストは、ベースラインバリアントとカナリアバリアントを作成するときに、これらの要求を受け入れます。 このルーティング動作により、要求の合計の一部のみをカナリアにルーティングする意図した効果が実現されます。

    リリース パイプラインの 手動介入タスク または YAML パイプラインの 遅延 タスクを使用して、ベースラインワークロードとカナリアワークロードを比較します。 タスクの昇格または拒否アクションを使用する前に、比較を行います。

デプロイ アクション

次の 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

上記の例では、タスクはマニフェスト ファイルのイメージ フィールドとbar/demoイメージ foo/demo フィールドの一致を検索しようとします。 検出された一致ごとに、 または tagVariable2tagVariable1値がイメージ名にタグとして追加されます。 成果物の置換のためにコンテナー入力でダイジェストを指定することもできます。

Note

デプロイ戦略に関連する YAML 入力を使用して 、promote、および reject アクションを作成deployできますが、現在、ビルド パイプラインでは手動介入タスクのサポートは使用できません。

リリース パイプラインの場合は、デプロイ戦略に関連するアクションと入力を次の順序で使用することをお勧めします。

  1. percentage: $(someValue)strategy: canary指定されたデプロイ アクション。
  2. パイプラインを一時停止し、ベースラインバリアントをカナリアバリアントと比較できるようにする手動介入タスク。
  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

Note

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 コードは、Docker Compose の変換ツールである Kompose で生成されたマニフェスト ファイルをベイクする例です。

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 範囲に関する記事を参照してください。

カナリア デプロイを使用した安定したサービス ルートとバリアント型のサービス ルートに対する要求はどのように機能しますか?

Kubernetes のポッドとサービス間のラベル セレクター関係を使用すると、1 つのサービスが安定したバリアントとカナリア バリアントの両方に要求をルーティングするようにデプロイを設定できます。 Kubernetes マニフェスト タスクでは、カナリア デプロイのためにこれを使用します。

タスクに、入力マニフェスト ファイルで定義されているワークロード (Deployment、ReplicaSet、Pod、...) ごとに と の入力action: deploystrategy: canaryが含まれている場合は、-baselineデプロイの および -canary バリアントが作成されます。 この例では、入力マニフェスト ファイルにデプロイ sampleapp があり、パイプラインの実行番号 22 が完了すると、 という名前 sampleapp のこのデプロイの安定したバリアントがクラスターにデプロイされます。 以降の実行 (この場合は実行番号 23) では、 と を使用action: deploystrategy: canaryする Kubernetes マニフェスト タスクにより、sampleapp-baseline および sampleapp-canary デプロイが作成されます。このデプロイでは、レプリカの数は、タスク入力のpercentage積によって決定され、入力マニフェスト ファイルに従って、最終的な安定したバリアントsampleappのレプリカの必要な数の値が指定されます。

レプリカの数を除くと、ベースライン バージョンの構成は安定したバリアントと同じですが、カナリア バージョンには、現在の実行によって導入されている新しい変更があります (この場合は、実行番号 23)。 上記の手順の後にパイプラインに手動介入を設定すると、パイプライン管理者がベースラインとカナリア バージョンの主要なメトリックを評価し、カナリアの変更が安全で完全なロールアウトに十分かどうかを判断できるように、パイプラインを一時停止できます。

action: promotestrategy: canary Kubernetes マニフェスト タスクの および および action: rejectstrategy: canary の入力を使用して、カナリアの変更を昇格または拒否できます。 どちらの場合も、この手順の最後に、入力マニフェスト ファイルで宣言されたワークロードの安定したバリアントのみがクラスターにデプロイされたままになり、エフェメラル ベースラインとカナリア バージョンはクリーンアップされることに注意してください。

要件

要件 説明
パイプラインの種類 YAML、クラシック ビルド、クラシック リリース
実行日 エージェント、DeploymentGroup
確認要求 なし
Capabilities このタスクは、ジョブ内の後続のタスクに対する要求を満たしていません。
コマンドの制限 Any
設定可能な変数 Any
エージェントのバージョン サポートされているすべてのエージェント バージョン。
タスクのカテゴリ 配置