5장. Knative Functions CLI 명령
5.1. kn 함수 명령
5.1.1. 함수 생성
함수를 빌드하고 배포하려면 먼저 Knative(kn
) CLI를 사용하여 함수를 생성해야 합니다. 명령줄에서 경로, 런타임, 템플릿 및 이미지 레지스트리를 플래그로 지정하거나 -c
플래그를 사용하여 터미널에서 대화형 환경을 시작할 수 있습니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
Knative(
kn
) CLI가 설치되어 있습니다.
절차
함수 프로젝트를 생성합니다.
$ kn func create -r <repository> -l <runtime> -t <template> <path>
-
허용되는 런타임 값에는
quarkus
,node
,typescript
,go
,python
,springboot
,rust
가 포함됩니다. 허용되는 템플릿 값에는
http
및cloudevents
가 포함됩니다.명령 예
$ kn func create -l typescript -t cloudevents examplefunc
출력 예
Created typescript function in /home/user/demo/examplefunc
또는 사용자 지정 템플릿이 포함된 리포지토리를 지정할 수 있습니다.
명령 예
$ kn func create -r https://github.com/boson-project/templates/ -l node -t hello-world examplefunc
출력 예
Created node function in /home/user/demo/examplefunc
-
허용되는 런타임 값에는
5.1.2. 로컬에서 함수 실행
kn func run
명령을 사용하여 현재 디렉터리 또는 --path
플래그로 지정된 디렉터리에서 함수를 로컬로 실행할 수 있습니다. 실행 중인 함수가 이전에 빌드되지 않았거나 프로젝트 파일이 마지막으로 빌드되었으므로 수정된 경우 kn func run
명령은 기본적으로 함수를 실행하기 전에 함수를 빌드합니다.
현재 디렉터리에서 함수를 실행하는 명령의 예
$ kn func run
경로로 지정된 디렉터리에서 함수를 실행하는 명령의 예
$ kn func run --path=<directory_path>
--build
플래그를 사용하여 프로젝트 파일을 변경하지 않아도 함수를 실행하기 전에 기존 이미지를 강제로 다시 빌드할 수도 있습니다.
빌드 플래그를 사용하는 run 명령 예
$ kn func run --build
빌드
플래그를 false로 설정하면 이미지 빌드가 비활성화되고 이전에 빌드된 이미지를 사용하여 이 함수를 실행합니다.
빌드 플래그를 사용하는 run 명령 예
$ kn func run --build=false
help 명령을 사용하여 kn func run
명령 옵션에 대해 자세히 알아볼 수 있습니다.
빌드 도움말 명령
$ kn func help run
5.1.3. 함수 빌드
함수를 실행하려면 함수 프로젝트를 빌드해야 합니다. kn func run
명령을 사용하는 경우 함수가 자동으로 빌드됩니다. 그러나 kn func build
명령을 사용하여 실행하지 않고 함수를 빌드할 수 있으며 고급 사용자 또는 디버깅 시나리오에 유용할 수 있습니다.
kn func build
명령은 컴퓨터 또는 OpenShift Container Platform 클러스터에서 로컬로 실행할 수 있는 OCI 컨테이너 이미지를 생성합니다. 이 명령은 함수 프로젝트 이름과 이미지 레지스트리 이름을 사용하여 함수의 정규화된 이미지 이름을 구성합니다.
5.1.3.1. 이미지 컨테이너 유형
기본적으로 kn func build
는 Red Hat S2I(Source-to-Image) 기술을 사용하여 컨테이너 이미지를 생성합니다.
Red Hat S2I(Source-to-Image)를 사용하는 빌드 명령 예
$ kn func build
5.1.3.2. 이미지 레지스트리 유형
OpenShift Container Registry는 기본적으로 함수 이미지를 저장하기 위한 이미지 레지스트리로 사용됩니다.
OpenShift Container Registry를 사용하는 빌드 명령 예
$ kn func build
출력 예
Building function image Function image has been built, image: registry.redhat.io/example/example-function:latest
--registry
플래그를 사용하여 OpenShift Container Registry를 기본 이미지 레지스트리로 덮어쓸 수 있습니다.
quay.io를 사용하도록 OpenShift Container Registry 덮어쓰기 빌드 명령 예
$ kn func build --registry quay.io/username
출력 예
Building function image Function image has been built, image: quay.io/username/example-function:latest
5.1.3.3. push 플래그
--push
플래그를 kn func build
명령에 추가하여 함수 이미지를 성공적으로 빌드한 후 자동으로 푸시할 수 있습니다.
OpenShift Container Registry를 사용하는 빌드 명령 예
$ kn func build --push
5.1.3.4. 도움말 명령
help 명령을 사용하여 kn func build
명령 옵션에 대해 자세히 알아볼 수 있습니다.
빌드 도움말 명령
$ kn func help build
5.1.4. 함수 배포
kn func deploy
명령을 사용하여 Knative 서비스로 클러스터에 함수를 배포할 수 있습니다. 대상 함수가 이미 배포된 경우 컨테이너 이미지 레지스트리로 푸시된 새 컨테이너 이미지로 업데이트되고 Knative 서비스가 업데이트됩니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
Knative(
kn
) CLI가 설치되어 있습니다. - 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
- 배포하려는 함수를 이미 생성하고 초기화해야 합니다.
절차
함수를 배포합니다.
$ kn func deploy [-n <namespace> -p <path> -i <image>]
출력 예
Function deployed at: http://func.example.com
-
namespace
를 지정하지 않으면 함수가 현재 네임스페이스에 배포됩니다. -
이 함수는
path
를 지정하지 않는 한 현재 디렉터리에서 배포됩니다. - Knative 서비스 이름은 프로젝트 이름에서 파생되며 이 명령을 사용하여 변경할 수 없습니다.
-
개발자 화면의 +추가 보기에서 Git 에서 가져오기 또는 서버리스 생성 함수를 사용하여 Git 리포지토리 URL을 사용하여 서버리스 함수 를 생성할 수 있습니다.
5.1.5. 기존 함수 나열
kn func list
를 사용하여 기존 함수를 나열할 수 있습니다. Knative 서비스로 배포된 함수를 나열하려면 kn service list
를 사용할 수도 있습니다.
절차
기존 함수를 나열합니다.
$ kn func list [-n <namespace> -p <path>]
출력 예
NAME NAMESPACE RUNTIME URL READY example-function default node http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com True
Knative 서비스로 배포된 함수를 나열합니다.
$ kn service list -n <namespace>
출력 예
NAME URL LATEST AGE CONDITIONS READY REASON example-function http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com example-function-gzl4c 16m 3 OK / 3 True
5.1.6. 함수 설명
kn func info
명령은 함수 이름, 이미지, 네임스페이스, Knative 서비스 정보, 경로 정보 및 이벤트 서브스크립션과 같은 배포된 기능에 대한 정보를 출력합니다.
절차
함수를 설명합니다.
$ kn func info [-f <format> -n <namespace> -p <path>]
명령 예
$ kn func info -p function/example-function
출력 예
Function name: example-function Function is built in image: docker.io/user/example-function:latest Function is deployed as Knative Service: example-function Function is deployed in namespace: default Routes: http://example-function.default.apps.ci-ln-g9f36hb-d5d6b.origin-ci-int-aws.dev.rhcloud.com
5.1.7. 테스트 이벤트를 사용하여 배포된 함수 호출
kn func invoke
CLI 명령을 사용하여 로컬 또는 OpenShift Container Platform 클러스터에서 함수를 호출하도록 테스트 요청을 보낼 수 있습니다. 이 명령을 사용하여 함수가 작동하고 이벤트를 올바르게 수신할 수 있는지 테스트할 수 있습니다. 함수를 로컬로 호출하는 것은 함수 개발 중 빠른 테스트에 유용합니다. 클러스터에서 함수를 호출하면 프로덕션 환경에 더 가까운 테스트에 유용합니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
Knative(
kn
) CLI가 설치되어 있습니다. - 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
- 호출하려는 함수를 이미 배포해야 합니다.
절차
함수를 호출합니다.
$ kn func invoke
-
kn func invoke
명령은 현재 실행 중인 로컬 컨테이너 이미지가 있거나 클러스터에 배포된 함수가 있는 경우에만 작동합니다. -
kn func invoke
명령은 기본적으로 로컬 디렉터리에서 실행되며 이 디렉터리는 함수 프로젝트라고 가정합니다.
-
5.1.7.1. kn func 호출은 선택적 매개 변수
다음 kn func invoke
CLI 명령 플래그를 사용하여 요청에 대한 선택적 매개변수를 지정할 수 있습니다.
플래그 | 설명 |
---|---|
|
호출된 함수의 대상 인스턴스를 지정합니다(예: |
|
메시지 형식을 지정합니다(예: |
| 요청에 대한 고유한 문자열 식별자를 지정합니다. |
| 클러스터의 네임스페이스를 지정합니다. |
|
요청에 대한 발신자 이름을 지정합니다. 이는 CloudEvent |
|
요청 유형을 지정합니다(예: |
|
요청에 대한 콘텐츠를 지정합니다. CloudEvent 요청의 경우 CloudEvent |
| 보낼 데이터를 포함하는 로컬 파일의 경로를 지정합니다. |
| 요청에 대한 MIME 콘텐츠 유형을 지정합니다. |
| 프로젝트 디렉터리의 경로를 지정합니다. |
| 모든 옵션을 대화형으로 확인할 수 있습니다. |
| 자세한 출력을 출력할 수 있습니다. |
|
|
5.1.7.1.1. 기본 매개변수
다음 매개변수는 kn func invoke
명령의 주요 속성을 정의합니다.
- 이벤트 대상 (
-t
,--target
) -
호출된 함수의 대상 인스턴스입니다. 로컬 배포된 함수에
로컬
값,원격
으로 배포된 함수의 원격 값 또는 임의의 엔드포인트에 배포된 함수의 URL을 허용합니다. 대상을 지정하지 않으면 기본값은local
입니다. - 이벤트 메시지 형식 (
-f
,--format
) -
이벤트에 대한 메시지 형식(예:
http
또는cloudevent
)입니다. 이 기본값은 함수를 생성할 때 사용된 템플릿 형식으로 설정됩니다. - 이벤트 유형(
--type
) -
전송되는 이벤트 유형입니다. 각 이벤트 프로듀서에 대한 문서에 설정된
type
매개변수에 대한 정보를 확인할 수 있습니다. 예를 들어 API 서버 소스는 생성된 이벤트의type
매개변수를dev.knative.apiserver.resource.update
로 설정할 수 있습니다. - 이벤트 소스(
-source
) -
이벤트를 생성한 고유한 이벤트 소스입니다. 이벤트 소스의 URI(예:
https://10.96.0.1/
) 또는 이벤트 소스의 이름일 수 있습니다. - 이벤트 ID(
--id
) - 이벤트 프로듀서에 의해 생성되는 임의의 고유 ID입니다.
- 이벤트 데이터(
-data
) kn func invoke
명령에서 보낸 이벤트에 대한data
값을 지정할 수 있습니다. 예를 들어 이벤트에 이 데이터 문자열이 포함되도록"Hello World"
와 같은--data
값을 지정할 수 있습니다. 기본적으로kn func 호출에 의해 생성된 이벤트에는 데이터가 포함되지 않습니다
.참고클러스터에 배포된 함수는
source
및type
과 같은 속성 값을 제공하는 기존 이벤트 소스의 이벤트에 응답할 수 있습니다. 이러한 이벤트에는 종종 이벤트의 도메인별 컨텍스트를 캡처하는 JSON 형식의data
값이 있습니다. 개발자는 이 문서에 명시된 CLI 플래그를 사용하여 로컬 테스트를 위해 이러한 이벤트를 시뮬레이션할 수 있습니다.이벤트 데이터를 포함하는 로컬 파일을 제공하기 위해
--file
플래그를 사용하여 이벤트 데이터를 보낼 수도 있습니다. 이 경우--content-type
을 사용하여 콘텐츠 유형을 지정합니다.- 데이터 콘텐츠 유형(
--content-type
) -
--data
플래그를 사용하여 이벤트에 대한 데이터를 추가하는 경우--content-type
플래그를 사용하여 이벤트에서 전달하는 데이터 유형을 지정할 수 있습니다. 이전 예에서 데이터는 일반 텍스트이므로kn func invoke --data "Hello world!" --content-type "text/plain"
을 지정할 수 있습니다.
5.1.7.1.2. 명령 예
kn func 호출의 일반적인 호출
입니다.
$ kn func invoke --type <event_type> --source <event_source> --data <event_data> --content-type <content_type> --id <event_ID> --format <format> --namespace <namespace>
예를 들어 "Hello world!" 이벤트를 보내려면 다음을 실행할 수 있습니다.
$ kn func invoke --type ping --source example-ping --data "Hello world!" --content-type "text/plain" --id example-ID --format http --namespace my-ns
5.1.7.1.2.1. 데이터로 파일 지정
이벤트 데이터가 포함된 디스크에서 파일을 지정하려면 --file
및 --content-type
플래그를 사용합니다.
$ kn func invoke --file <path> --content-type <content-type>
예를 들어 test.json
파일에 저장된 JSON 데이터를 보내려면 다음 명령을 사용합니다.
$ kn func invoke --file ./test.json --content-type application/json
5.1.7.1.2.2. 함수 프로젝트 지정
--path
플래그를 사용하여 함수 프로젝트의 경로를 지정할 수 있습니다.
$ kn func invoke --path <path_to_function>
예를 들어 ./example/example-function
디렉터리에 있는 함수 프로젝트를 사용하려면 다음 명령을 사용합니다.
$ kn func invoke --path ./example/example-function
5.1.7.1.2.3. 대상 함수가 배포되는 위치 지정
기본적으로 kn func 호출은 함수의 로컬 배포를 대상으로 합니다
.
$ kn func invoke
다른 배포를 사용하려면 --target
플래그를 사용합니다.
$ kn func invoke --target <target>
예를 들어 클러스터에 배포된 함수를 사용하려면 --target remote
플래그를 사용합니다.
$ kn func invoke --target remote
임의의 URL에 배포된 함수를 사용하려면 --target <URL> 플래그를
사용합니다.
$ kn func invoke --target "https://my-event-broker.example.com"
로컬 배포를 명시적으로 대상으로 지정할 수 있습니다. 이 경우 함수가 로컬로 실행되지 않으면 명령이 실패합니다.
$ kn func invoke --target local
5.1.8. 함수 삭제
kn func delete
명령을 사용하여 함수를 삭제할 수 있습니다. 이 기능은 더 이상 기능이 필요하지 않은 경우 유용하며 클러스터에 리소스를 저장하는 데 도움이 될 수 있습니다.
절차
함수를 삭제합니다.
$ kn func delete [<function_name> -n <namespace> -p <path>]
-
삭제할 함수의 이름 또는 경로가 지정되지 않은 경우 현재 디렉터리에서
func.yaml
파일을 검색하고 삭제할 함수를 결정합니다. -
네임스페이스를 지정하지 않으면 기본값은
func.yaml
파일의namespace
값으로 설정됩니다.
-
삭제할 함수의 이름 또는 경로가 지정되지 않은 경우 현재 디렉터리에서