前回の記事では、Tektonのインストールを紹介し、簡単なテストをしましたが、原因はわかりませんでした。この記事では主にその理由を理解し、学ぶことを目指します。 Tekton は、Kubernetes CRD に基づいてパイプラインを定義するオープンソースのクラウドネイティブ CI/CD プロジェクトです。強力で拡張も簡単です。 前回の記事では、Tekton をインストールした後、インストールされた CRD を次のように確認できます。 # kubectlでcrd を取得します| grep テクトン その中でも、Task、TaskRun、Pipeline、PipelineRun、PipelineResource、Condition がコア CRD であり、ここでは主にこれらを紹介します。
ヒント: PipelineResource と Condition は両方とも非推奨になります。ただし、下位バージョンでも引き続き使用されるため、ここで簡単に紹介します。 上の図に示すように、パイプラインは多数のタスクで構成され、各タスクは多数のステップで構成されます。実際の作業では、さまざまなタスクを柔軟に定義し、必要に応じてタスクを任意に組み合わせて、さまざまな要件を満たすさまざまなパイプラインを形成することができます。 実施原則上記では、Tekton の主な CRD とその機能について簡単に紹介しました。それで、Tekton はこれらの CRD をどのように直列に接続するのでしょうか? Tekton をインストールすると、次の 2 つの Pod が表示されます。 # kubectl get po -n tekton - パイプライン 1 つは tekton-pipelines-controller で、もう 1 つは tekton-pipelines-webhook です。実際、命名方法から、1 つは CRD オブジェクトを監視するために使用される tekton コントローラーであり、もう 1 つは CRD 検証を実行するために使用される tekton ネットワーク フックであることがわかります。その中で、tekton-pipelines-controller は Tekton のコア実装 Pod です。 tekton-pipelines-controller が起動すると、PipelineRunController と TaskRunController の 2 つのコントローラーが初期化されます。次のように、main.go (cmd/controller/main.go) を通じて確認できます。 ...... 上記のように、初期化には taskrun.NewController と pipelinerun.NewController が使用され、次に sharedmain.MainWithConfig を通じて controller.StartAll が呼び出され、すべてのコントローラーが起動されます。 PipelineRunController は、PipelineRun オブジェクトの変更をリッスンし、PipelineSpec からタスク リストを取得して有向非巡回グラフ (DAG) を構築し、DAG を走査してスケジュール可能なタスク ノードを見つけて、対応する TaskRun オブジェクトを作成します。詳細については、(pkg/reconciler/pipelinerun/pipelinerun.go) の reconcile メソッドを通じて確認できます。 TaskRunController は、TaskRun オブジェクトの変更を監視するときに、TaskRun 内の Task を Pod に変換し、Kubernetes によって実行するようにスケジュールします。 (pkg/reconciler/taskrun/taskrun.go) の reconcile メソッドを通じて表示できます。 Kubernetes の OwnerReference メカニズムを使用することで、PipelineRun が TaskRun を所有し、TaskRun が Pod を所有し、Pod のステータスが変化すると TaskRun の調整ロジックがトリガーされます。 TaskRun のステータスが変化すると、PipelineRun の調整ロジックがトリガーされます。 TaskRun Pod が実行状態になると、最初のステップ コンテナーに実行を通知します (entrypoint と呼ばれるバイナリ ファイルを通じて)。 もちろん、このエントリポイントバイナリファイルにも実行条件があります。提供されたコマンドは、パイプライン ステータス アノテーションが Kubernetes ダウンロード API を介してファイルとしてステップ コンテナーに挿入された場合にのみ開始されます。この文章は少しわかりにくいでしょうか?公式声明によると、Tekton Pipeline は Kubernetes Annotation を通じて Pipeline のステータスを追跡し、これらの注釈は Kubernetes Download API を通じてファイルとして Step Container に挿入されます。ステップ コンテナーのエントリポイントはこれらのファイルをリッスンします。特定のアノテーションがファイルの形式で挿入されると、エントリポイントはコマンドを実行します。たとえば、タスクに 2 つのステップがある場合、2 番目のステップのエントリポイントは、最初のステップが完了したことがファイルの形式でアノテーションによって通知されるまで待機します。 全体的なプロセスを次のように整理してみましょう。
この時点で、パイプラインは完成しました。 パイプラインリソースここで最初に PipelintResource について言及するのは、次の操作で必要になることを説明するためです。 PipelineResource はリソース情報を定義するために使用されます。非推奨となりますが、古いバージョンでは引き続き使用されます。 PipelineResource の定義は次のように非常にシンプルです。 apiバージョン: tekton.dev/v1alpha1 TaskRun では、hello-word-resource リソースを参照して特定の git アドレスを取得できます。 TasksTask はタスク テンプレートです。タスクの定義には変数を含めることができ、実際の実行時には変数に値を割り当てる必要があります。 タスク入力パラメータは input.params を通じて定義されます。各入力パラメータにはデフォルト値を指定することもできます。各ステップでは、変数は $(params.A) によって参照できます。ステップ フィールドには、現在のタスクのステップが示されます。各ステップでは、コンテナを定義して特定の操作を実行します。 タスクには主に次の要素が含まれます。
タスクの定義は次のとおりです。 apiバージョン: tekton.dev/v1beta1 次のように、Docker イメージをビルドしてハブにプッシュする別のタスクを定義します。 apiバージョン: tekton.dev/v1beta1 前述のように、シェル スクリプトを直接記述することで要件を満たすことができますが、docker を使用してイメージを構築するには、ポッド マウントのようにマウントできる sock ファイルが必要です。 ステップのタイムアウトを設定するなど、ステップには次のような他の構成もあります。 手順: より多くの操作については、(https://tekton.dev/docs/pipelines/tasks/) を参照してください。 タスクランタスクが定義された後、関数を定義した場合と同様に、タスクは実行されません。関数が呼び出されなければ、その関数は実行されません。また、TaskRun は呼び出し元のように機能し、これを使用して Task 内の特定のコンテンツを実行できます。 TaskRun は、次のように、タスクに必要なパラメータを設定し、taskRef フィールドを通じてタスクを参照します。 apiバージョン: tekton.dev/v1beta1 上記の定義により、build-and-push-image タスクが関連付けられ、タスクに必要なソース パラメータがリソースを通じて定義され、次にパラメータが parms を通じて定義され、タスク内のデフォルト パラメータが置き換えられます。 実際には、タスクが適切に機能しているかどうかをテストする場合を除き、TaskRun を定義することはほとんどありません。 パイプラインTaskRun は 1 つのタスクのみを実行できます。同時に多くのタスクをオーケストレーションする必要がある場合は、Jenkinsfile を使用してさまざまなタスクをオーケストレーションするのと同じように、Pipeline を使用する必要があります。 パイプラインはタスクを配置するためのテンプレートです。 Spec.params は実行に必要な入力パラメータを宣言するために使用され、spec.tasks は特定のタスクを配置するために使用されます。さらに、runAfter を使用してタスクの順序を制御することもできます。 まず、次のように単純なパイプラインを定義します。 apiバージョン: tekton.dev/v1beta1 上記で定義したパイプラインは、build-and-push-image タスクに関連付けられています。タスクに必要な入力および出力パラメータは、パイプラインの spec.resources を通じて定義されます。ここで、spec.resources は依然として PipelineResources で定義された特定のリソースに依存します。 前述のように、パイプライン内のタスクの順序を制御する場合は、次のように runAfter パラメータを使用する必要があります。 - 名前: テスト- アプリ 上記のように、build-app タスクは test-app タスクに依存します。 さらに、次のように、前のタスクの出力を次のタスクの入力として使用することもできます。 - 名前: ビルド- アプリ 上記のように、from キーワードは他のタスクの出力をインポートするために使用されます。 Pipeline で条件判断を使用する場合は、次のように when キーワードを使用することもできます。 タスク: 注意: when と condition はタスク内で同時に使用できません。同時に使用すると無効とみなされます。 when と同じ効果を持つ別のキーワードとして condition があります。 条件の機能は、いくつかの条件でタスクを保護することです。条件が満たされた場合にのみタスクが実行されます。タスクが実行される前に、すべての条件が判断されます。すべての条件が成功した場合にのみタスクが実行され、そうでない場合は許可されません。 単純な条件文は次のように定義されます。 タスク: もちろん、条件付き制約は現在のタスクにのみ適用されます。他のタスクが現在のタスクの影響を受けない場合、それらのタスクは制約されません。 詳しい使用方法については、(https://tekton.dev/docs/pipelines/pipelines/) を参照してください。 パイプライン実行パイプラインはタスクと同じです。パイプラインを定義するだけでは、それが実行されるわけではありません。パイプラインは、実際の実行を完了するために PipelineRun を使用する必要があります。 PipelineRun は、Pipeline で定義されたタスクに対応する TaskRun を自動的に作成します。 以下は単純な PipelineRun 定義です。 apiバージョン: tekton.dev/v1beta1 このうち、 spec.pipelineRef は定義された Pipeline を関連付けるために使用され、 spec.resources は Pipeline にパラメータを渡すために使用されます。 上記の repo およびbuiltImage パラメータは、PipelineResources を通じて定義する必要があります。ただし、新しいバージョンでは、次のように resourceSpec を通じて定義することもできます。 apiバージョン: tekton.dev/v1beta1 条件Condition は Pipeline で条件判断を行うために使用されますが、新しいバージョンでは非推奨となり、上記で紹介した に置き換えられます。ここでは詳しく紹介しません。 認証管理上記では主要な CRD とその使い方を紹介しましたが、コードリポジトリのパスワードをどのように管理するかなど、他に注意すべき点はありますか?イメージリポジトリのパスワードを管理するにはどうすればよいですか?これらはすべて実際の仕事で必要になるからです。 Tekton は、PipelineRun で ServiceAccount を指定してこれを実行します。ただし、Tekton では、定義された各 Secret に対応するアノテーションを指定する必要があります。現在サポートされている注釈は次の 2 つです。
現在、これら 2 つのタイプはそれぞれ次のタイプをサポートしています。 Tekton はこれらの秘密をどのように活用するのでしょうか? これらの Secrets を使用するために、Tekton は Pod をインスタンス化するときに資格情報の初期化を実行することがわかります。 Tekton は、特定のタスク ステップを実行する前に、特定のシークレットを /tekton/creds ディレクトリに関連付けて集約します。 以下では、イメージリポジトリを例に、具体的な操作をいくつか実行してみましょう。 (1)秘密を作成する: APIバージョン: v1 このうち、tekton.dev/docker-0: [https://gcr.io](https://gcr.io) は対応する倉庫アドレスを指定するために使用されます。 (2)セバアカウントを作成する APIバージョン: v1 (3)PipelineRunでの参照: apiバージョン: tekton.dev/v1beta1 複数のサービス アカウントを同時に使用する必要がある場合はどうすればよいですか?たとえば、完成したパイプラインでは、コードをプルするときに Git アカウントを使用し、イメージをプッシュするときにイメージ リポジトリ アカウントを使用します。 現時点では、serviceAccountName は使用できなくなり、serviceAccountNames を使用する必要があります。 serviceAccountNames は、以下に示すように、タスクに関連付けられた特定のサービス アカウントを指定するために使用できるリストです。 apiバージョン: tekton.dev/v1beta1 基本的なリソースと紹介はここにあります。この記事を理解すれば、簡単なパイプラインを書くことは問題ないはずです。以降の記事では具体的な実践方法を紹介します。 |
<<: 企業のマルチクラウド戦略はどのように始めるべきでしょうか?
クラウド コンピューティングのおかげで、ユーザーは柔軟で高度かつ革新的なサービスを享受できます。さま...
vmiss は日本で新しい VPS サービスを追加しました。以前は日本の大阪データセンター (IIJ...
多くの初心者は、「SEO の最適化はどのように行うべきですか?」と尋ねます。実際、この質問に対する ...
A5ウェブマスターネットワークは6月5日に報道した。百度ウェブマスタープラットフォームの公式ニュース...
5月6日のWebmaster Network (www.admin5.com)によると、Baidu ...
モスクワに拠点を置き、1年前に営業を開始したロシアの商人、vdsina.ru を紹介します。主な事業...
みなさんこんにちは。私はSEOの専門家です。数か月間、マッサージ機ランキングサイトwww.yziyu...
ドメイン名ニュース: デジタルドメイン名は最近かなり人気があります。昨日の5037.comの使用開始...
Baidu Webmaster Platform は、すべてのウェブマスターが参加しなければならない...
人類の歴史とほぼ同期した情報表現であるテキストは、ビジュアルコミュニケーションデザインにおいても最も...
Baidu への組み込みは、すべての SEO 担当者とウェブマスターが懸念しているトピックです。特に...
著者プロフィール: 林俊は、CITIC Press および Blue Lion の契約ライターであり...
weloveservers のブラック フライデー プロモーションが始まりました。1G のメモリが年...
まず、電子商取引の概念、つまり 3 つのステップについてお話しします。電子商取引1.0の時代は、検索...
ウェブサイトの SEO 最適化の最初のステップは、TKD を設定することです。TKD は、タイトル、...