Share via


KubernetesManifest@1 - Kubernetes v1 タスクにデプロイする

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.

入力

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

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


connectionType - サービス接続の種類
string. action != bake の場合に必要です。 使用できる値: azureResourceManager (Azure Resource Manager) kubernetesServiceConnection 、(Kubernetes Service Connection)。 既定値: kubernetesServiceConnection

Kubernetes サービス接続の種類を選択します。

  • kubernetesServiceConnection (Kubernetes Service Connection) - 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アクションの前にアクションで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 は例です。


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

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


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

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


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

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


helmChart - Helm Chart
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を使用します。

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


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

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

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

使用できる値は、filename です。


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

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


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

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


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


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 サービス接続に関する考慮事項

次のいずれかのオプションを使用して、Kubernetes サービス接続を作成できます。

  • KubeConfig
  • サービス アカウント
  • Azure サブスクリプション

Kubernetes サービス接続認証方法の選択のスクリーンショット。

Azure サブスクリプション オプションを選択するときは、サービス接続の構成時に Azure DevOps から Kubernetes にアクセスできる必要があります。 プライベート クラスターを作成した場合や、クラスターでローカル アカウントが無効になっているなど、サービス接続を作成できないさまざまな理由が考えられます。 このような場合、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 にアクセスできます。

サービス接続に関する FAQ

次のエラー メッセージが表示されます。サービス アカウントに関連付けられているシークレットが見つかりませんでした。 状況

Azure サブスクリプションを使用した Kubernetes サービス接続オプションを使用しています。 このメソッドを更新して、有効期間の長いトークンを作成しています。 これは、5 月中旬に利用可能になる予定です。 ただし、 Kubernetes のガイダンスに従って、有効期間の長いトークンは使用せず、Azure サービス接続の種類の使用を開始することをお勧めします。

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 レジストリ シークレットを作成できます。 また、プレーンテキスト変数またはシークレット変数を使用して汎用シークレットを作成することもできます。 クラスターにデプロイする前に、 アクションと共に入力を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

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

注意

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

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

  1. strategy: canarypercentage: $(someValue) を指定したデプロイ アクション。
  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

注意

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) では、 と の Kubernetes マニフェスト タスクstrategy: canaryaction: deployによって sampleapp-baseline および sampleapp-canary デプロイが作成され、レプリカの数は、タスク入力のpercentage積によって決定され、入力マニフェスト ファイルに従って最終的な安定バリアントsampleappのレプリカ数の値が決定されます。

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

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

要件

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