5장. Knative Functions CLI 명령

5.1. kn 함수 명령

5.1.1. Knative 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 가 포함됩니다.
    • 허용되는 템플릿 값에는 httpcloudevents 가 포함됩니다.

      명령 예

      $ 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 플래그를 사용하여 프로젝트 파일을 변경하지 않은 경우에도 함수를 실행하기 전에 기존 이미지를 강제로 다시 빌드할 수도 있습니다.

build 플래그를 사용한 run 명령의 예

$ kn func run --build

빌드 플래그를 false로 설정하면 이미지 빌드가 비활성화되고 이전에 빌드된 이미지를 사용하여 함수를 실행합니다.

build 플래그를 사용한 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 플래그

kn func build 명령에 --push 플래그를 추가하여 성공적으로 빌드된 후 함수 이미지를 자동으로 푸시할 수 있습니다.

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 에서 가져오기 또는 Serverless Function 생성 을 사용하여 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 명령 플래그를 사용하여 요청에 대한 선택적 매개변수를 지정할 수 있습니다.

플래그설명

-t, --target

호출된 함수의 대상 인스턴스를 지정합니다(예: 로컬 또는 원격 또는 https://staging.example.com/ ). 기본 대상은 local 입니다.

-f, --format

메시지의 형식을 지정합니다(예: cloudevent 또는 http ).

--id

요청에 대한 고유한 문자열 식별자를 지정합니다.

-n, --namespace

클러스터의 네임스페이스를 지정합니다.

--source

요청에 대한 보낸 사람 이름을 지정합니다. 이는 CloudEvent 소스 속성에 해당합니다.

--type

요청 유형을 지정합니다(예: boson.fn ). 이는 CloudEvent 유형 속성에 해당합니다.

--data

요청에 대한 콘텐츠를 지정합니다. CloudEvent 요청의 경우 CloudEvent 데이터 속성입니다.

--file

전송할 데이터를 포함하는 로컬 파일의 경로를 지정합니다.

--content-type

요청에 대한 MIME 콘텐츠 형식을 지정합니다.

-p, --path

프로젝트 디렉터리의 경로를 지정합니다.

-c, --confirm

프롬프트를 활성화하여 모든 옵션을 대화형으로 확인할 수 있습니다.

-v, --verbose

인쇄 상세 출력을 활성화합니다.

-h, --help

kn func invoke 를 사용하는 방법에 대한 정보를 출력합니다.

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/) 또는 이벤트 소스의 이름일 수 있습니다.https://10.96.0.1/
이벤트 ID(--id)
이벤트 프로듀서에 의해 생성되는 임의의 고유 ID입니다.
이벤트 데이터(--data)

kn func invoke 명령에서 전송한 이벤트에 대한 데이터 값을 지정할 수 있습니다. 예를 들어 이벤트에 이 데이터 문자열이 포함되도록 "Hello World" 와 같은 --data 값을 지정할 수 있습니다. 기본적으로 kn func에서 생성한 이벤트에는 데이터가 포함되지 않습니다.

참고

클러스터에 배포된 함수는 sourcetype과 같은 속성 값을 제공하는 기존 이벤트 소스의 이벤트에 응답할 수 있습니다. 이러한 이벤트에는 종종 이벤트의 도메인별 컨텍스트를 캡처하는 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 invoke 명령의 일반적인 호출입니다.

$ 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 call은 함수의 로컬 배포를 대상으로 합니다.

$ kn func invoke

다른 배포를 사용하려면 --target 플래그를 사용합니다.

$ kn func invoke --target <target>

예를 들어 클러스터에 배포된 함수를 사용하려면 --target 원격 플래그를 사용합니다.

$ 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 값으로 설정됩니다.