11.9. func.yaml の関数プロジェクト設定

func.yaml ファイルには、関数プロジェクトの設定が含まれます。kn func コマンドを実行すると、func.yaml に指定された値が使用されます。たとえば、kn func build コマンドを実行すると、build フィールドの値が使用されます。一部のケースでは、この値はコマンドラインフラグまたは環境変数で上書きできます。

11.9.1. func.yaml の設定可能なフィールド

func.yaml のフィールドの多くは、関数の作成、ビルド、およびデプロイ時に自動的に生成されます。ただし、関数名またはイメージ名などの変更用に手動で変更するフィールドもあります。

11.9.1.1. buildEnvs

buildEnvs フィールドを使用すると、関数をビルドする環境で利用できる環境変数を設定できます。envs を使用して設定する変数とは異なり、buildEnv を使用して設定する変数は、関数の実行時には使用できません。

buildEnv 変数を値から直接設定できます。以下の例では、EXAMPLE1 という名前の buildEnv 変数に値 one が直接割り当てられます。

buildEnvs:
- name: EXAMPLE1
  value: one

また、ローカルの環境変数から buildEnv 変数を設定することもできます。以下の例では、EXAMPLE2 という名前の buildEnv 変数にローカル環境変数 LOCAL_ENV_VAR の値が割り当てられます。

buildEnvs:
- name: EXAMPLE1
  value: '{{ env:LOCAL_ENV_VAR }}'

11.9.1.2. envs

envs フィールドを使用すると、ランタイム時に関数で使用できるように環境変数を設定できます。環境変数は、複数の異なる方法で設定できます。

  1. 値から直接設定します。
  2. ローカル環境変数に割り当てられた値から設定します。詳細は、func.yaml フィールドからのローカル環境変数の参照のセクションを参照してください。
  3. シークレットまたは設定マップに格納されているキーと値のペアから設定します。
  4. 作成された環境変数の名前として使用されるキーを使用して、シークレットまたは設定マップに格納されているすべてのキーと値のペアをインポートすることもできます。

以下の例は、環境変数を設定するさまざまな方法を示しています。

name: test
namespace: ""
runtime: go
...
envs:
- name: EXAMPLE1 1
  value: value
- name: EXAMPLE2 2
  value: '{{ env:LOCAL_ENV_VALUE }}'
- name: EXAMPLE3 3
  value: '{{ secret:mysecret:key }}'
- name: EXAMPLE4 4
  value: '{{ configMap:myconfigmap:key }}'
- value: '{{ secret:mysecret2 }}' 5
- value: '{{ configMap:myconfigmap2 }}' 6
1
値から直接設定された環境変数。
2
ローカル環境変数に割り当てられた値から設定された環境変数。
3
シークレットに格納されているキーと値のペアから割り当てられた環境変数。
4
設定マップに保存されるキーと値のペアから割り当てられる環境変数。
5
シークレットのキーと値のペアからインポートされた環境変数のセット。
6
設定マップのキーと値のペアからインポートされた環境変数のセット。

11.9.1.3. builder

builder フィールドは、機能がイメージを構築するために使用する戦略を指定します。pack または s2i の値を受け入れます。

11.9.1.4. build

build フィールドは、機能を構築する方法を示します。値 local は、機能がマシン上でローカルに構築されていることを示します。値 git は、機能が git フィールドで指定された値を使用してクラスター上に構築されていることを示します。

11.9.1.5. volumes

以下の例のように、volumes フィールドを使用すると、指定したパスで関数にアクセスできるボリュームとしてシークレットと設定マップをマウントできます。

name: test
namespace: ""
runtime: go
...
volumes:
- secret: mysecret 1
  path: /workspace/secret
- configMap: myconfigmap 2
  path: /workspace/configmap
1
mysecret シークレットは、/workspace/secret にあるボリュームとしてマウントされます。
2
myconfigmap 設定マップは、/workspace/configmap にあるボリュームとしてマウントされます。

11.9.1.6. オプション

options フィールドを使用すると、自動スケーリングなど、デプロイされた関数の Knative Service プロパティーを変更できます。これらのオプションが設定されていない場合は、デフォルトのオプションが使用されます。

これらのオプションを利用できます。

  • scale

    • min: レプリカの最小数。負ではない整数でなければなりません。デフォルトは 0 です。
    • max: レプリカの最大数。負ではない整数でなければなりません。デフォルトは 0 で、これは制限がないことを意味します。
    • metric: Autoscaler によって監視されるメトリクスタイプを定義します。これは、デフォルトの concurrency、または rps に設定できます。
    • target: 同時に受信する要求の数に基づくスケールアップのタイミングの推奨。target オプションは、0.01 より大きい浮動小数点値を指定できます。options.resources.limits.concurrency が設定されていない限り、デフォルトは 100 になります。この場合、target はデフォルトでその値になります。
    • utilization: スケールアップする前に許可された同時リクエスト使用率のパーセンテージ。1 から 100 までの浮動小数点値を指定できます。デフォルトは 70 です。
  • resources

    • requests

      • cpu: デプロイされた関数を持つコンテナーの CPU リソース要求。
      • memory: デプロイされた関数を持つコンテナーのメモリーリソース要求。
    • limits

      • cpu: デプロイされた関数を持つコンテナーの CPU リソース制限。
      • memory: デプロイされた関数を持つコンテナーのメモリーリソース制限。
      • concurrency: 単一レプリカによって処理される同時要求のハード制限。0 以上の整数値を指定できます。デフォルトは 0 です (制限なしを意味します)。

これは、scale オプションの設定例です。

name: test
namespace: ""
runtime: go
...
options:
  scale:
    min: 0
    max: 10
    metric: concurrency
    target: 75
    utilization: 75
  resources:
    requests:
      cpu: 100m
      memory: 128Mi
    limits:
      cpu: 1000m
      memory: 256Mi
      concurrency: 100

11.9.1.7. image

image フィールドは、関数がビルドされた後の関数のイメージ名を設定します。このフィールドは必要に応じて変更できます。変更する場合、次に kn func build または kn func deploy を実行すると、関数イメージは新しい名前で作成されます。

11.9.1.8. imageDigest

imageDigest フィールドには、関数のデプロイ時のイメージマニフェストの SHA256 ハッシュが含まれます。この値は変更しないでください。

11.9.1.9. labels

labels フィールドを使用すると、デプロイされた関数にラベルを設定できます。

値から直接ラベルを設定できます。以下の例では、role キーを持つラベルに backend の値が直接割り当てられます。

labels:
- key: role
  value: backend

ローカル環境変数からラベルを設定することもできます。以下の例では、author キーの付いたラベルに USER ローカル環境変数の値が割り当てられます。

labels:
- key: author
  value: '{{ env:USER }}'

11.9.1.10. name

name フィールドは、関数の名前を定義します。この値は、デプロイ時に Knative サービスの名前として使用されます。このフィールドを変更して、後続のデプロイメントで関数の名前を変更できます。

11.9.1.11. namespace

namespace フィールドは、関数がデプロイされる namespace を指定します。

11.9.1.12. runtime

runtime フィールドは、関数の言語ランタイムを指定します (例: python)。