4장. 서빙
4.1. Knative Serving 시작하기
4.1.1. 서버리스 애플리케이션
서버리스 애플리케이션은 경로와 구성으로 정의되고 YAML 파일에 포함된 Kubernetes 서비스로 생성 및 배포됩니다. OpenShift Serverless를 사용하여 서버리스 애플리케이션을 배포하려면 Knative Service
오브젝트를 생성해야 합니다.
Knative Service
오브젝트 YAML 파일의 예
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: hello 1 namespace: default 2 spec: template: spec: containers: - image: docker.io/openshift/hello-openshift 3 env: - name: RESPONSE 4 value: "Hello Serverless!"
다음 방법 중 하나를 사용하여 서버리스 애플리케이션을 생성합니다.
OpenShift Container Platform 웹 콘솔에서 Knative 서비스를 생성합니다.
자세한 내용은 개발자 화면을 사용하여 애플리케이션 생성을 참조하십시오.
-
Knative(
kn
) CLI를 사용하여 Knative 서비스를 생성합니다. -
oc
CLI를 사용하여 KnativeService
오브젝트를 YAML 파일로 생성하고 적용합니다.
4.1.1.1. Knative CLI를 사용하여 서버리스 애플리케이션 생성
Knative(kn
) CLI를 사용하여 서버리스 애플리케이션을 생성하면 YAML 파일을 직접 수정하는 것보다 더 간소화되고 직관적인 사용자 인터페이스를 제공합니다. kn service create
명령을 사용하여 기본 서버리스 애플리케이션을 생성할 수 있습니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
Knative(
kn
) CLI가 설치되어 있습니다. - 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
절차
Knative 서비스를 생성합니다.
$ kn service create <service-name> --image <image> --tag <tag-value>
다음과 같습니다.
-
--image
는 애플리케이션의 이미지 URI입니다. --tag
는 서비스로 생성된 초기 버전에 태그를 추가하는 데 사용할 수 있는 선택적 플래그입니다.명령 예
$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest
출력 예
Creating service 'event-display' in namespace 'default': 0.271s The Route is still working to reflect the latest desired specification. 0.580s Configuration "event-display" is waiting for a Revision to become ready. 3.857s ... 3.861s Ingress has not yet been reconciled. 4.270s Ready to serve. Service 'event-display' created with latest revision 'event-display-bxshg-1' and URL: http://event-display-default.apps-crc.testing
-
4.1.1.2. YAML을 사용하여 서버리스 애플리케이션 생성
YAML 파일을 사용하여 Knative 리소스를 생성하면 선언적 방식으로 애플리케이션을 재현할 수 있으며 재현 가능한 방식으로 애플리케이션을 설명할 수 있습니다. YAML을 사용하여 서버리스 애플리케이션을 생성하려면 Knative Service
오브젝트를 정의하는 YAML 파일을 생성한 다음 oc apply
를 사용하여 적용해야 합니다.
서비스가 생성되고 애플리케이션이 배포되면 Knative에서 이 버전의 애플리케이션에 대해 변경할 수 없는 버전을 생성합니다. Knative는 또한 네트워크 프로그래밍을 수행하여 애플리케이션의 경로, 수신, 서비스 및 로드 밸런서를 생성하고 트래픽에 따라 Pod를 자동으로 확장합니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
- 프로젝트를 생성했거나 OpenShift Container Platform에서 애플리케이션 및 기타 워크로드를 생성하는 데 적절한 역할 및 권한이 있는 프로젝트에 액세스할 수 있습니다.
-
OpenShift CLI(
oc
)를 설치합니다.
절차
다음 샘플 코드를 포함하는 YAML 파일을 생성합니다.
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: event-delivery namespace: default spec: template: spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest env: - name: RESPONSE value: "Hello Serverless!"
YAML 파일이 포함된 디렉터리로 이동한 후 YAML 파일을 적용하여 애플리케이션을 배포합니다.
$ oc apply -f <filename>
OpenShift Container Platform 웹 콘솔의 개발자 화면으로 전환하거나 Knative(kn
) CLI 또는 YAML 파일을 사용하지 않으려면 OpenShift Container Platform 웹 콘솔의 Administator 화면을 사용하여 Knative 구성 요소를 생성할 수 있습니다.
4.1.1.3. 관리자 화면을 사용하여 서버리스 애플리케이션 생성
서버리스 애플리케이션은 경로와 구성으로 정의되고 YAML 파일에 포함된 Kubernetes 서비스로 생성 및 배포됩니다. OpenShift Serverless를 사용하여 서버리스 애플리케이션을 배포하려면 Knative Service
오브젝트를 생성해야 합니다.
Knative Service
오브젝트 YAML 파일의 예
apiVersion: serving.knative.dev/v1 kind: Service metadata: name: hello 1 namespace: default 2 spec: template: spec: containers: - image: docker.io/openshift/hello-openshift 3 env: - name: RESPONSE 4 value: "Hello Serverless!"
서비스가 생성되고 애플리케이션이 배포되면 Knative에서 이 버전의 애플리케이션에 대해 변경할 수 없는 버전을 생성합니다. Knative는 또한 네트워크 프로그래밍을 수행하여 애플리케이션의 경로, 수신, 서비스 및 로드 밸런서를 생성하고 트래픽에 따라 Pod를 자동으로 확장합니다.
사전 요구 사항
관리자 화면을 사용하여 서버리스 애플리케이션을 생성하려면 다음 단계를 완료해야 합니다.
- OpenShift Serverless Operator 및 Knative Serving이 설치되어 있습니다.
- 웹 콘솔에 로그인한 후 관리자 화면에 있습니다.
절차
-
Serverless
Serving 페이지로 이동합니다. - 생성 목록에서 서비스를 선택합니다.
- YAML 또는 JSON 정의를 수동으로 입력하거나 파일을 편집기로 끌어서 놓습니다.
- 생성을 클릭합니다.
4.1.1.4. 오프라인 모드를 사용하여 서비스 생성
오프라인 모드에서 kn service
명령을 실행할 수 있으므로 클러스터에서 변경 사항이 발생하지 않고 로컬 시스템에서 서비스 설명자 파일이 생성됩니다. 설명자 파일이 생성되면 클러스터에 대한 변경 사항을 전파하기 전에 파일을 수정할 수 있습니다.
Knative CLI의 오프라인 모드는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
Knative(
kn
) CLI가 설치되어 있습니다.
절차
오프라인 모드에서 로컬 Knative 서비스 설명자 파일을 생성합니다.
$ kn service create event-display \ --image quay.io/openshift-knative/knative-eventing-sources-event-display:latest \ --target ./ \ --namespace test
출력 예
Service 'event-display' created in namespace 'test'.
--target ./
플래그는 오프라인 모드를 활성화하고 새 디렉터리 트리를 저장하는 디렉토리로./
를 지정합니다.기존 디렉터리를 지정하지 않고
--target my-service.yaml
과 같은 파일 이름을 사용하면 디렉터리 트리가 생성되지 않습니다. 대신 서비스 설명자 파일my-service.yaml
만 현재 디렉터리에 생성됩니다.파일 이름에는.
.yaml
,.yml
, 또는.json
확장을 사용할 수 있습니다..json
을 선택하면 JSON 형식으로 서비스 설명자 파일을 생성합니다.--namespace test
옵션은 새 서비스를test
네임스페이스에 배치합니다.--namespace를
사용하지 않고 OpenShift Container Platform 클러스터에 로그인한 경우 현재 네임스페이스에 설명자 파일이 생성됩니다. 그렇지 않으면 설명자 파일이default
네임스페이스에 생성됩니다.
생성된 디렉터리 구조를 확인합니다.
$ tree ./
출력 예
./ └── test └── ksvc └── event-display.yaml 2 directories, 1 file
-
--target
에서 지정된 현재./
디렉터리에는 지정된 네임스페이스를 바탕으로 이름이 지정된test/
디렉터리가 포함되어 있습니다. -
test/
디렉터리에는 리소스 유형의 이름에 따라 이름이 지정된ksvc
디렉터리가 포함되어 있습니다. -
ksvc
디렉터리에는 지정된 서비스 이름에 따라 이름이 지정된 기술자 파일event-display.yaml
이 포함되어 있습니다.
-
생성된 서비스 기술자 파일을 확인합니다.
$ cat test/ksvc/event-display.yaml
출력 예
apiVersion: serving.knative.dev/v1 kind: Service metadata: creationTimestamp: null name: event-display namespace: test spec: template: metadata: annotations: client.knative.dev/user-image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest creationTimestamp: null spec: containers: - image: quay.io/openshift-knative/knative-eventing-sources-event-display:latest name: "" resources: {} status: {}
새 서비스에 대한 정보를 나열합니다.
$ kn service describe event-display --target ./ --namespace test
출력 예
Name: event-display Namespace: test Age: URL: Revisions: Conditions: OK TYPE AGE REASON
target ./
옵션은 네임스페이스 하위 디렉터리를 포함하는 디렉터리 구조의 루트 디렉터리를 지정합니다.또는
--target
옵션을 사용하여 YAML 또는 JSON 파일 이름을 직접 지정할 수 있습니다. 허용된 파일 확장자는.yaml
,.yml
,.json
입니다.--namespace
옵션은 필요한 서비스 기술자 파일을 포함하는 하위 디렉터리를kn
와 통신하는 네임스페이스를 지정합니다.--namespace
를 사용하지 않고 OpenShift Container Platform 클러스터에 로그인한 경우kn
은 현재 네임스페이스를 바탕으로 이름이 지정된 하위 디렉터리에서 서비스를 검색합니다. 그렇지 않으면kn
은default/
하위 디렉터리에서 검색합니다.
서비스 설명자 파일을 사용하여 클러스터에 서비스를 생성합니다.
$ kn service create -f test/ksvc/event-display.yaml
출력 예
Creating service 'event-display' in namespace 'test': 0.058s The Route is still working to reflect the latest desired specification. 0.098s ... 0.168s Configuration "event-display" is waiting for a Revision to become ready. 23.377s ... 23.419s Ingress has not yet been reconciled. 23.534s Waiting for load balancer to be ready 23.723s Ready to serve. Service 'event-display' created to latest revision 'event-display-00001' is available at URL: http://event-display-test.apps.example.com
4.1.1.5. 추가 리소스
4.1.2. 서버리스 애플리케이션 배포 확인
서버리스 애플리케이션이 성공적으로 배포되었는지 확인하려면 Knative에서 생성한 애플리케이션 URL을 가져와서 해당 URL로 요청을 보낸 후 출력을 관찰해야 합니다. OpenShift Serverless에서는 HTTP 및 HTTPS URL을 모두 사용할 수 있지만 oc get ksvc
출력에서는 항상 http://
형식을 사용하여 URL을 출력합니다.
4.1.2.1. 서버리스 애플리케이션 배포 확인
서버리스 애플리케이션이 성공적으로 배포되었는지 확인하려면 Knative에서 생성한 애플리케이션 URL을 가져와서 해당 URL로 요청을 보낸 후 출력을 관찰해야 합니다. OpenShift Serverless에서는 HTTP 및 HTTPS URL을 모두 사용할 수 있지만 oc get ksvc
출력에서는 항상 http://
형식을 사용하여 URL을 출력합니다.
사전 요구 사항
- OpenShift Serverless Operator 및 Knative Serving이 클러스터에 설치되어 있습니다.
-
oc
CLI를 설치했습니다. - Knative 서비스를 생성했습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다.
절차
애플리케이션 URL을 찾습니다.
$ oc get ksvc <service_name>
출력 예
NAME URL LATESTCREATED LATESTREADY READY REASON event-delivery http://event-delivery-default.example.com event-delivery-4wsd2 event-delivery-4wsd2 True
클러스터에 요청한 후 출력을 확인합니다.
HTTP 요청의 예
$ curl http://event-delivery-default.example.com
HTTPS 요청의 예
$ curl https://event-delivery-default.example.com
출력 예
Hello Serverless!
선택 사항입니다. 인증서 체인에서 자체 서명된 인증서와 관련된 오류가 발생하면
--insecure
플래그를 curl 명령에 추가하여 오류를 무시할 수 있습니다.$ curl https://event-delivery-default.example.com --insecure
출력 예
Hello Serverless!
중요프로덕션 배포에는 자체 서명된 인증서를 사용해서는 안 됩니다. 이 방법은 테스트 목적으로만 사용됩니다.
선택 사항입니다. OpenShift Container Platform 클러스터가 CA(인증 기관)에서 서명한 인증서로 구성되어 있지만 아직 시스템에 전역적으로 구성되지 않은 경우
curl
명령으로 이 인증서를 지정할 수 있습니다. 인증서 경로는--cacert
플래그를 사용하여 curl 명령에 전달할 수 있습니다.$ curl https://event-delivery-default.example.com --cacert <file>
출력 예
Hello Serverless!