kubernetes原生pipeline

Tektonパイプラインは、タスクとワークフローを管理するためのパイプラインのK8Sネイティブ、ポッドに実行するタスク、カスタムCRDで、というように、私はtektonを読んだ後に感じることは非常に強力ですが、少し過剰設計されており、の単純なドローンはありません柔軟かつ寛大な感覚。

仕事

Tektonパイプラインの主な目標は、単独で、またはパイプラインの操作の一部として、あなたのタスクを実行することです。Kubernetesポッドとして各タスクは、クラスタ上で自分のコンテナとして、各ステップを実行します。この考えはなく、以下、タスク実行エンジンとしてkubernetesする計画があり、エッセンスドローン、ドローン事実を獲得しました。

タスクが実行されるべき作業を定義し、例えば、簡単な作業です。

apiVersion:tekton.dev/v1alpha1 
種類:タスクの
メタデータ:
  名前:エコーハローワールド
スペック:
  手順:
    -名前:エコー
      画像:Ubuntuの
      コマンド:
        -エコー
      引数:
        - "Hello World"の

これは、タスクシーケンスによって実行される一連のステップであるコマンドTaskRunを作成するときに、この設定手順では、ほぼ正確にドローンと同じで、タスクが明確に定義され、実行されていない、それが実行されます。これは、トリガーの同等合理的です

apiVersion:tekton.dev/v1alpha1 
種類:TaskRunの
メタデータ:
  名前:エコーハローワールド・タスク・ラン
スペック:
  taskRefの:
    名前:エコーハローワールド
  トリガー:
    タイプ:マニュアル
kubectlは、-f <名前のファイルを適用します。 YAML>

查看TaskRun kubectl GET taskruns /エコーハローワールド・タスク・ラン-o YAML

apiVersion:tekton.dev/v1alpha1 
種類:TaskRunの
メタデータ:
  creationTimestamp:2018-12-11T15:49:13Zの
  世代:1 
  名:エコーハロー、ワールドタスク実行
  の名前空間:デフォルト
  resourceVersion: "6706789" 
  selfLink:/ APIを/ tekton.dev/v1alpha1/namespaces/default/taskruns/echo-hello-world-task-run 
  UID:4e96e9c6-fd5c-11e8-9129-42010a8a0fdc 
スペック:
  世代:1つの
  入力:{} 
  出力:{} 
  taskRefの:
    名:エコー-hello世界
  taskSpec:nullの
  トリガー:
    タイプ:手動
状態:
  条件:
    - lastTransitionTime:2018-12-11T15:50:09Zの 
      状態: "真"
      種類:成功 
  podName:エコーハロー、ワールドタスク実行ポッド85ca51 
  のstartTime:2018-12-11T15:49:39Zの
  ステップ:
    -終了:
        ContainerIDの:ドッカ://fcfe4a004...6729d6d2ad53faff41の
        終了コード:0 
        finishedAt: 2018-12-11T15:50:01Zの
        理由:完了
        startedAt:2018-12-11T15:50:01Z 
    -終了:
        ContainerIDの:ドッキングウィンドウ://fe86fc5f7...eb429697b44ce4a5b 
        0:終了コード
        finishedAt:2018-12-11T15:50: 02Zの
        理由:完了
        startedAt:2018-12-11T15:50:02Z

成功= Trueのステータス表示タスクが正常に実行されました。

タスクの入力と出力

より一般的なシナリオでは、タスクは、入力と出力のリソースに対処するための複数のステップが必要です。例えば、タスクのGitHubはドッカーミラーから構成ソースとリポジトリから得ることができます。

入力(例えば、コード)、タスクを定義するための出力(例えば、ドッカーミラー)PipelinesResources。システム定義のリソースタイプが用意され、次のように通常必要な2つのリソースの例ですがあります。

リソースは、あなたのコードをコンパイルするためにgitにすることができます。

apiVersion:tekton.dev/v1alpha1 
種類:PipelineResourceの
メタデータ:
  名前:skaffold-のgit 
仕様:
  タイプ:Gitの
  のparams:
    -名前:リビジョン
      値:マスター
    -名前:URL 
      値:https://github.com/GoogleContainerTools/skaffold

リソースにコンパイルする画像は、ミラータスクを表します。

apiVersion:tekton.dev/v1alpha1 
種類:PipelineResourceの
メタデータ:
  名前:skaffold像leeroyウェブの
