11.8. func.yaml의 함수 프로젝트 구성
func.yaml
파일에는 함수 프로젝트의 구성이 포함되어 있습니다. func.yaml
에 지정된 값은 kn func
명령을 실행할 때 사용됩니다. 예를 들어 kn func build
명령을 실행하면 빌드
필드의 값이 사용됩니다. 경우에 따라 명령줄 플래그 또는 환경 변수로 이러한 값을 재정의할 수 있습니다.
11.8.1. func.yaml의 구성 가능한 필드
func.yaml
의 대부분의 필드는 함수를 생성, 빌드 및 배포할 때 자동으로 생성됩니다. 그러나 함수 이름 또는 이미지 이름과 같은 사항을 변경하기 위해 수동으로 변경하는 필드도 있습니다.
11.8.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 }}'
11.8.1.2. envs
envs
필드를 사용하면 런타임 시 사용할 수 있는 환경 변수를 설정할 수 있습니다. 환경 변수를 여러 가지 방법으로 설정할 수 있습니다.
- 값을 직접 설정할 수 있습니다.
- 로컬 환경 변수에 할당 된 값에서 설정합니다. 자세한 내용은 func.yaml 필드에서 로컬 환경 변수 참조 섹션을 참조하십시오.
- 시크릿 또는 구성 맵에 저장된 키-값 쌍에서 설정합니다.
- 생성된 환경 변수의 이름으로 사용되는 키를 사용하여 시크릿 또는 구성 맵에 저장된 모든 키-값 쌍을 가져올 수도 있습니다.
이 예제에서는 환경 변수를 설정하는 다양한 방법을 보여줍니다.
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
11.8.1.3. builder
builder
필드는 함수에서 이미지를 빌드하는 데 사용하는 전략을 지정합니다. 이는 pack
또는 s2i
의 값을 허용합니다.
11.8.1.4. Build
빌드
필드는 함수를 빌드하는 방법을 나타냅니다. 값 local
은 함수가 시스템에서 로컬로 빌드되었음을 나타냅니다. 값 git
은 git
필드에 지정된 값을 사용하여 함수가 클러스터에 빌드되었음을 나타냅니다.
11.8.1.5. volumes
volumes
필드를 사용하면 다음 예와 같이 지정된 경로에서 기능에 액세스할 수 있는 볼륨으로 시크릿 및 구성 맵을 마운트할 수 있습니다.
name: test namespace: "" runtime: go ... volumes: - secret: mysecret 1 path: /workspace/secret - configMap: myconfigmap 2 path: /workspace/configmap
11.8.1.6. options
options
필드를 사용하면 자동 스케일링과 같이 배포된 함수에 대한 Knative Service 속성을 수정할 수 있습니다. 이러한 옵션이 설정되어 있지 않으면 기본 옵션이 사용됩니다.
다음 옵션을 사용할 수 있습니다.
scale
-
분
: 최소 복제본 수입니다. 음수가 아닌 정수여야 합니다. 기본값은 0입니다. -
max
: 최대 복제본 수입니다. 음수가 아닌 정수여야 합니다. 기본값은 0이며 이는 제한이 없음을 의미합니다. -
메트릭
: Autoscaler에서 조사하는 지표 유형을 정의합니다. 기본값인concurrency
또는rps
로 설정할 수 있습니다. -
대상
: 동시에 들어오는 요청 수에 따라 확장할 시기를 권장합니다.target
옵션은 0.01보다 큰 부동 소수점 값을 지정할 수 있습니다.options.resources.limits.concurrency
가 설정되지 않는 한 기본값은 100입니다. 이 경우target
은 기본값으로 설정됩니다. -
사용
: 확장하기 전에 허용된 동시 요청 사용률의 백분율입니다. 1에서 100까지의 부동 소수점 값을 지정할 수 있습니다. 기본값은 70입니다.
-
resources
requests
-
cpu
: 배포된 기능이 있는 컨테이너에 대한 CPU 리소스 요청입니다. -
메모리
: 배포된 기능이 있는 컨테이너에 대한 메모리 리소스 요청.
-
limits
-
cpu
: 배포된 기능이 있는 컨테이너의 CPU 리소스 제한입니다. -
메모리
: 배포된 기능이 있는 컨테이너의 메모리 리소스 제한. -
동시성
: 단일 복제본에서 처리할 동시 요청의 하드 제한. 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.8.1.7. image
image
필드는 해당 함수의 이미지 이름을 빌드한 후 설정합니다. 이 필드는 필요에 따라 수정할 수 있습니다. 이 경우 다음에 kn func build
또는 kn func deploy
를 실행하면 함수 이미지가 새 이름으로 생성됩니다.
11.8.1.8. imageDigest
imageDigest
필드에는 함수가 배포될 때 이미지 매니페스트의 SHA256 해시가 포함됩니다. 이 값은 변경하지 마십시오.
11.8.1.9. labels
labels
필드를 사용하면 배포된 기능에 라벨을 설정할 수 있습니다.
값에서 직접 라벨을 설정할 수 있습니다. 다음 예제에서는 역할
키가 있는 라벨에 backend
값이 직접 할당됩니다.
labels: - key: role value: backend
로컬 환경 변수에서 레이블을 설정할 수도 있습니다. 다음 예제에서는 작성자
키가 있는 라벨에 USER
로컬 환경 변수의 값이 할당됩니다.
labels: - key: author value: '{{ env:USER }}'
11.8.1.10. name
name
필드는 함수의 이름을 정의합니다. 이 값은 배포 시 Knative 서비스의 이름으로 사용됩니다. 이 필드를 변경하여 후속 배포의 함수 이름을 변경할 수 있습니다.
11.8.1.11. namespace
namespace
필드는 함수가 배포되는 네임스페이스를 지정합니다.
11.8.1.12. runtime
runtime
필드는 기능에 대한 언어 런타임(예: python
)을 지정합니다.
11.8.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 }}' ...