6.9. func.yaml의 함수 프로젝트 구성

func.yaml 파일에는 함수 프로젝트의 구성이 포함되어 있습니다. func.yaml 에 지정된 값은 kn func 명령을 실행할 때 사용됩니다. 예를 들어 kn func build 명령을 실행하면 빌드 필드의 값이 사용됩니다. 경우에 따라 명령줄 플래그 또는 환경 변수로 이러한 값을 재정의할 수 있습니다.

6.9.1. func.yaml의 구성 가능한 필드

func.yaml의 대부분의 필드는 함수를 생성, 빌드 및 배포할 때 자동으로 생성됩니다. 그러나 함수 이름 또는 이미지 이름과 같은 사항을 변경하기 위해 수동으로 변경하는 필드도 있습니다.

6.9.1.1. buildEnvs

buildEnvs 필드를 사용하면 함수를 빌드하는 환경에서 사용할 수 있도록 환경 변수를 설정할 수 있습니다. envs 를 사용하여 설정된 변수와는 달리 함수 런타임에서는 buildEnv 를 사용하여 설정된 변수를 사용할 수 없습니다.

값에서 직접 buildEnv 변수를 설정할 수 있습니다. 다음 예제에서 EXAMPLE1 이라는 buildEnv 변수에는 하나의 값이 직접 할당됩니다.

buildEnvs:
- name: EXAMPLE1
  value: one

로컬 환경 변수에서 buildEnv 변수를 설정할 수도 있습니다. 다음 예제에서 EXAMPLE2 라는 buildEnv 변수에는 LOCAL_ENV_VAR 로컬 환경 변수의 값이 할당됩니다.

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

6.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
구성 맵의 키-값 쌍에서 가져온 환경 변수 세트.

6.9.1.3. builder

builder 필드는 함수에서 이미지를 빌드하는 데 사용하는 전략을 지정합니다. 이는 pack 또는 s2i 의 값을 허용합니다.

6.9.1.4. Build

빌드 필드는 함수를 빌드하는 방법을 나타냅니다. 값 local 은 함수가 시스템에서 로컬로 빌드되었음을 나타냅니다. 값 gitgit 필드에 지정된 값을 사용하여 함수가 클러스터에 빌드되었음을 나타냅니다.

6.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에 있는 볼륨으로 마운트됩니다.

6.9.1.6. options

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: 배포된 함수가 있는 컨테이너에 대한 메모리 리소스 요청입니다.
    • 제한

      • 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

6.9.1.7. image

image 필드는 해당 함수의 이미지 이름을 빌드한 후 설정합니다. 이 필드는 필요에 따라 수정할 수 있습니다. 이 경우 다음에 kn func build 또는 kn func deploy를 실행하면 함수 이미지가 새 이름으로 생성됩니다.

6.9.1.8. imageDigest

imageDigest 필드에는 함수가 배포될 때 이미지 매니페스트의 SHA256 해시가 포함됩니다. 이 값은 변경하지 마십시오.

6.9.1.9. labels

labels 필드를 사용하면 배포된 함수에 라벨을 설정할 수 있습니다.

레이블은 값에서 직접 설정할 수 있습니다. 다음 예에서 역할 키가 있는 레이블에는 backend 값이 직접 할당됩니다.

labels:
- key: role
  value: backend

로컬 환경 변수에서 레이블을 설정할 수도 있습니다. 다음 예에서 author 키가 있는 레이블에는 USER 로컬 환경 변수의 값이 할당됩니다.

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

6.9.1.10. name

name 필드는 함수의 이름을 정의합니다. 이 값은 배포 시 Knative 서비스의 이름으로 사용됩니다. 이 필드를 변경하여 후속 배포의 함수 이름을 변경할 수 있습니다.

6.9.1.11. namespace

namespace 필드는 함수가 배포되는 네임스페이스를 지정합니다.

6.9.1.12. runtime

runtime 필드는 기능에 대한 언어 런타임(예: python )을 지정합니다.

6.9.2. func.yaml 필드의 로컬 환경 변수 참조

함수 구성에 API 키와 같은 중요한 정보를 저장하지 않으려면 로컬 환경에서 사용 가능한 환경 변수에 대한 참조를 추가할 수 있습니다. func.yaml 파일의 envs 필드를 수정하여 이 작업을 수행할 수 있습니다.

사전 요구 사항

  • 함수 프로젝트를 만들어야 합니다.
  • 로컬 환경에는 참조하려는 변수가 포함되어야 합니다.

절차

  • 로컬 환경 변수를 참조하려면 다음 구문을 사용합니다.

    {{ env:ENV_VAR }}

    ENV_VAR을 사용하려는 로컬 환경의 변수 이름으로 바꿉니다.

    예를 들어 로컬 환경에서 사용할 수 있는 API_KEY 변수가 있을 수 있습니다. MY_API_KEY 변수에 해당 값을 할당하면 함수 내에서 직접 사용할 수 있습니다.

    함수 예

    name: test
    namespace: ""
    runtime: go
    ...
    envs:
    - name: MY_API_KEY
      value: '{{ env:API_KEY }}'
    ...

6.9.3. 추가 리소스