仕様:
  タイプ:画像
  のparams:
    -名前:URL 
      値:gcr.io//leeroy-web

以下は、タスクの入力と出力です。GitHubのリポジトリリソースが入力され、出力は、ソース画像から生成されます。ミッションのコマンドテンプレートのパラメータのサポート、タスクが一定の値を定義することであるので、パラメータは実行時に変更することができます。

apiVersion:tekton.dev/v1alpha1 
種類:タスクの
メタデータ:
  名前:ビルドドッキングウィンドウ-画像から-のgit-ソース
仕様:
  入力:
    リソース:
      -名前:ドッカ・ソースの
        タイプ:Gitの
    のparams:
      -名前:pathToDockerFile#这些参数都是可以自定义的
        説明:構築するdockerfileへのパス
        デフォルト:/ワークスペース/ドッカーソース/ dockerfile 
      -名:pathToContext 
        説明:
          Kanikoによって使用されるビルド・コンテキスト
          (https://github.com/GoogleContainerTools/kaniko#kaniko -build-コンテキスト)
        デフォルト:/ワークスペース/ドッキングウィンドウ-ソース
  出力:
    リソース: 
      -名前:builtImage 
        タイプ:イメージ・
  ステップ:
    -名前:ビルドおよびプッシュ
      画像:画像gcr.io/kaniko-project/executorの#特定の機能がドッカー構築するために使用することができます
      コマンドを:
        - / kaniko /エグゼキュータの
      引数:
        - - -dockerfile = $ {inputs.params.pathToDockerFile}#pathToDockerFile元の時間パラメータは、上記で定義されている
        - --destination outputs.resources.builtImage.url} = $ { 
        - } --context = $ {inputs.params.pathToContext

TaskRunは、タスクステップを実行することに加えて、パラメータテンプレートの値のために配置され、定義された入力及び出力値PipelineResourcesに結合しました。

apiVersion:tekton.dev/v1alpha1 
種類:TaskRun 
メタデータ:
  名前:ビルドドッカー像から-のgit-ソース・タスク-RUNの
スペック:
  taskRefの:
    名前:ビルドドッカー像から-のgit-出典
  トリガー:
    タイプ:マニュアル
  :入力
    の資源:
      -名前:ドッカー-ソース
        resourceRef:
          名前:skaffold-のgit 
    のparams:#タスクへの引数、その定義作業を繰り返す必要はありませんが、唯一の入力、出力を上げる必要があり、taskrunその他を実行することができますときに実行エンジニアリング、タスク・フローを再利用することができ、ドローンよりも良いと言って、この時点から切り離さ
      -名前:pathToDockerFileの
        値:Dockerfile 
      -名前:pathToContext
        値:/ワークスペース/ドッキングウィンドウ-ソース/例/ microservices / leeroy-ウェブ#configure:あなたのソースに応じて変更される可能性があり
  出力:
    リソース:
      -名前:builtImage 
        resourceRef:
          名前:skaffold像Leeroy-#これは、上記で指定したWebリソースです

PS:入力出力は死者を制限してはならない限り、それはのようなパラメータをサポートできるように、両方の名前と呼ばれる必要があります。たとえば、リソースの定義は、指定されたドッキングウィンドウのイメージを構築構築するために呼び出さ:

apiVersion:tekton.dev/v1alpha1 
種類:PipelineResourceの
メタデータ:
  名前:skaffold像leeroyウェブの
仕様:
  タイプ:画像
  のparams:
    -名前:URL 
      値:ドッキングウィンドウ・イン・ドッカ:最新

タスク年:

apiVersion:tekton.dev/v1alpha1 
種類:タスクの
メタデータ:
  名前:ビルドドッキングウィンドウ-画像から-のgit-ソース
仕様:
  ビルド:
     リソース:
     -名前:ビルド
       タイプ:画像
  のparams:
  -名前:ビルドイメージ
    デフォルト:docker-で、ドッキングウィンドウ:最新
  のステップ:
      -名前:ビルドおよびプッシュ
      イメージ:$ {build.params.build、画像}    

私は、このような拡張機能、狭い上の入力のみ出力を行うことができるようにする必要性を感じます

すべての情報パイプラインkubectlをゲットするビルドパイプライン

NAMEのAGE 
taskruns / 30代・ドッカ像から-のgit-ソース・タスク・ラン構築

NAMEのAGEの
pipelineresources / skaffold-gitの6メートル
pipelineresources / skaffold像leeroyウェブ7メートルの

NAMEのAGEの
タスクを/ビルドドッカ像from- gitのソース7メートル

出力TaskRunを表示するには、次のコマンドを使用します。

kubectl GET taskruns /ビルドドッキングウィンドウ-画像から-のgit-ソース・タスク・ラン-o YAML
apiVersion:tekton.dev/v1alpha1 
種類:TaskRunの
メタデータ:
  creationTimestamp:2018-12-11T18:14:29Zの
  世代:1 
  名:ビルドドッキングウィンドウ-画像から-のgit-ソース・タスク実行
  の名前空間をデフォルト
  resourceVersionを:「6733537を「
  selfLink:/apis/tekton.dev/v1alpha1/namespaces/default/taskruns/build-docker-image-from-git-source-task-run 
  UID:99d297fd-fd70-11e8-9129-42010a8a0fdc 
スペック:
  世代:1つの
  入力:
    のparams:
      -名前:pathToDockerFileの
        値:Dockerfile 
      -名前:pathToContextの
        値:/ワークスペース/ gitのソース/例/ microservices / leeroy-ウェブ#configure:あなたのソースに応じて変更されることがあり
    リソース:
      -名前:gitのソース 
        パス:ヌル
        resourceRef:
          名:skaffold-のgit 
  出力:
    リソース:
      -名前:builtImageの
        パス:ヌル
        resourceRef:
          名前:skaffold像leeroyウェブ
  taskRefの:
    名前:ビルドドッキングウィンドウ-画像から-gitのソース
  taskSpec:nullの
  トリガー:
    タイプ:手動
状態:
  条件:
    - lastTransitionTime:2018-12-11T18:15:09Zの
      状態: "真" 
      のタイプ:成功
  podName:ビルドドッカ像-からのgit-ソース・タスク・ランをポッド24d414 
  のstartTime:2018-12-11T18:14:29Zの
  ステップは:
    -終了します: 
        ContainerIDの:ドッキングウィンドウ://138ce30c722eed....c830c9d9005a0542 
        終了コード:0 
        2018-12-11T18:14:47ZのfinishedAt 
        理由:完了
        startedAt:2018-12-11T18:14:47Z 
    -終了:
        ContainerIDの:ドッキングウィンドウ:// 4a75136c029fb1を... .4c94b348d4f67744 
        終了コード:0 
        finishedAt:2018-12-11T18:14:48Zの
        理由:完了
        startedAt:2018-12-11T18:14:48Z

ステータス表示、タスクの成功= Trueのタイプが正常に実行され、あなたはドッカー画像を生成するかどうかを確認することができます。

パイプライン

パイプラインは、実行の順序に従ってタスクリストを定義するだけでなく、出力フィールドからの入力を使用して、任意の後続のタスクとして使用されるべきかどうかを示し、および(runAfterを使用してフィールドから)実行の順序を示しています。あなたは、タスク内の同じテンプレートもパイプラインで使用することができます。

apiVersion:tekton.dev/v1alpha1 
種類:パイプラインの
メタデータ:
  名前:チュートリアル・パイプラインの
仕様:
  リソース:
    -名前:ソース・レポの
      タイプ:gitの
    -名前:ウェブ画像
      タイプ:画像
  タスク:
    -名前:ビルドskaffold-ウェブ#编译与打镜像任务、上面已经介绍过
      taskRefの:
        名前:ビルドドッカー像から-gitのソース
      paramsは:
        -名前:pathToDockerFileの
          値:Dockerfile 
        -名:pathToContextの
          値:/ワークスペース/例/ microservices / leeroyウェブ#configure:あなたのソースに応じて変更される可能性があり
      、リソース:
        入力: 
          -名前:ワークスペース 
            リソース:ソース・レポ
        出力:
          -名前:イメージ・
            リソース:ウェブ画像
    -名:配備-ウェブ#展開
      taskRefの:
        名前:展開は、ここで使用して-kubectl#はK8Sによってタスクの展開を紹介し、我々以下のことがあるかを確認する
      リソース:
        入力:#入力を定義し、ここでの入力は、実際のミッションで出力されます
          -名前:ワークスペースの
            リソース:ソース・レポ
          -名前:など、この画像のように画像番号を生成するためにミッションにある
            リソースを:ウェブ-image 
            から:同じのような#パイプ、入力タスクとして、このタスクの出力
              -ビルドskaffoldウェブ
      params:これらのパラメータに#注意を払うは、パラメータに入力を覆って、タスク・テンプレートに渡され 
        -名前:パス
          値:/workspace/examples/microservices/leeroy-web/kubernetes/deployment.yaml #configureは、ソースに応じて変更されることがあり
        yqArgの: -名
          値: "-d1" 
        -名前:yamlPathToImageの
          値:「spec.template.spec。コンテナ[0] .image」

パイプラインは、上記のデプロイ、使用して-kubectlさんと呼ばれるタスクを引用しています:

apiVersion:tekton.dev/v1alpha1 
種類:タスクの
メタデータ:
  名前:展開-使用を-kubectl 
仕様:
  入力:
    リソース:
      -名:ワークスペースの
        タイプ:gitの
      -名前:イメージの
        種類:画像
    のparams:
      -名前:パスの
        説明:へのパス適用するマニフェスト
      -名前:yqArgの
        説明:
          オーケー、これはハックですが、私は右`ダウン-d1`ハードコーディング感じなかった
          以下
      -名前:yamlPathToImage 
        説明:
          YAMLのマニフェストに交換するイメージのパス(引数YQ)へ
  のステップ:
    -名前:置き換える画像#ミラー交換の最初のステップ
      の画像:主にレンダリングするテンプレートであるmikefarah / YQ位同様に、特定のミラーの機能、及び無人機、
      [「YQ」]:コマンド
      引数を:
        - 「W」
        - 「 - I " 
        - " $ {inputs.params.yqArg} " 
        - " $ {inputs.params.path} " 
        - " $ {inputs.params.yamlPathToImage} " 
        - " $ {inputs.resources.image.url} " 
    -名:実行kubectl#ステップがkubectl実行
      イメージ:lachlanevenson / K8S-kubectl 
      コマンド:[ "kubectl"] 
      引数:
        - "適用" 
        - "-f" 
        - "$ {inputs.params.path}" #これはYAMLですファイルの場所

次のようにパイプラインを実行するには、PipelineRunを作成してください。

apiVersion:tekton.dev/v1alpha1 
種類:PipelineRunの
メタデータ:
  名前:チュートリアル・パイプライン実行-1 
仕様:
  pipelineRef:
    名前:チュートリアル・パイプライン
  トリガー:
    タイプ:マニュアル
  リソース:
    -名前:ソース・レポ
      resourceRef:
        名前:skaffold-gitの
    -名前:ウェブ画像
      resourceRef:
        名前:skaffold像leeroyウェブ

パイプラインを表示し、実行します

kubectl適用-f <名前・オブ・file.yaml> kubectl获取pipelineruns /チュートリアル・パイプライン・ラン-1 -o YAML

概要

初心者は、周りの少しを感じるだろうが、このデザインは、私が個人的に以下のメリットと考えて、カップリングを理解することです。

優位

あなたも、機械学習のオフライン解析をミラーリングビルド、そのようなタスクを実行するために使用されるオンライン夜間アイドル状態のリソースなどのリソースをより有効に活用することができるようにK8Sは、タスクの実行エンジンとしてクラスタ化することができます。デカップリングは、他のタスクの出力など、タスク、タスク・テンプレートは、誰もが、入力と出力の概念の定義を繰り返すを必要とせずに再利用するために使用することができ、より良い入力ください。

恵まれません

タスクファイルは、次のに容易に生成するように設計上のビット、ビットの周りに配置することができるいくつかの簡単なシナリオでは、出力はコントラストドローン容器に、分散型入力システムに依存しているが、データボリュームパイプライン占有率であります全体的に、タスク、およびタスクベースのクラスタでのgitドッキングウィンドウミラー倉庫に頼る必要があり、入力と出力、トラブルのビットを行う、良い解決策は、タスク間でデータを転送するのは簡単、パイプラインの共有ボリュームを設定しようとするK8Sに分散ストレージを使用することです彼は道が正しいと使用することができます多くのシーンがあると述べました。

おすすめ

転載: blog.csdn.net/weixin_43226231/article/details/90199711