11.3. クラスター上での機能の構築とデプロイ

関数をローカルでビルドする代わりに、クラスターで直接関数をビルドできます。このワークフローをローカル開発マシンで使用する場合は、関数のソースコードのみを操作する必要があります。これは、たとえば、docker や podman などのクラスター上の関数構築ツールをインストールできない場合に役立ちます。

11.3.1. クラスターでの関数のビルドとデプロイ

Knative (kn) CLI を使用して、関数プロジェクトのビルドを開始し、関数をクラスターに直接デプロイできます。この方法で関数プロジェクトをビルドするには、関数プロジェクトのソースコードが、クラスターにアクセスできる Git リポジトリーブランチに存在する必要があります。

前提条件

  • Red Hat OpenShift パイプラインをクラスターにインストールする必要がある。
  • OpenShift CLI (oc) がインストールされている。
  • Knative (kn) CLI をインストールしている。

手順

  1. パイプラインを実行して関数をデプロイする各 namespace で、次のリソースを作成する必要があります。

    1. パイプラインで Source-to-Image を使用できるように s2i Tekton タスクを作成します。

      $ oc apply -f https://raw.githubusercontent.com/openshift-knative/kn-plugin-func/serverless-1.28.0/pipelines/resources/tekton/task/func-s2i/0.1/func-s2i.yaml
    2. kn func deploy Tekton タスクを作成して、パイプラインに関数をデプロイできるようにします。

      $ oc apply -f https://raw.githubusercontent.com/openshift-knative/kn-plugin-func/serverless-1.28.0/pipelines/resources/tekton/task/func-deploy/0.1/func-deploy.yaml
  2. 関数を作成します。

    $ kn func create <function_name> -l <runtime>
  3. 新しい関数プロジェクトを作成したら、プロジェクトを Git リポジトリーに追加し、リポジトリーがクラスターで使用可能であることを確認する必要があります。この Git リポジトリーに関する情報は、次のステップで func.yaml ファイルを更新するために使用されます。
  4. 関数プロジェクトの func.yaml ファイルの設定を更新して、Git リポジトリーのクラスター上ビルドを有効にします。

    ...
    git:
      url: <git_repository_url> 1
      revision: main 2
      contextDir: <directory_path> 3
    ...
    1
    必須。関数のソースコードを含む Git リポジトリーを指定します。
    2
    オプション。使用する Git リポジトリーのリビジョンを指定します。これは、ブランチ、タグ、またはコミットにすることができます。
    3
    オプション。関数が Git リポジトリーのルートフォルダーにない場合は、関数のディレクトリーパスを指定します。
  5. 関数のビジネスロジックを実装します。次に、Git を使用して変更をコミットしてプッシュします。
  6. 関数をデプロイします。

    $ kn func deploy --remote

    関数設定で参照されているコンテナーレジストリーにログインしていない場合は、関数イメージをホストするリモートコンテナーレジストリーの資格情報を入力するように求められます。

    出力例とプロンプト

    🕕 Creating Pipeline resources
    Please provide credentials for image registry used by Pipeline.
    ? Server: https://index.docker.io/v1/
    ? Username: my-repo
    ? Password: ********
       Function deployed at URL: http://test-function.default.svc.cluster.local

  7. 関数を更新するには、Git を使用して新しい変更をコミットしてプッシュしてから、kn func deploy --remote コマンドを再度実行します。

11.3.2. 関数リビジョンの指定

関数をビルドしてクラスターにデプロイするときは、リポジトリー内の Git リポジトリー、ブランチ、およびサブディレクトリーを指定して、関数コードの場所を指定する必要があります。main ブランチを使用する場合は、ブランチを指定する必要はありません。同様に、関数がリポジトリーのルートにある場合、サブディレクトリーを指定する必要はありません。これらのパラメーターは、func.yaml 設定ファイルで指定するか、kn func deploy コマンドでフラグを使用して指定できます。

前提条件

  • Red Hat OpenShift パイプラインをクラスターにインストールする必要がある。
  • OpenShift (oc) CLI がインストールされている。
  • Knative (kn) CLI をインストールしている。

手順

  • 関数をデプロイします。

    $ kn func deploy --remote \ 1
                     --git-url <repo-url> \ 2
                     [--git-branch <branch>] \ 3
                     [--git-dir <function-dir>] 4
    1
    --remote フラグを使用すると、ビルドはリモートで実行されます。
    2
    <repo-url> を Git リポジトリーの URL に置き換えます。
    3
    <branch> を Git ブランチ、タグ、またはコミットに置き換えます。main ブランチで最新のコミットを使用している場合は、このフラグをスキップできます。
    4
    <function-dir> がリポジトリーのルートディレクトリーと異なる場合は、関数を含むディレクトリーに置き換えます。

    以下に例を示します。

    $ kn func deploy --remote \
                     --git-url https://example.com/alice/myfunc.git \
                     --git-branch my-feature \
                     --git-dir functions/example-func/