Red Hat Camel K is deprecated
Red Hat Camel K is deprecated and the End of Life date for this product is June 30, 2025. For help migrating to the current go-to solution, Red Hat build of Apache Camel, see the Migration Guide.Camel K를 사용하여 통합 개발 및 관리
Camel K에 대한 개발자 가이드
초록
머리말
보다 포괄적 수용을 위한 오픈 소스 용어 교체
Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.
1장. Camel K 통합 관리
Camel K 명령줄을 사용하거나 개발 툴을 사용하여 Red Hat Integration - Camel K 통합을 관리할 수 있습니다. 이 장에서는 명령줄에서 Camel K 통합을 관리하는 방법을 설명하고 VS Code 개발 툴 사용 방법을 설명하는 추가 리소스에 대한 링크를 제공합니다.
1.1. Camel K 통합 관리
Camel K는 명령줄에서 OpenShift 클러스터에서 Camel K 통합을 관리하는 다양한 옵션을 제공합니다. 이 섹션에서는 다음 명령을 사용하는 간단한 예를 보여줍니다.
-
kamel get
-
Kamel describe
-
Kamel 로그
-
Kamel 삭제
사전 요구 사항
- Camel K 개발 환경 설정
- Java 또는 YAML DSL으로 작성된 Camel 통합이 이미 있어야 합니다.
절차
Camel K Operator가 OpenShift 클러스터에서 실행 중인지 확인합니다. 예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get pod
oc get pod
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME READY STATUS RESTARTS AGE camel-k-operator-86b8d94b4-pk7d6 1/1 Running 0 6m28s
NAME READY STATUS RESTARTS AGE camel-k-operator-86b8d94b4-pk7d6 1/1 Running 0 6m28s
kamel run
명령을 입력하여 OpenShift의 클라우드에서 통합을 실행합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run hello.camelk.yaml
kamel run hello.camelk.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow integration "hello" created
integration "hello" created
kamel get
명령을 입력하여 통합 상태를 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel get
kamel get
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAME PHASE KIT hello Building Kit kit-bqatqib5t4kse5vukt40
NAME PHASE KIT hello Building Kit kit-bqatqib5t4kse5vukt40
kamel describe
명령을 입력하여 통합에 대한 자세한 정보를 출력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel describe integration hello
kamel describe integration hello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Name: hello Namespace: myproject Creation Timestamp: Fri, 13 Aug 2021 16:23:21 +0200 Phase: Building Kit Runtime Version: 1.7.1.fuse-800025-redhat-00001 Kit: myproject/kit-c4ci6mbe9hl5ph5c9sjg Image: Version: 1.6.6 Dependencies: camel:core camel:log camel:timer mvn:org.apache.camel.k:camel-k-runtime mvn:org.apache.camel.quarkus:camel-quarkus-yaml-dsl Sources: Name Language Compression Ref Ref Key camel-k-embedded-flow.yaml yaml false Conditions: Type Status Reason Message IntegrationPlatformAvailable True IntegrationPlatformAvailable myproject/camel-k IntegrationKitAvailable True IntegrationKitAvailable kit-c4ci6mbe9hl5ph5c9sjg CronJobAvailable False CronJobNotAvailableReason different controller strategy used (deployment) DeploymentAvailable True DeploymentAvailable deployment name is hello KnativeServiceAvailable False KnativeServiceNotAvailable different controller strategy used (deployment) Ready True ReplicaSetReady
Name: hello Namespace: myproject Creation Timestamp: Fri, 13 Aug 2021 16:23:21 +0200 Phase: Building Kit Runtime Version: 1.7.1.fuse-800025-redhat-00001 Kit: myproject/kit-c4ci6mbe9hl5ph5c9sjg Image: Version: 1.6.6 Dependencies: camel:core camel:log camel:timer mvn:org.apache.camel.k:camel-k-runtime mvn:org.apache.camel.quarkus:camel-quarkus-yaml-dsl Sources: Name Language Compression Ref Ref Key camel-k-embedded-flow.yaml yaml false Conditions: Type Status Reason Message IntegrationPlatformAvailable True IntegrationPlatformAvailable myproject/camel-k IntegrationKitAvailable True IntegrationKitAvailable kit-c4ci6mbe9hl5ph5c9sjg CronJobAvailable False CronJobNotAvailableReason different controller strategy used (deployment) DeploymentAvailable True DeploymentAvailable deployment name is hello KnativeServiceAvailable False KnativeServiceNotAvailable different controller strategy used (deployment) Ready True ReplicaSetReady
kamel log
명령을 입력하여 로그를stdout
에 출력합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel log hello
kamel log hello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... [1] 2021-08-13 14:37:15,860 INFO [info] (Camel (camel-1) thread #0 - timer://yaml) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello Camel K from yaml] ...
... [1] 2021-08-13 14:37:15,860 INFO [info] (Camel (camel-1) thread #0 - timer://yaml) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello Camel K from yaml] ...
-
Ctrl-C
를 눌러 터미널에서 로깅을 종료합니다. kamel delete
를 입력하여 OpenShift에 배포된 통합을 삭제합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel delete hello
kamel delete hello
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Integration hello deleted
Integration hello deleted
추가 리소스
- 로깅에 대한 자세한 내용은 Managing Camel K integration logging levels에서 참조하십시오.
- 배포 전환 시간을 단축하려면 개발 모드에서 Camel K 통합 실행을참조하십시오.
- 통합을 관리하는 개발 툴에 대한 자세한 내용은 VS Code Tooling for Apache Camel K by Red Hat에서 참조하십시오.
1.2. Camel K 통합 로깅 수준 관리
Camel K는 Quarkus 로깅 메커니즘을 통합을 위한 로깅 프레임워크로 사용합니다. quarkus.log.category
접두사를 통합 속성으로 지정하여 런타임에 다양한 로거의 로깅 수준을 구성할 수 있습니다. 예를 들면 다음과 같습니다.
예제
--property 'quarkus.log.category."org".level'=DEBUG
--property 'quarkus.log.category."org".level'=DEBUG
작은 따옴표로 속성을 이스케이프하는 것이 중요합니다.
사전 요구 사항
절차
kamel run
명령을 입력하고--property
옵션을 사용하여 로깅 수준을 지정합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --dev --property 'quarkus.log.category."org.apache.camel.support".level'=DEBUG Basic.java ... integration "basic" created Progress: integration "basic" in phase Initialization Progress: integration "basic" in phase Building Kit Progress: integration "basic" in phase Deploying Condition "IntegrationPlatformAvailable" is "True" for Integration basic: myproject/camel-k Integration basic in phase "Initialization" Integration basic in phase "Building Kit" Integration basic in phase "Deploying" Condition "IntegrationKitAvailable" is "True" for Integration basic: kit-c4dn5l62v9g3aopkocag Condition "DeploymentAvailable" is "True" for Integration basic: deployment name is basic Condition "CronJobAvailable" is "False" for Integration basic: different controller strategy used (deployment) Progress: integration "basic" in phase Running Condition "KnativeServiceAvailable" is "False" for Integration basic: different controller strategy used (deployment) Integration basic in phase "Running" Condition "Ready" is "False" for Integration basic Condition "Ready" is "True" for Integration basic [1] Monitoring pod basic-575b97f64b-7l5rl [1] 2021-08-17 08:35:22,906 DEBUG [org.apa.cam.sup.LRUCacheFactory] (main) Creating DefaultLRUCacheFactory [1] 2021-08-17 08:35:23,132 INFO [org.apa.cam.k.Runtime] (main) Apache Camel K Runtime 1.7.1.fuse-800025-redhat-00001 [1] 2021-08-17 08:35:23,134 INFO [org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime [1] 2021-08-17 08:35:23,224 INFO [org.apa.cam.k.lis.SourcesConfigurer] (main) Loading routes from: SourceDefinition{name='Basic', language='java', location='file:/etc/camel/sources/Basic.java', } [1] 2021-08-17 08:35:23,232 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Found RoutesBuilderLoader: org.apache.camel.dsl.java.joor.JavaRoutesBuilderLoader via: META-INF/services/org/apache/camel/java [1] 2021-08-17 08:35:23,232 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Detected and using RoutesBuilderLoader: org.apache.camel.dsl.java.joor.JavaRoutesBuilderLoader@68dc098b [1] 2021-08-17 08:35:23,236 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Found ResourceResolver: org.apache.camel.impl.engine.DefaultResourceResolvers$FileResolver via: META-INF/services/org/apache/camel/file [1] 2021-08-17 08:35:23,237 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Detected and using ResourceResolver: org.apache.camel.impl.engine.DefaultResourceResolvers$FileResolver@5b67bb7e [1] 2021-08-17 08:35:24,320 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Lookup Language with name simple in registry. Found: org.apache.camel.language.simple.SimpleLanguage@74d7184a [1] 2021-08-17 08:35:24,328 DEBUG [org.apa.cam.sup.EventHelper] (main) Ignoring notifying event Initializing CamelContext: camel-1. The EventNotifier has not been started yet: org.apache.camel.quarkus.core.CamelManagementEventBridge@3301500b [1] 2021-08-17 08:35:24,336 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Lookup Component with name timer in registry. Found: org.apache.camel.component.timer.TimerComponent@3ef41c66 [1] 2021-08-17 08:35:24,342 DEBUG [org.apa.cam.sup.DefaultComponent] (main) Creating endpoint uri=[timer://java?period=1000], path=[java] [1] 2021-08-17 08:35:24,350 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Found ProcessorFactory: org.apache.camel.processor.DefaultProcessorFactory via: META-INF/services/org/apache/camel/processor-factory [1] 2021-08-17 08:35:24,351 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Detected and using ProcessorFactory: org.apache.camel.processor.DefaultProcessorFactory@704b2127 [1] 2021-08-17 08:35:24,369 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Found InternalProcessorFactory: org.apache.camel.processor.DefaultInternalProcessorFactory via: META-INF/services/org/apache/camel/internal-processor-factory [1] 2021-08-17 08:35:24,369 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Detected and using InternalProcessorFactory: org.apache.camel.processor.DefaultInternalProcessorFactory@4f8caaf3 [1] 2021-08-17 08:35:24,442 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Lookup Component with name log in registry. Found: org.apache.camel.component.log.LogComponent@46b695ec [1] 2021-08-17 08:35:24,444 DEBUG [org.apa.cam.sup.DefaultComponent] (main) Creating endpoint uri=[log://info], path=[info] [1] 2021-08-17 08:35:24,461 DEBUG [org.apa.cam.sup.EventHelper] (main) Ignoring notifying event Initialized CamelContext: camel-1. The EventNotifier has not been started yet: org.apache.camel.quarkus.core.CamelManagementEventBridge@3301500b [1] 2021-08-17 08:35:24,467 DEBUG [org.apa.cam.sup.DefaultProducer] (main) Starting producer: Producer[log://info] [1] 2021-08-17 08:35:24,469 DEBUG [org.apa.cam.sup.DefaultConsumer] (main) Build consumer: Consumer[timer://java?period=1000] [1] 2021-08-17 08:35:24,475 DEBUG [org.apa.cam.sup.DefaultConsumer] (main) Starting consumer: Consumer[timer://java?period=1000] [1] 2021-08-17 08:35:24,481 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup summary (total:1 started:1) [1] 2021-08-17 08:35:24,481 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started java (timer://java) [1] 2021-08-17 08:35:24,482 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 3.10.0.fuse-800010-redhat-00001 (camel-1) started in 170ms (build:0ms init:150ms start:20ms) [1] 2021-08-17 08:35:24,487 INFO [io.quarkus] (main) camel-k-integration 1.6.6 on JVM (powered by Quarkus 1.11.7.Final-redhat-00009) started in 2.192s. [1] 2021-08-17 08:35:24,488 INFO [io.quarkus] (main) Profile prod activated. [1] 2021-08-17 08:35:24,488 INFO [io.quarkus] (main) Installed features: [camel-bean, camel-core, camel-java-joor-dsl, camel-k-core, camel-k-runtime, camel-log, camel-support-common, camel-timer, cdi] [1] 2021-08-17 08:35:25,493 INFO [info] (Camel (camel-1) thread #0 - timer://java) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello Camel K from java] [1] 2021-08-17 08:35:26,479 INFO [info] (Camel (camel-1) thread #0 - timer://java) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello Camel K from java] ...
kamel run --dev --property 'quarkus.log.category."org.apache.camel.support".level'=DEBUG Basic.java ... integration "basic" created Progress: integration "basic" in phase Initialization Progress: integration "basic" in phase Building Kit Progress: integration "basic" in phase Deploying Condition "IntegrationPlatformAvailable" is "True" for Integration basic: myproject/camel-k Integration basic in phase "Initialization" Integration basic in phase "Building Kit" Integration basic in phase "Deploying" Condition "IntegrationKitAvailable" is "True" for Integration basic: kit-c4dn5l62v9g3aopkocag Condition "DeploymentAvailable" is "True" for Integration basic: deployment name is basic Condition "CronJobAvailable" is "False" for Integration basic: different controller strategy used (deployment) Progress: integration "basic" in phase Running Condition "KnativeServiceAvailable" is "False" for Integration basic: different controller strategy used (deployment) Integration basic in phase "Running" Condition "Ready" is "False" for Integration basic Condition "Ready" is "True" for Integration basic [1] Monitoring pod basic-575b97f64b-7l5rl [1] 2021-08-17 08:35:22,906 DEBUG [org.apa.cam.sup.LRUCacheFactory] (main) Creating DefaultLRUCacheFactory [1] 2021-08-17 08:35:23,132 INFO [org.apa.cam.k.Runtime] (main) Apache Camel K Runtime 1.7.1.fuse-800025-redhat-00001 [1] 2021-08-17 08:35:23,134 INFO [org.apa.cam.qua.cor.CamelBootstrapRecorder] (main) bootstrap runtime: org.apache.camel.quarkus.main.CamelMainRuntime [1] 2021-08-17 08:35:23,224 INFO [org.apa.cam.k.lis.SourcesConfigurer] (main) Loading routes from: SourceDefinition{name='Basic', language='java', location='file:/etc/camel/sources/Basic.java', } [1] 2021-08-17 08:35:23,232 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Found RoutesBuilderLoader: org.apache.camel.dsl.java.joor.JavaRoutesBuilderLoader via: META-INF/services/org/apache/camel/java [1] 2021-08-17 08:35:23,232 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Detected and using RoutesBuilderLoader: org.apache.camel.dsl.java.joor.JavaRoutesBuilderLoader@68dc098b [1] 2021-08-17 08:35:23,236 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Found ResourceResolver: org.apache.camel.impl.engine.DefaultResourceResolvers$FileResolver via: META-INF/services/org/apache/camel/file [1] 2021-08-17 08:35:23,237 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Detected and using ResourceResolver: org.apache.camel.impl.engine.DefaultResourceResolvers$FileResolver@5b67bb7e [1] 2021-08-17 08:35:24,320 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Lookup Language with name simple in registry. Found: org.apache.camel.language.simple.SimpleLanguage@74d7184a [1] 2021-08-17 08:35:24,328 DEBUG [org.apa.cam.sup.EventHelper] (main) Ignoring notifying event Initializing CamelContext: camel-1. The EventNotifier has not been started yet: org.apache.camel.quarkus.core.CamelManagementEventBridge@3301500b [1] 2021-08-17 08:35:24,336 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Lookup Component with name timer in registry. Found: org.apache.camel.component.timer.TimerComponent@3ef41c66 [1] 2021-08-17 08:35:24,342 DEBUG [org.apa.cam.sup.DefaultComponent] (main) Creating endpoint uri=[timer://java?period=1000], path=[java] [1] 2021-08-17 08:35:24,350 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Found ProcessorFactory: org.apache.camel.processor.DefaultProcessorFactory via: META-INF/services/org/apache/camel/processor-factory [1] 2021-08-17 08:35:24,351 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Detected and using ProcessorFactory: org.apache.camel.processor.DefaultProcessorFactory@704b2127 [1] 2021-08-17 08:35:24,369 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Found InternalProcessorFactory: org.apache.camel.processor.DefaultInternalProcessorFactory via: META-INF/services/org/apache/camel/internal-processor-factory [1] 2021-08-17 08:35:24,369 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Detected and using InternalProcessorFactory: org.apache.camel.processor.DefaultInternalProcessorFactory@4f8caaf3 [1] 2021-08-17 08:35:24,442 DEBUG [org.apa.cam.sup.ResolverHelper] (main) Lookup Component with name log in registry. Found: org.apache.camel.component.log.LogComponent@46b695ec [1] 2021-08-17 08:35:24,444 DEBUG [org.apa.cam.sup.DefaultComponent] (main) Creating endpoint uri=[log://info], path=[info] [1] 2021-08-17 08:35:24,461 DEBUG [org.apa.cam.sup.EventHelper] (main) Ignoring notifying event Initialized CamelContext: camel-1. The EventNotifier has not been started yet: org.apache.camel.quarkus.core.CamelManagementEventBridge@3301500b [1] 2021-08-17 08:35:24,467 DEBUG [org.apa.cam.sup.DefaultProducer] (main) Starting producer: Producer[log://info] [1] 2021-08-17 08:35:24,469 DEBUG [org.apa.cam.sup.DefaultConsumer] (main) Build consumer: Consumer[timer://java?period=1000] [1] 2021-08-17 08:35:24,475 DEBUG [org.apa.cam.sup.DefaultConsumer] (main) Starting consumer: Consumer[timer://java?period=1000] [1] 2021-08-17 08:35:24,481 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Routes startup summary (total:1 started:1) [1] 2021-08-17 08:35:24,481 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Started java (timer://java) [1] 2021-08-17 08:35:24,482 INFO [org.apa.cam.imp.eng.AbstractCamelContext] (main) Apache Camel 3.10.0.fuse-800010-redhat-00001 (camel-1) started in 170ms (build:0ms init:150ms start:20ms) [1] 2021-08-17 08:35:24,487 INFO [io.quarkus] (main) camel-k-integration 1.6.6 on JVM (powered by Quarkus 1.11.7.Final-redhat-00009) started in 2.192s. [1] 2021-08-17 08:35:24,488 INFO [io.quarkus] (main) Profile prod activated. [1] 2021-08-17 08:35:24,488 INFO [io.quarkus] (main) Installed features: [camel-bean, camel-core, camel-java-joor-dsl, camel-k-core, camel-k-runtime, camel-log, camel-support-common, camel-timer, cdi] [1] 2021-08-17 08:35:25,493 INFO [info] (Camel (camel-1) thread #0 - timer://java) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello Camel K from java] [1] 2021-08-17 08:35:26,479 INFO [info] (Camel (camel-1) thread #0 - timer://java) Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hello Camel K from java] ...
-
Ctrl-C
를 눌러 터미널에서 로깅을 종료합니다.
추가 리소스
- 로깅 프레임워크에 대한 자세한 내용은 로깅 형식을참조하십시오.
- 로깅을 볼 수 있는 개발 툴에 대한 자세한 내용은 VS Code Tooling for Apache Camel K by Red Hat에서 참조하십시오.
1.3. Camel K 통합 스케일링
oc scale
명령을 사용하여 통합을 확장할 수 있습니다.
절차
Camel K 통합을 확장하려면 다음 명령을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc scale it <integration_name> --replicas <number_of_replicas>
oc scale it <integration_name> --replicas <number_of_replicas>
Integration 리소스를 직접 편집하여 통합을 확장할 수도 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc patch it <integration_name> --type merge -p '{"spec":{"replicas":<number_of_replicas>}}'
oc patch it <integration_name> --type merge -p '{"spec":{"replicas":<number_of_replicas>}}'
통합을 위한 복제본 수를 보려면 다음 명령을 사용하십시오.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc get it <integration_name> -o jsonpath='{.status.replicas}'
oc get it <integration_name> -o jsonpath='{.status.replicas}'
2장. Camel K 통합 모니터링
Red Hat 통합 - Camel K 모니터링은 OpenShift 모니터링 시스템을 기반으로 합니다. 이 장에서는 런타임 시 Red Hat Integration - Camel K 통합 모니터링에 사용 가능한 옵션을 사용하는 방법을 설명합니다. 이미 OpenShift 모니터링의 일부로 배포된 Prometheus Operator를 사용하여 자체 애플리케이션을 모니터링할 수 있습니다.
2.1. OpenShift에서 사용자 워크로드 모니터링 활성화
OpenShift 4.3 이상에는 OpenShift 모니터링의 일부로 이미 배포된 내장 Prometheus Operator가 포함되어 있습니다. 이 섹션에서는 OpenShift 모니터링에서 자체 애플리케이션 서비스 모니터링을 활성화하는 방법을 설명합니다. 이 옵션을 사용하면 별도의 Prometheus 인스턴스를 설치 및 관리하는 추가 오버헤드가 발생하지 않습니다.
사전 요구 사항
- Camel K Operator가 설치된 OpenShift 클러스터에 대한 클러스터 관리자 액세스 권한이 있어야 합니다. Camel K 설치를 참조하십시오.
절차
다음 명령을 입력하여
openshift-monitoring 프로젝트에
cluster-monitoring-config
ConfigMap 오브젝트가 있는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc -n openshift-monitoring get configmap cluster-monitoring-config
$ oc -n openshift-monitoring get configmap cluster-monitoring-config
cluster-monitoring-config
ConfigMap이 아직 없는 경우 해당 ConfigMap을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc -n openshift-monitoring create configmap cluster-monitoring-config
$ oc -n openshift-monitoring create configmap cluster-monitoring-config
cluster-monitoring-config
ConfigMap을 편집합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc -n openshift-monitoring edit configmap cluster-monitoring-config
$ oc -n openshift-monitoring edit configmap cluster-monitoring-config
data:config.yaml:
에서enableUserWorkload
를true
로 설정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | enableUserWorkload: true
apiVersion: v1 kind: ConfigMap metadata: name: cluster-monitoring-config namespace: openshift-monitoring data: config.yaml: | enableUserWorkload: true
추가 리소스
2.2. Camel K 통합 지표 구성
런타임 시 Camel K Prometheus 특성을 사용하여 Camel K 통합의 모니터링을 자동으로 구성할 수 있습니다. 이렇게 하면 종속 항목 및 통합 Pod의 구성이 자동화되어 Prometheus에서 검색 및 표시하는 지표 끝점이 노출됩니다. Camel Quarkus MicroProfile Metrics 확장 에서는 OpenMetrics 형식으로 기본 Camel K 지표를 자동으로 수집하고 노출합니다.
사전 요구 사항
- OpenShift에서 자체 서비스 모니터링을 이미 활성화해야 합니다. OpenShift에서 사용자 워크로드 모니터링 활성화를 참조하십시오.
절차
다음 명령을 입력하여 Prometheus 특성을 활성화하여 Camel K 통합을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run myIntegration.java -t prometheus.enabled=true
kamel run myIntegration.java -t prometheus.enabled=true
또는 다음과 같이 통합 플랫폼을 업데이트하여 Prometheus 특성을 전역적으로 활성화할 수 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc patch ip camel-k --type=merge -p '{"spec":{"traits":{"prometheus":{"configuration":{"enabled":true}}}}}'
$ oc patch ip camel-k --type=merge -p '{"spec":{"traits":{"prometheus":{"configuration":{"enabled":true}}}}}'
- Prometheus에서 Camel K 통합 지표의 모니터링을 확인합니다. 예를 들어 포함된 Prometheus의 경우 OpenShift 관리자 또는 개발자 웹 콘솔에서 모니터링 > 메트릭 을 선택합니다.
-
보려는 Camel K 메트릭을 입력합니다. 예를 들어, 관리자 콘솔에서 Cursor의 Insert Metric 아래에
application_camel_context_uptime_seconds
를 입력하고 Run Queries 를 클릭합니다. - 추가 쿼리를 클릭하여 추가 지표를 확인합니다.
2.3. 사용자 정의 Camel K 통합 지표 추가
Java 코드에서 Camel MicroProfile Metrics 구성 요소와 주석을 사용하여 Camel K 통합에 사용자 지정 지표를 추가할 수 있습니다. 그러면 이러한 사용자 지정 지표가 Prometheus에서 자동으로 검색 및 표시됩니다.
이 섹션에서는 Camel K 통합 및 서비스 구현 코드에 Camel MicroProfile Metrics 주석을 추가하는 예를 보여줍니다.
사전 요구 사항
- OpenShift에서 자체 서비스 모니터링을 이미 활성화해야 합니다. OpenShift에서 사용자 워크로드 모니터링 활성화를 참조하십시오.
절차
Camel MicroProfile Metrics 구성 요소 주석을 사용하여 Camel 통합 코드에서 사용자 지정 지표를 등록합니다. 다음 예제에서는
Metrics.java
통합을 보여줍니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow // camel-k: language=java trait=prometheus.enabled=true dependency=mvn:org.my/app:1.0 import org.apache.camel.Exchange; import org.apache.camel.LoggingLevel; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants; import javax.enterprise.context.ApplicationScoped; @ApplicationScoped public class Metrics extends RouteBuilder { @Override public void configure() { onException() .handled(true) .maximumRedeliveries(2) .logStackTrace(false) .logExhausted(false) .log(LoggingLevel.ERROR, "Failed processing ${body}") // Register the 'redelivery' meter .to("microprofile-metrics:meter:redelivery?mark=2") // Register the 'error' meter .to("microprofile-metrics:meter:error"); from("timer:stream?period=1000") .routeId("unreliable-service") .setBody(header(Exchange.TIMER_COUNTER).prepend("event #")) .log("Processing ${body}...") // Register the 'generated' meter .to("microprofile-metrics:meter:generated") // Register the 'attempt' meter via @Metered in Service.java .bean("service") .filter(header(Exchange.REDELIVERED)) .log(LoggingLevel.WARN, "Processed ${body} after ${header.CamelRedeliveryCounter} retries") .setHeader(MicroProfileMetricsConstants.HEADER_METER_MARK, header(Exchange.REDELIVERY_COUNTER)) // Register the 'redelivery' meter .to("microprofile-metrics:meter:redelivery") .end() .log("Successfully processed ${body}") // Register the 'success' meter .to("microprofile-metrics:meter:success"); } }
// camel-k: language=java trait=prometheus.enabled=true dependency=mvn:org.my/app:1.0
1 import org.apache.camel.Exchange; import org.apache.camel.LoggingLevel; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.microprofile.metrics.MicroProfileMetricsConstants; import javax.enterprise.context.ApplicationScoped; @ApplicationScoped public class Metrics extends RouteBuilder { @Override public void configure() { onException() .handled(true) .maximumRedeliveries(2) .logStackTrace(false) .logExhausted(false) .log(LoggingLevel.ERROR, "Failed processing ${body}") // Register the 'redelivery' meter .to("microprofile-metrics:meter:redelivery?mark=2") // Register the 'error' meter .to("microprofile-metrics:meter:error");
2 from("timer:stream?period=1000") .routeId("unreliable-service") .setBody(header(Exchange.TIMER_COUNTER).prepend("event #")) .log("Processing ${body}...") // Register the 'generated' meter .to("microprofile-metrics:meter:generated")
3 // Register the 'attempt' meter via @Metered in Service.java .bean("service")
4 .filter(header(Exchange.REDELIVERED)) .log(LoggingLevel.WARN, "Processed ${body} after ${header.CamelRedeliveryCounter} retries") .setHeader(MicroProfileMetricsConstants.HEADER_METER_MARK, header(Exchange.REDELIVERY_COUNTER)) // Register the 'redelivery' meter .to("microprofile-metrics:meter:redelivery")
5 .end() .log("Successfully processed ${body}") // Register the 'success' meter .to("microprofile-metrics:meter:success");
6 } }
필요에 따라 모든 구현 파일에 Camel MicroProfile Metrics 주석을 추가합니다. 다음 예제에서는 Camel K 통합에서 호출하는
서비스
빈을 보여줍니다. 이로 인해 임의 오류가 발생합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow package com.redhat.integration; import java.util.Random; import org.apache.camel.Exchange; import org.apache.camel.RuntimeExchangeException; import org.eclipse.microprofile.metrics.Meter; import org.eclipse.microprofile.metrics.annotation.Metered; import org.eclipse.microprofile.metrics.annotation.Metric; import javax.inject.Named; import javax.enterprise.context.ApplicationScoped; @Named("service") @ApplicationScoped @io.quarkus.arc.Unremovable public class Service { //Register the attempt meter @Metered(absolute = true) public void attempt(Exchange exchange) { Random rand = new Random(); if (rand.nextDouble() < 0.5) { throw new RuntimeExchangeException("Random failure", exchange); } } }
package com.redhat.integration; import java.util.Random; import org.apache.camel.Exchange; import org.apache.camel.RuntimeExchangeException; import org.eclipse.microprofile.metrics.Meter; import org.eclipse.microprofile.metrics.annotation.Metered; import org.eclipse.microprofile.metrics.annotation.Metric; import javax.inject.Named; import javax.enterprise.context.ApplicationScoped; @Named("service") @ApplicationScoped @io.quarkus.arc.Unremovable public class Service { //Register the attempt meter @Metered(absolute = true) public void attempt(Exchange exchange) {
1 Random rand = new Random(); if (rand.nextDouble() < 0.5) { throw new RuntimeExchangeException("Random failure", exchange);
2 } } }
Camel K 통합 메트릭 구성 단계에 따라 통합을 실행하고 Prometheus에서 사용자 지정 Camel K 지표를 확인합니다.
이 경우 예제에서는 이미
Metrics.java
의 Camel K 모드를 사용하여Service.java
에 Prometheus 및 필수 Maven 종속성을 자동으로 구성합니다.
3장. Camel K operator 모니터링
Red Hat 통합 - Camel K 모니터링은 OpenShift 모니터링 시스템을 기반으로 합니다. 이 장에서는 런타임 시 Red Hat Integration - Camel K operator 모니터링에 사용 가능한 옵션을 사용하는 방법을 설명합니다. 이미 OpenShift 모니터링의 일부로 배포된 Prometheus Operator를 사용하여 자체 애플리케이션을 모니터링할 수 있습니다.
3.1. Camel K Operator 지표
Camel K Operator 모니터링 끝점에서는 다음 지표를 노출합니다.
이름 | 유형 | 설명 | 버킷 | 라벨 |
---|---|---|---|---|
|
| 조정 요청 기간 | 0.25s, 0.5s, 1s, 5s |
|
|
| 빌드 기간 | 30s, 1m, 1.5m, 2m, 5m, 10m |
|
|
| 빌드 복구 시도 | 0, 1, 2, 3, 4, 5 |
|
|
| 빌드 대기열 기간 | 5s, 15s, 30s, 1m, 5m, | 해당 없음 |
|
| 첫 번째 통합 준비 시간 | 5s, 10s, 30s, 1m, 2m | 해당 없음 |
3.2. Camel K Operator 모니터링 활성화
OpenShift 4.3 이상에는 OpenShift 모니터링의 일부로 이미 배포된 내장 Prometheus Operator가 포함되어 있습니다. 이 섹션에서는 OpenShift 모니터링에서 자체 애플리케이션 서비스 모니터링을 활성화하는 방법을 설명합니다.
사전 요구 사항
- Camel K Operator가 설치된 OpenShift 클러스터에 대한 클러스터 관리자 액세스 권한이 있어야 합니다. Camel K 설치를 참조하십시오.
- OpenShift에서 자체 서비스 모니터링을 이미 활성화해야 합니다. OpenShift에서 사용자 워크로드 모니터링 활성화를 참조하십시오.
절차
Operator 지표 끝점을 대상으로
PodMonitor
리소스를 생성하여 Prometheus 서버가 Operator가 노출하는 지표를 스크랩할 수 있습니다.operator-pod-monitor.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: camel-k-operator labels: app: "camel-k" camel.apache.org/component: operator spec: selector: matchLabels: app: "camel-k" camel.apache.org/component: operator podMetricsEndpoints: - port: metrics
apiVersion: monitoring.coreos.com/v1 kind: PodMonitor metadata: name: camel-k-operator labels: app: "camel-k" camel.apache.org/component: operator spec: selector: matchLabels: app: "camel-k" camel.apache.org/component: operator podMetricsEndpoints: - port: metrics
PodMonitor
리소스를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc apply -f operator-pod-monitor.yaml
oc apply -f operator-pod-monitor.yaml
추가 리소스
- 검색 메커니즘 및 Operator 리소스 간의 관계에 대한 자세한 내용은 Prometheus Operator 시작하기 가이드를 참조하십시오.
-
Operator 메트릭이 검색되지 않은 경우 ServiceMonitor 변경 문제 해결 에서 자세한 정보를 찾을 수 있습니다. 이 정보는
PodMonitor
리소스 문제 해결에도 적용됩니다.
3.3. Camel K operator 경고
OpenShift 모니터링 스택의 AlertManager 인스턴스가 Camel K Operator가 노출하는 메트릭을 기반으로 경고를 트리거할 수 있도록 PrometheusRule
리소스를 생성할 수 있습니다.
예제
아래와 같이 노출된 메트릭을 기반으로 경고 규칙을 사용하여 PrometheusRule
리소스를 생성할 수 있습니다.
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: name: camel-k-operator spec: groups: - name: camel-k-operator rules: - alert: CamelKReconciliationDuration expr: | ( 1 - sum(rate(camel_k_reconciliation_duration_seconds_bucket{le="0.5"}[5m])) by (job) / sum(rate(camel_k_reconciliation_duration_seconds_count[5m])) by (job) ) * 100 > 10 for: 1m labels: severity: warning annotations: message: | {{ printf "%0.0f" $value }}% of the reconciliation requests for {{ $labels.job }} have their duration above 0.5s. - alert: CamelKReconciliationFailure expr: | sum(rate(camel_k_reconciliation_duration_seconds_count{result="Errored"}[5m])) by (job) / sum(rate(camel_k_reconciliation_duration_seconds_count[5m])) by (job) * 100 > 1 for: 10m labels: severity: warning annotations: message: | {{ printf "%0.0f" $value }}% of the reconciliation requests for {{ $labels.job }} have failed. - alert: CamelKSuccessBuildDuration2m expr: | ( 1 - sum(rate(camel_k_build_duration_seconds_bucket{le="120",result="Succeeded"}[5m])) by (job) / sum(rate(camel_k_build_duration_seconds_count{result="Succeeded"}[5m])) by (job) ) * 100 > 10 for: 1m labels: severity: warning annotations: message: | {{ printf "%0.0f" $value }}% of the successful builds for {{ $labels.job }} have their duration above 2m. - alert: CamelKSuccessBuildDuration5m expr: | ( 1 - sum(rate(camel_k_build_duration_seconds_bucket{le="300",result="Succeeded"}[5m])) by (job) / sum(rate(camel_k_build_duration_seconds_count{result="Succeeded"}[5m])) by (job) ) * 100 > 1 for: 1m labels: severity: critical annotations: message: | {{ printf "%0.0f" $value }}% of the successful builds for {{ $labels.job }} have their duration above 5m. - alert: CamelKBuildFailure expr: | sum(rate(camel_k_build_duration_seconds_count{result="Failed"}[5m])) by (job) / sum(rate(camel_k_build_duration_seconds_count[5m])) by (job) * 100 > 1 for: 10m labels: severity: warning annotations: message: | {{ printf "%0.0f" $value }}% of the builds for {{ $labels.job }} have failed. - alert: CamelKBuildError expr: | sum(rate(camel_k_build_duration_seconds_count{result="Error"}[5m])) by (job) / sum(rate(camel_k_build_duration_seconds_count[5m])) by (job) * 100 > 1 for: 10m labels: severity: critical annotations: message: | {{ printf "%0.0f" $value }}% of the builds for {{ $labels.job }} have errored. - alert: CamelKBuildQueueDuration1m expr: | ( 1 - sum(rate(camel_k_build_queue_duration_seconds_bucket{le="60"}[5m])) by (job) / sum(rate(camel_k_build_queue_duration_seconds_count[5m])) by (job) ) * 100 > 1 for: 1m labels: severity: warning annotations: message: | {{ printf "%0.0f" $value }}% of the builds for {{ $labels.job }} have been queued for more than 1m. - alert: CamelKBuildQueueDuration5m expr: | ( 1 - sum(rate(camel_k_build_queue_duration_seconds_bucket{le="300"}[5m])) by (job) / sum(rate(camel_k_build_queue_duration_seconds_count[5m])) by (job) ) * 100 > 1 for: 1m labels: severity: critical annotations: message: | {{ printf "%0.0f" $value }}% of the builds for {{ $labels.job }} have been queued for more than 5m.
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: camel-k-operator
spec:
groups:
- name: camel-k-operator
rules:
- alert: CamelKReconciliationDuration
expr: |
(
1 - sum(rate(camel_k_reconciliation_duration_seconds_bucket{le="0.5"}[5m])) by (job)
/
sum(rate(camel_k_reconciliation_duration_seconds_count[5m])) by (job)
)
* 100
> 10
for: 1m
labels:
severity: warning
annotations:
message: |
{{ printf "%0.0f" $value }}% of the reconciliation requests
for {{ $labels.job }} have their duration above 0.5s.
- alert: CamelKReconciliationFailure
expr: |
sum(rate(camel_k_reconciliation_duration_seconds_count{result="Errored"}[5m])) by (job)
/
sum(rate(camel_k_reconciliation_duration_seconds_count[5m])) by (job)
* 100
> 1
for: 10m
labels:
severity: warning
annotations:
message: |
{{ printf "%0.0f" $value }}% of the reconciliation requests
for {{ $labels.job }} have failed.
- alert: CamelKSuccessBuildDuration2m
expr: |
(
1 - sum(rate(camel_k_build_duration_seconds_bucket{le="120",result="Succeeded"}[5m])) by (job)
/
sum(rate(camel_k_build_duration_seconds_count{result="Succeeded"}[5m])) by (job)
)
* 100
> 10
for: 1m
labels:
severity: warning
annotations:
message: |
{{ printf "%0.0f" $value }}% of the successful builds
for {{ $labels.job }} have their duration above 2m.
- alert: CamelKSuccessBuildDuration5m
expr: |
(
1 - sum(rate(camel_k_build_duration_seconds_bucket{le="300",result="Succeeded"}[5m])) by (job)
/
sum(rate(camel_k_build_duration_seconds_count{result="Succeeded"}[5m])) by (job)
)
* 100
> 1
for: 1m
labels:
severity: critical
annotations:
message: |
{{ printf "%0.0f" $value }}% of the successful builds
for {{ $labels.job }} have their duration above 5m.
- alert: CamelKBuildFailure
expr: |
sum(rate(camel_k_build_duration_seconds_count{result="Failed"}[5m])) by (job)
/
sum(rate(camel_k_build_duration_seconds_count[5m])) by (job)
* 100
> 1
for: 10m
labels:
severity: warning
annotations:
message: |
{{ printf "%0.0f" $value }}% of the builds for {{ $labels.job }} have failed.
- alert: CamelKBuildError
expr: |
sum(rate(camel_k_build_duration_seconds_count{result="Error"}[5m])) by (job)
/
sum(rate(camel_k_build_duration_seconds_count[5m])) by (job)
* 100
> 1
for: 10m
labels:
severity: critical
annotations:
message: |
{{ printf "%0.0f" $value }}% of the builds for {{ $labels.job }} have errored.
- alert: CamelKBuildQueueDuration1m
expr: |
(
1 - sum(rate(camel_k_build_queue_duration_seconds_bucket{le="60"}[5m])) by (job)
/
sum(rate(camel_k_build_queue_duration_seconds_count[5m])) by (job)
)
* 100
> 1
for: 1m
labels:
severity: warning
annotations:
message: |
{{ printf "%0.0f" $value }}% of the builds for {{ $labels.job }}
have been queued for more than 1m.
- alert: CamelKBuildQueueDuration5m
expr: |
(
1 - sum(rate(camel_k_build_queue_duration_seconds_bucket{le="300"}[5m])) by (job)
/
sum(rate(camel_k_build_queue_duration_seconds_count[5m])) by (job)
)
* 100
> 1
for: 1m
labels:
severity: critical
annotations:
message: |
{{ printf "%0.0f" $value }}% of the builds for {{ $labels.job }}
have been queued for more than 5m.
Camel K operator 경고
다음 표는 PrometheusRule
리소스에 정의된 경고 규칙을 보여줍니다.
이름 | 심각도 | 설명 |
---|---|---|
| 경고 | 조정 요청의 10% 이상은 1분 이상 0.5s 이상의 기간이 있습니다. |
| 경고 | 조정 요청의 1% 이상이 10분 이상 실패했습니다. |
| 경고 | 성공적인 빌드의 10% 이상은 최소 1분 이상 2분 이상 지속됩니다. |
| 심각 | 성공적인 빌드의 1 % 이상은 최소 1분 이상 5분 이상 지속됩니다. |
| 심각 | 빌드의 1% 이상이 최소 10분 이상 오류가 발생했습니다. |
| 경고 | 1분 이상 1분 이상 대기 중인 빌드의 1% 이상이 대기되었습니다. |
| 심각 | 빌드의 1% 이상이 최소 1분 이상 대기되었습니다. |
OpenShift 설명서에서 경고 규칙 생성 에서 경고에 대한 자세한 정보를 확인할 수 있습니다.
4장. Camel K 통합 구성
Camel K 통합 라이프 사이클에는 다음 두 가지 구성 단계가 있습니다.
- 빌드 시간 - Camel Quarkus가 Camel K 통합을 빌드하면 빌드 타임 속성이 사용됩니다.
- 런타임 - Camel K 통합이 실행 중일 때 통합에서는 로컬 파일, OpenShift ConfigMap 또는 시크릿의 런타임 속성 또는 구성 정보를 사용합니다.
kamel run
명령과 함께 다음 옵션을 사용하여 구성 정보를 제공합니다.
-
빌드 시간 구성의 경우 빌드 시간 구성 속성 지정에 설명된 대로
--build-
property옵션을 사용합니다. -
런타임 구성의 경우 런타임 구성 옵션 지정에 설명된 대로
--property
,--config
,--resource
옵션을사용합니다.
예를 들어 빌드 시간 및 런타임 옵션을 사용하여 Camel K에서 데이터 소스를 빠르게 구성할 수 있습니다: Connect Camel K with databases sample configuration.
4.1. 빌드 시간 구성 속성 지정
Camel K 통합을 구축할 수 있도록 Camel Quarkus 런타임에 속성 값을 제공해야 할 수 있습니다. 빌드 시간 동안 적용되는 Quarkus 구성에 대한 자세한 내용은 Quarkus Build Time 구성 설명서 를 참조하십시오. 명령줄에서 직접 빌드 시간 속성을 지정하거나 속성 파일을 참조하여 지정할 수 있습니다. 속성이 두 위치에 모두 정의되면 명령줄에 직접 지정된 값이 속성 파일의 값보다 우선합니다.
사전 요구 사항
- Camel K Operator 및 OpenShift Serverless Operator가 설치된 OpenShift 클러스터에 액세스할 수 있어야 합니다.
- Camel K 설치
- OperatorHub에서 OpenShift Serverless 설치
- Camel K 통합에 적용하려는 Camel Quarkus 구성 옵션을 알고 있습니다.
절차
Camel K
kamel run
명령을 사용하여--build-property
옵션을 지정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --build-property <quarkus-property>=<property-value> <camel-k-integration>
kamel run --build-property <quarkus-property>=<property-value> <camel-k-integration>
예를 들어 다음 Camel K 통합 (
my-simple-timer.yaml
)은quarkus.application.name
구성 옵션을 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow - from: uri: "timer:tick" steps: - set-body: constant: "{{quarkus.application.name}}" - to: "log:info"
- from: uri: "timer:tick" steps: - set-body: constant: "{{quarkus.application.name}}" - to: "log:info"
기본 애플리케이션 이름을 재정의하려면 통합을 실행할 때
quarkus.application.name
속성 값을 지정합니다.예를 들어 이름을
my-simple-timer
에서my-favorite-app
으로 변경하려면 다음을 수행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --build-property quarkus.application.name=my-favorite-app my-simple-timer.yaml
kamel run --build-property quarkus.application.name=my-favorite-app my-simple-timer.yaml
둘 이상의 빌드 시간 속성을 제공하려면
kamel run
명령에--build-property
옵션을 추가합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --build-property <quarkus-property1>=<property-value1> -build-property=<quarkus-property2>=<property-value12> <camel-k-integration>
kamel run --build-property <quarkus-property1>=<property-value1> -build-property=<quarkus-property2>=<property-value12> <camel-k-integration>
또는 여러 속성을 지정해야 하는 경우 속성 파일을 만들고
--build-property
파일 옵션을 사용하여 속성 파일을 지정할 수 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --build-property file:<property-filename> <camel-k-integration>
kamel run --build-property file:<property-filename> <camel-k-integration>
예를 들어 다음 속성 파일(
quarkus.properties
)은 두 개의 Quarkus 속성을 정의합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow quarkus.application.name = my-favorite-app quarkus.banner.enabled = true
quarkus.application.name = my-favorite-app quarkus.banner.enabled = true
quarkus.ovnner.enabled
속성은 통합이 시작될 때 Quarkus 배너를 표시하도록 지정합니다.Camel K kamel run 명령을 사용하여
quarkus.properties
파일을 지정하려면 다음을 실행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --build-property file:quarkus.properties my-simple-timer.yaml
kamel run --build-property file:quarkus.properties my-simple-timer.yaml
Quarkus는 속성 파일을 구문 분석하고 속성 값을 사용하여 Camel K 통합을 구성합니다.
추가 리소스
Camel K 통합의 런타임인 Camel Quarkus에 대한 자세한 내용은 Quarkus Trait 를 참조하십시오.
4.2. 런타임 구성 옵션 지정
실행 시 사용할 Camel K 통합에 대해 다음과 같은 런타임 구성 정보를 지정할 수 있습니다.
- 명령줄 또는 .properties 파일에서 제공하는 런타임 속성입니다.
- 통합이 시작될 때 Camel K 연산자가 런타임 속성으로 처리하고 구문 분석하도록 설정 값입니다. 로컬 텍스트 파일, OpenShift ConfigMap 또는 OpenShift 시크릿에 구성 값을 제공할 수 있습니다.
- 통합을 시작할 때 속성 파일로 구문 분석되지 않는 리소스 정보입니다. 로컬 텍스트 파일, 바이너리 파일, OpenShift ConfigMap 또는 OpenShift 시크릿에 리소스 정보를 제공할 수 있습니다.
다음 kamel 실행
옵션을 사용합니다.
--property
--property
옵션을 사용하여 명령줄에서 직접 런타임 속성을 지정하거나 Java*.properties
파일을 참조합니다. Camel K 연산자는 실행 중인 통합의user.properties
파일에 속성 파일의 내용을 추가합니다.--config
--config
옵션을 사용하여 통합이 시작될 때 Camel K Operator가 런타임 속성으로 처리하고 구문 분석할 구성 값을 제공합니다.로컬 텍스트 파일(MiB 최대 파일 크기), ConfigMap (3MB) 또는 Secret (3MB)을 제공할 수 있습니다. 파일은 UTF-8 리소스여야 합니다. 제공할 파일에서 구체화된 파일(통합 시작 시 생성됨)은 classpath 수준에서 사용할 수 있으므로 정확한 위치를 제공하지 않고도 통합 코드에서 참조할 수 있습니다.
참고: 비UTF-8 리소스(예: 바이너리 파일)를 제공해야 하는 경우
--resource
옵션을 사용합니다.--resource
--resource
옵션을 사용하여 실행 시 액세스할 수 있는 통합 리소스를 제공합니다. 로컬 텍스트 또는 바이너리 파일(MiB 최대 파일 크기), ConfigMap(최대 3MB) 또는 Secret(최대 3MB)을 제공할 수 있습니다. 선택적으로 리소스에 구체화된 파일의 대상을 지정할 수 있습니다. 예를 들어 HTTPS 연결을 설정하려면--resource
옵션을 사용하여 지정된 위치에서 예상되는 SSL 인증서( 바이너리 파일)를 제공합니다.Camel K Operator는 속성의 리소스를 구문 분석하지 않으며 classpath에 리소스를 추가하지 않습니다. (classpath에 리소스를 추가하려는 경우 통합에 JVM 특성을 사용할 수 있습니다).
4.2.1. 런타임 속성 제공
kamel run
명령의 --property
옵션을 사용하여 명령줄에서 직접 또는 Java *.properties
파일을 참조하여 런타임 속성을 지정할 수 있습니다.
--property
옵션과의 통합을 실행하는 경우 Camel K 연산자는 실행 중인 통합의 user.properties
파일에 속성을 추가합니다.
4.2.1.1. 명령줄에서 런타임 속성 제공
런타임 시 명령줄에서 Camel K 통합의 속성을 구성할 수 있습니다. 속성 자리 표시자(예: {{my.message}}
)를 사용하여 통합에 속성 값을 정의할 때 명령줄에서 속성 값을 지정할 수 있습니다(예: --property my.message=Hello
). 단일 명령에서 여러 속성을 지정할 수 있습니다.
사전 요구 사항
절차
속성을 사용하는 Camel 통합 개발. 다음 간단한 예제에는
{{my.message}}
속성 자리 표시자가 포함되어 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... - from: uri: "timer:tick" steps: - set-body: constant: "{{my.message}}" - to: "log:info" ...
... - from: uri: "timer:tick" steps: - set-body: constant: "{{my.message}}" - to: "log:info" ...
다음 구문을 사용하여 런타임에 속성 값을 설정하여 통합을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --property <property>=<value> <integration>
kamel run --property <property>=<value> <integration>
또는
--p
단축 표기법(--property
대신)을 사용할 수 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --property <property>=<value> <integration>
kamel run --property <property>=<value> <integration>
예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --property my.message="Hola Mundo" HelloCamelK.java --dev
kamel run --property my.message="Hola Mundo" HelloCamelK.java --dev
또는
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --p my.message="Hola Mundo" HelloCamelK.java --dev
kamel run --p my.message="Hola Mundo" HelloCamelK.java --dev
다음은 예제 결과입니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ... [1] 2020-04-13 15:39:59.213 INFO [main] ApplicationRuntime - Listener org.apache.camel.k.listener.RoutesDumper@6e0dec4a executed in phase Started [1] 2020-04-13 15:40:00.237 INFO [Camel (camel-k) thread #1 - timer://java] info - Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hola Mundo from java] ...
... [1] 2020-04-13 15:39:59.213 INFO [main] ApplicationRuntime - Listener org.apache.camel.k.listener.RoutesDumper@6e0dec4a executed in phase Started [1] 2020-04-13 15:40:00.237 INFO [Camel (camel-k) thread #1 - timer://java] info - Exchange[ExchangePattern: InOnly, BodyType: String, Body: Hola Mundo from java] ...
자세한 내용은
4.2.1.2. 속성 파일에 런타임 속성 제공
런타임 시 명령줄에서 속성 파일(*.properties
)을 지정하여 Camel K 통합에 대해 여러 속성을 구성할 수 있습니다. 속성 자리 표시자(예: {{my.items}}
)를 사용하여 통합에서 속성 값을 정의할 때 속성 파일을 사용하여 명령줄에서 속성 값을 지정할 수 있습니다(예: --p file my-integration.properties
).
사전 요구 사항
절차
통합 속성 파일을 생성합니다. 다음 예제는
my.properties
라는 파일에서 가져온 것입니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow my.key.1=hello my.key.2=world
my.key.1=hello my.key.2=world
속성 파일에 정의된 속성을 사용하는 Camel 통합을 개발합니다. 다음 예제
Routing.java
통합에서는{{my.key.1}}
및{{my.key.2=world}}
속성 자리 표시자를 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow import org.apache.camel.builder.RouteBuilder; public class Routing extends RouteBuilder { @Override public void configure() throws Exception { from("timer:property-file") .routeId("property-file") .log("property file content is: {{my.key.1}} {{my.key.2}}"); } }
import org.apache.camel.builder.RouteBuilder; public class Routing extends RouteBuilder { @Override public void configure() throws Exception { from("timer:property-file") .routeId("property-file") .log("property file content is: {{my.key.1}} {{my.key.2}}"); } }
속성 파일을 참조하려면 다음 구문을 사용하여 통합을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --property file:<my-file.properties> <integration>
kamel run --property file:<my-file.properties> <integration>
또는
--p
단축 표기법(--property
대신)을 사용할 수 있습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --p file:<my-file.properties> <integration>
kamel run --p file:<my-file.properties> <integration>
예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run Routing.java --property:file=my.properties --dev
kamel run Routing.java --property:file=my.properties --dev
4.2.2. 구성 값 제공
kamel run
명령의 --config
옵션을 사용하여 Camel K Operator가 런타임 속성으로 처리하고 구문 분석할 구성 값을 제공할 수 있습니다. 로컬 텍스트(UTF-8) 파일, OpenShift ConfigMap 또는 OpenShift 시크릿에 구성 값을 제공할 수 있습니다.
통합을 실행할 때 Camel K Operator는 제공된 파일을 구체화하고 classpath에 추가하여 정확한 위치를 제공하지 않고도 통합 코드의 구성 값을 참조할 수 있습니다.
4.2.2.1. 텍스트 파일 지정
구성 값이 포함된 UTF-8 텍스트 파일이 있는 경우 --config file:/path/to/file
옵션을 사용하여 실행 중인 통합의 classpath에서 파일을 사용할 수 있도록 할 수 있습니다.
사전 요구 사항
- Camel K 개발 환경 설정
구성 값을 포함하는 하나 이상의 (비-binary) 텍스트 파일이 있습니다.
예를 들어 다음 텍스트 줄이 포함된
resources-data.txt
라는 파일을 만듭니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow the file body
the file body
절차
구성 값이 포함된 텍스트 파일을 참조하는 Camel K 통합을 생성합니다.
예를 들어 다음 통합(
ConfigFileRoute.java
)에 런타임 시 classpath에서resources-data.txt
파일을 사용할 수 있어야 합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow import org.apache.camel.builder.RouteBuilder; public class ConfigFileRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:config-file") .setBody() .simple("resource:classpath:resources-data.txt") .log("resource file content is: ${body}"); } }
import org.apache.camel.builder.RouteBuilder; public class ConfigFileRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:config-file") .setBody() .simple("resource:classpath:resources-data.txt") .log("resource file content is: ${body}"); } }
통합을 실행하고
--config
옵션을 사용하여 실행 중인 통합에서 사용할 수 있도록 텍스트 파일을 지정합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --config file:resources-data.txt ConfigFileRoute.java --dev
kamel run --config file:resources-data.txt ConfigFileRoute.java --dev
선택적으로
--config
옵션을 반복적으로 추가하여 두 개 이상의 파일을 제공할 수 있습니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --config file:resources-data1.txt --config file:resources-data2.txt ConfigFileRoute.java --dev
kamel run --config file:resources-data1.txt --config file:resources-data2.txt ConfigFileRoute.java --dev
4.2.2.2. ConfigMap 지정
구성 값이 포함된 OpenShift ConfigMap이 있고 Camel K 통합에 사용할 수 있도록 ConfigMap을 구체화해야 하는 경우 --config configmap:<configmap-name> 구문을 사용합니다.
사전 요구 사항
- Camel K 개발 환경 설정
OpenShift 클러스터에 하나 이상의 ConfigMap 파일이 저장되어 있습니다.
예를 들어 다음 명령을 사용하여 ConfigMap을 생성할 수 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create configmap my-cm --from-literal=my-configmap-key="configmap content"
oc create configmap my-cm --from-literal=my-configmap-key="configmap content"
절차
ConfigMap을 참조하는 Camel K 통합을 생성합니다.
예를 들어 다음 통합(
ConfigConfigmapRoute.java
라고 함)은my-cm
라는 ConfigMap에서my-configmap-key
라는 구성 값을 참조합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow import org.apache.camel.builder.RouteBuilder; public class ConfigConfigmapRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:configmap") .setBody() .simple("resource:classpath:my-configmap-key") .log("configmap content is: ${body}"); } }
import org.apache.camel.builder.RouteBuilder; public class ConfigConfigmapRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:configmap") .setBody() .simple("resource:classpath:my-configmap-key") .log("configmap content is: ${body}"); } }
통합을 실행하고
--config
옵션을 사용하여 실행 중인 통합에서 사용할 수 있도록 ConfigMap 파일을 구체화합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --config configmap:my-cm ConfigConfigmapRoute.java --dev
kamel run --config configmap:my-cm ConfigConfigmapRoute.java --dev
통합이 시작되면 Camel K Operator는 ConfigMap의 콘텐츠를 사용하여 OpenShift 볼륨을 마운트합니다.
참고: 클러스터에서 아직 사용할 수 없는 ConfigMap을 지정하면 통합이 기다린 후 ConfigMap을 사용할 수 있게 됩니다.
4.2.2.3. 보안 지정
OpenShift 보안을 사용하여 구성 정보를 안전하게 포함할 수 있습니다. Camel K 통합에 사용할 수 있도록 시크릿을 구체화하려면 --config 시크릿
구문을 사용할 수 있습니다.
사전 요구 사항
- Camel K 개발 환경 설정
OpenShift 클러스터에 하나 이상의 시크릿이 저장되어 있습니다.
예를 들어 다음 명령을 사용하여 보안을 생성할 수 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create secret generic my-sec --from-literal=my-secret-key="very top secret"
oc create secret generic my-sec --from-literal=my-secret-key="very top secret"
절차
ConfigMap을 참조하는 Camel K 통합을 생성합니다.
예를 들어, 다음 통합 (
ConfigSecretRoute.java
)은my-sec
이라는 보안에 있는my-secret
속성을 참조합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow import org.apache.camel.builder.RouteBuilder; public class ConfigSecretRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:secret") .setBody() .simple("resource:classpath:my-secret") .log("secret content is: ${body}"); } }
import org.apache.camel.builder.RouteBuilder; public class ConfigSecretRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:secret") .setBody() .simple("resource:classpath:my-secret") .log("secret content is: ${body}"); } }
통합을 실행하고
--config
옵션을 사용하여 실행 중인 통합에서 사용할 수 있도록 보안을 구체화합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --config secret:my-sec ConfigSecretRoute.java --dev
kamel run --config secret:my-sec ConfigSecretRoute.java --dev
통합이 시작되면 Camel K Operator는 Secret의 컨텐츠로 OpenShift 볼륨을 마운트합니다.
4.2.2.4. ConfigMaps 또는 Secrets에 포함된 속성 참조
통합을 실행하고 --config
옵션을 사용하여 ConfigMap 또는 Secret을 지정하면 Camel K Operator가 ConfigMap 또는 Secret을 런타임 속성 파일로 구문 분석합니다. 통합 내에서 다른 런타임 속성을 참조할 때 속성을 참조할 수 있습니다.In your integration, you can reference the properties as you would reference any other runtime property.
사전 요구 사항
절차
속성이 포함된 텍스트 파일을 만듭니다.
예를 들어 다음 속성이 포함된
my.properties
라는 파일을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow my.key.1=hello my.key.2=world
my.key.1=hello my.key.2=world
속성 파일을 기반으로 ConfigMap 또는 보안을 생성합니다.
예를 들어 다음 명령을 사용하여 my.properties 파일에서 시크릿을 생성합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create secret generic my-sec --from-file my.properties
oc create secret generic my-sec --from-file my.properties
통합에서 시크릿에 정의된 속성을 참조하십시오.
예를 들어, 다음 통합 (
ConfigSecretPropertyRoute.java
)은my.key.1
및my.key.2
속성을 참조합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow import org.apache.camel.builder.RouteBuilder; public class ConfigSecretPropertyRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:secret") .routeId("secret") .log("{{my.key.1}} {{my.key.2}}"); } }
import org.apache.camel.builder.RouteBuilder; public class ConfigSecretPropertyRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:secret") .routeId("secret") .log("{{my.key.1}} {{my.key.2}}"); } }
통합을 실행하고
--config
옵션을 사용하여my.key.1
및my.key.2
속성이 포함된 Secret을 지정합니다.예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --config secret:my-sec ConfigSecretPropertyRoute.java --dev
kamel run --config secret:my-sec ConfigSecretPropertyRoute.java --dev
4.2.2.5. ConfigMap 또는 Secret에서 가져온 구성 값 필터링
ConfigMaps 및 Secrets는 둘 이상의 소스를 보유할 수 있습니다. 예를 들어 다음 명령은 두 가지 소스에서 시크릿(my-sec-multi
)을 생성합니다.
oc create secret generic my-sec-multi --from-literal=my-secret-key="very top secret" --from-literal=my-secret-key-2="even more secret"
oc create secret generic my-sec-multi --from-literal=my-secret-key="very top secret" --from-literal=my-secret-key-2="even more secret"
--config configmap
또는 --config 시크릿
옵션 뒤에 /key
표기법을 사용하여 통합에서 검색하는 정보의 수를 하나의 소스로 제한할 수 있습니다.
사전 요구 사항
- Camel K 개발 환경 설정
- 두 개 이상의 소스를 보유한 ConfigMap 또는 Secret이 있습니다.
절차
ConfigMap 또는 Secret의 소스 중 하나에서 구성 값을 사용하는 통합을 생성합니다.
예를 들어 다음 통합(
ConfigSecretKeyRoute.java
)은my-sec-multi
시크릿의 소스 중 하나만의 속성을 사용합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow import org.apache.camel.builder.RouteBuilder; public class ConfigSecretKeyRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:secret") .setBody() .simple("resource:classpath:my-secret-key-2") .log("secret content is: ${body}"); } }
import org.apache.camel.builder.RouteBuilder; public class ConfigSecretKeyRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:secret") .setBody() .simple("resource:classpath:my-secret-key-2") .log("secret content is: ${body}"); } }
--config secret
옵션과/key
표기법을 사용하여 통합을 실행합니다.예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --config secret:my-sec-multi/my-secret-key-2 ConfigSecretKeyRoute.java --dev
kamel run --config secret:my-sec-multi/my-secret-key-2 ConfigSecretKeyRoute.java --dev
통합 Pod를 확인하여 지정된 소스(예:
my-secret-key-2)
만 마운트되었는지 확인합니다.예를 들어 다음 명령을 실행하여 Pod의 모든 볼륨을 나열합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc set volume pod/<pod-name> --all
oc set volume pod/<pod-name> --all
4.2.3. 실행 중인 통합에 리소스 제공
kamel run 명령의 --resource
옵션을 지정하여 실행할 때 사용할 통합 리소스를 제공할 수 있습니다. 로컬 텍스트 파일(MiB 최대 파일 크기), ConfigMap (3MB) 또는 Secret (3MB)을 지정할 수 있습니다. 선택적으로 리소스에 구체화된 파일의 대상을 지정할 수 있습니다. 예를 들어 HTTPS 연결을 설정하려면 알려진 위치에서 예상되는 바이너리 파일인 SSL 인증서를 제공해야 하므로 --resource 옵션을 사용합니다.
--resource
옵션을 사용하면 Camel K Operator가 런타임 속성을 찾는 리소스를 구문 분석하지 않으며 클래스 경로에 리소스를 추가하지 않습니다. (classpath에 리소스를 추가하려는 경우 JVM 특성을 사용할 수 있습니다.
4.2.3.1. 텍스트 또는 바이너리 파일을 리소스로 지정
구성 값이 포함된 텍스트 또는 바이너리 파일이 있는 경우 --resource file:/path/to/file
옵션을 사용하여 파일을 구체화할 수 있습니다. 기본적으로 Camel K Operator는 구체화된 파일을 /etc/camel/resources/
디렉터리에 복사합니다. 필요한 경우 리소스의 대상 경로 지정에 설명된 대로 다른 대상 디렉터리를 지정할 수 있습니다.
사전 요구 사항
- Camel K 개발 환경 설정
- 구성 속성을 포함하는 하나 이상의 텍스트 또는 바이너리 파일이 있습니다.
절차
사용자가 제공하는 파일의 내용을 읽어 Camel K 통합을 만듭니다.
예를 들어 다음 통합 (
ResourceFileBinaryRoute.java
)의 압축을 풀고resources-data.zip
파일을 읽습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow import org.apache.camel.builder.RouteBuilder; public class ResourceFileBinaryRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/etc/camel/resources/?fileName=resources-data.zip&noop=true&idempotent=false") .unmarshal().zipFile() .log("resource file unzipped content is: ${body}"); } }
import org.apache.camel.builder.RouteBuilder; public class ResourceFileBinaryRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/etc/camel/resources/?fileName=resources-data.zip&noop=true&idempotent=false") .unmarshal().zipFile() .log("resource file unzipped content is: ${body}"); } }
통합을 실행하고
--resource
옵션을 사용하여 파일을 기본 대상 디렉터리(/etc/camel/resources/
)에 복사합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --resource file:resources-data.zip ResourceFileBinaryRoute.java -d camel-zipfile --dev
kamel run --resource file:resources-data.zip ResourceFileBinaryRoute.java -d camel-zipfile --dev
참고: 바이너리 파일을 지정하면 파일 내용의 바이너리 표현이 생성되고 통합에서 투명하게 디코딩됩니다.
선택적으로
--resource
옵션을 반복적으로 추가하여 둘 이상의 리소스를 제공할 수 있습니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --resource file:resources-data1.txt --resource file:resources-data2.txt ResourceFileBinaryRoute.java -d camel-zipfile --dev
kamel run --resource file:resources-data1.txt --resource file:resources-data2.txt ResourceFileBinaryRoute.java -d camel-zipfile --dev
4.2.3.2. ConfigMap을 리소스로 지정
구성 값이 포함된 OpenShift ConfigMap이 있고 통합을 위한 리소스로 ConfigMap을 구체화해야 하는 경우 --resource <configmap-file
> 옵션을 사용합니다.
사전 요구 사항
- Camel K 개발 환경 설정
OpenShift 클러스터에 하나 이상의 ConfigMap 파일이 저장되어 있습니다. 예를 들어 다음 명령을 사용하여 ConfigMap을 생성할 수 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create configmap my-cm --from-literal=my-configmap-key="configmap content"
oc create configmap my-cm --from-literal=my-configmap-key="configmap content"
절차
OpenShift 클러스터에 저장된 ConfigMap을 참조하는 Camel K 통합을 생성합니다.
예를 들어 다음 통합(
ResourceConfigmapRoute.java
라고 함)은my-configmap-key
가 포함된my-cm
라는 ConfigMap을 참조합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow import org.apache.camel.builder.RouteBuilder; public class ResourceConfigmapRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/etc/camel/resources/my-cm/?fileName=my-configmap-key&noop=true&idempotent=false") .log("resource file content is: ${body}"); } }
import org.apache.camel.builder.RouteBuilder; public class ResourceConfigmapRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/etc/camel/resources/my-cm/?fileName=my-configmap-key&noop=true&idempotent=false") .log("resource file content is: ${body}"); } }
통합을 실행하고
--resource
옵션을 사용하여 실행 중인 통합에서 사용할 수 있도록 기본/etc/camel/resources/
디렉터리에 ConfigMap 파일을 구체화합니다.예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --resource configmap:my-cm ResourceConfigmapRoute.java --dev
kamel run --resource configmap:my-cm ResourceConfigmapRoute.java --dev
통합이 시작되면 Camel K Operator는 ConfigMap의 콘텐츠(예:
my-configmap-key
)를 사용하여 볼륨을 마운트합니다.
참고: 클러스터에서 아직 사용할 수 없는 ConfigMap을 지정하면 통합이 기다린 후 ConfigMap을 사용할 수 있게 됩니다.
4.2.3.3. 시크릿을 리소스로 지정
구성 정보가 포함된 OpenShift Secret이 있고 하나 이상의 통합에 사용할 수 있는 리소스로 구체화해야 하는 경우 --resource <secret
> 구문을 사용합니다.
사전 요구 사항
- Camel K 개발 환경 설정
OpenShift 클러스터에 하나 이상의 Secrets 파일이 저장되어 있습니다. 예를 들어 다음 명령을 사용하여 보안을 생성할 수 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create secret generic my-sec --from-literal=my-secret-key="very top secret"
oc create secret generic my-sec --from-literal=my-secret-key="very top secret"
절차
OpenShift 클러스터에 저장된 보안을 참조하는 Camel K 통합을 생성합니다.
예를 들어, 다음 통합 (
ResourceSecretRoute.java
)은my-sec
Secret을 참조합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow import org.apache.camel.builder.RouteBuilder; public class ResourceSecretRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/etc/camel/resources/my-sec/?fileName=my-secret-key&noop=true&idempotent=false") .log("resource file content is: ${body}"); } }
import org.apache.camel.builder.RouteBuilder; public class ResourceSecretRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/etc/camel/resources/my-sec/?fileName=my-secret-key&noop=true&idempotent=false") .log("resource file content is: ${body}"); } }
통합을 실행하고
--resource
옵션을 사용하여 실행 중인 통합에서 사용할 수 있도록 기본/etc/camel/resources/
디렉터리에 보안을 구체화합니다.예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --resource secret:my-sec ResourceSecretRoute.java --dev
kamel run --resource secret:my-sec ResourceSecretRoute.java --dev
통합이 시작되면 Camel K Operator는 Secret의 콘텐츠(예:
my-sec
)로 볼륨을 마운트합니다.
참고: 클러스터에서 아직 사용할 수 없는 시크릿을 지정하는 경우 Integration은 시크릿을 사용할 수 있게 된 후에만 기다린 후 시작됩니다.
4.2.3.4. 리소스의 대상 경로 지정
/etc/camel/resources/
디렉터리는 --resource
옵션으로 지정하는 리소스를 마운트하기 위한 기본 위치입니다. 리소스를 마운트할 다른 디렉터리를 지정해야 하는 경우 --resource @path
구문을 사용합니다.
사전 요구 사항
- Camel K 개발 환경 설정
- 하나 이상의 구성 속성이 포함된 파일, ConfigMap 또는 Secret이 있습니다.
절차
구성 속성이 포함된 파일, ConfigMap 또는 보안을 참조하는 Camel K 통합을 생성합니다. 예를 들어 다음 통합(
ResourceFileLocationRoute.java
)은myprops
파일을 참조합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow import org.apache.camel.builder.RouteBuilder; public class ResourceFileLocationRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/tmp/?fileName=input.txt&noop=true&idempotent=false") .log("resource file content is: ${body}"); } }
import org.apache.camel.builder.RouteBuilder; public class ResourceFileLocationRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/tmp/?fileName=input.txt&noop=true&idempotent=false") .log("resource file content is: ${body}"); } }
통합을 실행하고
@path
구문과 함께--resource
옵션을 사용하고 리소스 콘텐츠를 마운트할 위치(파일, ConfigMap 또는 Secret)를 지정합니다.예를 들어 다음 명령은
/tmp
디렉터리를 사용하여input.txt
파일을 마운트하도록 지정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --resource file:resources-data.txt@/tmp/input.txt ResourceFileLocationRoute.java --dev
kamel run --resource file:resources-data.txt@/tmp/input.txt ResourceFileLocationRoute.java --dev
통합 포드를 확인하여 파일(예:
input.txt
)이 올바른 위치(예:tmp
디렉터리)에 마운트되었는지 확인합니다. 예를 들어 다음 명령을 실행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc exec <pod-name> -- cat /tmp/input.txt
oc exec <pod-name> -- cat /tmp/input.txt
4.2.3.5. ConfigMap 또는 Secret 데이터 필터링
ConfigMap 또는 Secret을 생성할 때 둘 이상의 정보 소스를 지정할 수 있습니다. 예를 들어 다음 명령은 다음 두 소스에서 ConfigMap( my-cm-multi
)을 생성합니다.
oc create configmap my-cm-multi --from-literal=my-configmap-key="configmap content" --from-literal=my-configmap-key-2="another content"
oc create configmap my-cm-multi --from-literal=my-configmap-key="configmap content" --from-literal=my-configmap-key-2="another content"
--resource
옵션과의 통합을 실행하면 기본적으로 두 가지 이상의 소스로 생성된 ConfigMap 또는 Secret이 구체화됩니다.
ConfigMap 또는 Secret에서 복구할 정보 수를 제한하려면 ConfigMap 또는 Secret 이름 뒤에 --resource
옵션의 /key 표기법을 지정할 수 있습니다. 예를 들어 --resource configmap:my-cm/my-key
또는 --resource secret:my-secret/my-key
입니다.
리소스 configmap 또는
제한할 수 있습니다.
--resource 시크릿
옵션 뒤에 /key 표기법을 사용하여 통합에서 검색하는 정보의 수량을 하나의 리소스로
사전 요구 사항
- Camel K 개발 환경 설정
- 두 개 이상의 소스의 값을 보유하는 ConfigMap 또는 Secret이 있습니다.
절차
ConfigMap 또는 Secret의 리소스 중 하나에서 구성 값을 사용하는 통합을 생성합니다. 예를 들어
ResourceConfigmapKeyLocationRoute.java
통합은my-cm-multi
ConfigMap을 참조합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow import org.apache.camel.builder.RouteBuilder; public class ResourceConfigmapKeyLocationRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/tmp/app/data/?fileName=my-configmap-key-2&noop=true&idempotent=false") .log("resource file content is: ${body} consumed from ${header.CamelFileName}"); } }
import org.apache.camel.builder.RouteBuilder; public class ResourceConfigmapKeyLocationRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/tmp/app/data/?fileName=my-configmap-key-2&noop=true&idempotent=false") .log("resource file content is: ${body} consumed from ${header.CamelFileName}"); } }
통합을 실행하고
@path
구문에--resource
옵션을 사용하고 소스 콘텐츠(파일, ConfigMap 또는 Secret)를 마운트할 위치를 지정합니다.예를 들어 다음 명령은 ConfigMap 내에 포함된 소스(
my-configmap-key-2@
) 중 하나만 사용하고/tmp/app/data
디렉터리를 사용하여 마운트하도록 지정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --resource configmap:my-cm-multi/my-configmap-key-2@/tmp/app/data ResourceConfigmapKeyLocationRoute.java --dev
kamel run --resource configmap:my-cm-multi/my-configmap-key-2@/tmp/app/data ResourceConfigmapKeyLocationRoute.java --dev
통합 포드를 확인하여 하나의 파일(예:
my-configmap-key-2
)이 올바른 위치(예:/tmp/app/data
디렉터리)에 마운트되었는지 확인합니다. 예를 들어 다음 명령을 실행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc exec <pod-name> -- cat /tmp/app/data/my-configmap-key-2
oc exec <pod-name> -- cat /tmp/app/data/my-configmap-key-2
4.3. Camel 통합 구성 요소 구성
통합 코드에서 Camel 구성 요소를 프로그래밍 방식으로 구성하거나 런타임 시 명령줄에서 구성 속성을 사용하여 구성할 수 있습니다. 다음 구문을 사용하여 Camel 구성 요소를 구성할 수 있습니다.
camel.component.${scheme}.${property}=${value}
camel.component.${scheme}.${property}=${value}
예를 들어 단계별 이벤트 중심 아키텍처의 Camel seda
구성 요소의 대기열 크기를 변경하려면 명령줄에서 다음 속성을 구성할 수 있습니다.
camel.component.seda.queueSize=10
camel.component.seda.queueSize=10
사전 요구 사항
절차
kamel run
명령을 입력하고--property
옵션을 사용하여 Camel 구성 요소 구성을 지정합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --property camel.component.seda.queueSize=10 examples/Integration.java
kamel run --property camel.component.seda.queueSize=10 examples/Integration.java
4.4. Camel K 통합 종속 항목 구성
Camel K는 통합 코드를 실행하는 데 필요한 광범위한 종속성을 자동으로 해결합니다. 그러나 kamel run --dependency
옵션을 사용하여 런타임에 명령줄에 종속 항목을 명시적으로 추가할 수 있습니다.
다음 예제 통합에서는 Camel K 자동 종속성 확인을 사용합니다.
... from("imap://admin@myserver.com") .to("seda:output") ...
...
from("imap://admin@myserver.com")
.to("seda:output")
...
이 통합에는 imap:
접두사로 시작하는 끝점이 있으므로 Camel K는 필수 종속성 목록에 camel-mail
구성 요소를 자동으로 추가할 수 있습니다. seda:
엔드포인트는 모든 통합에 자동으로 추가되는 camel-core
에 속하므로 Camel K는 이 구성 요소에 대한 추가 종속 항목은 추가되지 않습니다.
Camel K 자동 종속성 확인은 런타임에 사용자에게 투명하게 제공됩니다. 이는 개발 루프를 종료하지 않고 필요한 모든 구성 요소를 빠르게 추가할 수 있기 때문에 개발 모드에서 매우 유용합니다.
kamel run --dependency
또는 -d
옵션을 사용하여 명시적으로 종속성을 추가할 수 있습니다. Camel 카탈로그에 포함되지 않은 종속성을 지정하려면 이 값을 사용해야 할 수 있습니다. 명령줄에서 여러 종속성을 지정할 수 있습니다.
사전 요구 사항
절차
kamel run
명령을 입력하고-d
옵션을 사용하여 종속성을 지정합니다. 예를 들면 다음과 같습니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run -d mvn:com.google.guava:guava:26.0-jre -d camel-mina2 Integration.java
kamel run -d mvn:com.google.guava:guava:26.0-jre -d camel-mina2 Integration.java
종속성 특성을 비활성화하여 자동 종속성 확인을 비활성화할 수 있습니다. -trait dependencies.enabled=false
. 그러나 대부분의 경우 권장되지 않습니다.
종속성 유형
kamel run
명령의 -d
플래그는 유연하며 여러 종류의 종속성을 지원합니다.
Camel 종속 항목은 다음과 같이 -d
플래그를 사용하여 직접 추가할 수 있습니다.
kamel run -d camel:http Integration.java
kamel run -d camel:http Integration.java
이 경우 올바른 버전으로 종속성이 추가됩니다. Camel 종속성을 지정하는 표준 표기법은 camel:xxx
이지만 kamel
은 사용성을 위해 camel-xxx
도 허용합니다.
-d
플래그, mvn
접두사 및 maven 좌표를 사용하여 외부 종속성 을 추가할 수 있습니다.
kamel run -d mvn:com.google.guava:guava:26.0-jre Integration.java
kamel run -d mvn:com.google.guava:guava:26.0-jre Integration.java
종속 항목이 프라이빗 리포지토리에 속하는 경우 이 리포지토리를 정의해야 합니다. Configure maven 를 참조하십시오.
-d
플래그와 file://
접두사를 사용하여 로컬 종속성 을 추가할 수 있습니다.
kamel run -d file://path/to/integration-dep.jar Integration.java
kamel run -d file://path/to/integration-dep.jar Integration.java
그런 다음 integration-dep.jar
의 내용은 사용할 수 있도록 통합에서 액세스할 수 있습니다.
실행 중인 컨테이너에 마운트할 데이터 파일을 지정할 수도 있습니다.
kamel run -d file://path/to/data.csv:path/in/container/data.csv Integration.java
kamel run -d file://path/to/data.csv:path/in/container/data.csv Integration.java
디렉터리를 지정하는 작업은 재귀적으로 수행됩니다.
이 기능은 정확하게 설정된 이미지 레지스트리에 의존합니다.
Jitpack 종속 항목
종속성이 maven
리포지토리에 게시되지 않은 경우 런타임 통합 환경에 사용자 지정 종속성을 제공하는 방법으로 Jitpack 을 찾을 수 있습니다. 경우에 따라 경로 정의뿐만 아니라 통합 동작을 정의하는 동안 사용해야 하는 일부 도우미 클래스 또는 기타 클래스를 포함하는 것이 유용할 수 있습니다. Jitpack 을 사용하면 원격 리포지토리에서 호스팅되는 java 프로젝트를 실행하면서 생성된 패키지를 통합 종속성으로 사용할 수 있습니다.
사용법은 maven 종속성에 대해 위에서 정의한 것과 동일합니다. -d
플래그를 사용하여 추가할 수 있지만, 이번에는 사용 중인 프로젝트 리포지토리(즉, github
)에 대해 예상대로 접두사를 정의해야 합니다. repository-kind:user/repo/version 형식으로 제공해야 합니다.
예를 들어 다음을 실행하여 Apache Commons CSV 종속성을 제공할 수 있습니다.
kamel run -d github:apache/commons-csv/1.1 Integration.java
kamel run -d github:apache/commons-csv/1.1 Integration.java
가장 중요한 공용 코드 리포지토리를 지원합니다.
github:user/repo/version gitlab:user/repo/version bitbucket:user/repo/version gitee:user/repo/version azure:user/repo/version
github:user/repo/version
gitlab:user/repo/version
bitbucket:user/repo/version
gitee:user/repo/version
azure:user/repo/version
기본
분기를 사용하려는 경우 버전을
생략할 수 있습니다. 그렇지 않으면 프로젝트 리포지터리에 사용된 분기 또는 태그를 나타냅니다.
동적 URI
Camel K가 모든 종속 항목을 항상 검색하는 것은 아닙니다. URI를 동적으로 생성할 때 Camel K에 -d
매개변수를 사용하여 로드할 구성 요소를 지시해야 합니다. 다음 코드 조각에서는 이를 보여줍니다.
DynamicURI.java
String myTopic = "purchases" from("kafka:" + myTopic + "? ... ") .to(...) ...
String myTopic = "purchases"
from("kafka:" + myTopic + "? ... ")
.to(...)
...
여기서 URI는 런타임 시 확인된 일부 변수에 의해 동적으로 생성됩니다. 이와 같은 경우 통합에 로드할 구성 요소와 관련된 종속성을 지정해야 합니다.In cases like this, you must specify the component and the related dependency to load into the
Integration.
5장. Kafka에 대한 Camel K 인증
Apache Kafka에 대해 Camel K를 인증할 수 있습니다.
이 예제에서는 Apache Kafka용 Red Hat OpenShift Streams를 사용하여 Kafka 주제를 설정하고 간단한 Producer/Consumer 패턴 통합에서 사용하는 방법을 설명합니다.
5.1. Kafka 설정
Kafka를 설정하려면 필요한 OpenShift Operator를 설치하고 Kafka 인스턴스를 생성하며 Kafka 주제를 생성해야 합니다.
다음 Red Hat 제품 중 하나를 사용하여 Kafka를 설정합니다.
- Red Hat AMQP(Advanced Message>-<) 스트림 - 자체 관리 Apache Kafka 오퍼링. AMQ Streams는 오픈 소스 Strimzi 를 기반으로 하며 Red Hat Integration 의 일부로 포함됩니다. AMQ Streams는 게시/서브스크립션 메시징 브로커를 포함하는 Apache Kafka를 기반으로 하는 분산 및 확장 가능한 스트리밍 플랫폼입니다. Kafka Connect는 Kafka 기반 시스템을 외부 시스템과 통합하는 프레임워크를 제공합니다. Kafka Connect를 사용하면 외부 시스템에서 Kafka 브로커로 데이터를 스트리밍하도록 소스 및 싱크 커넥터를 구성할 수 있습니다.
- Red Hat OpenShift Streams for Apache Kafka - Apache Kafka 실행 프로세스를 단순화하는 관리형 클라우드 서비스입니다. 새로운 클라우드 네이티브 애플리케이션을 구축, 배포, 확장하거나 기존 시스템을 현대화하기 위한 간소화된 개발자 환경을 제공합니다.
5.1.1. AMQ 스트림을 사용하여 Kafka 설정
AMQ Streams는 OpenShift 클러스터에서 Apache Kafka를 실행하는 프로세스를 간소화합니다.
5.1.1.1. AMQ Streams를 위한 OpenShift 클러스터 준비
Camel K 또는 Kamelets 및 Red Hat AMQ Streams를 사용하려면 다음 Operator 및 툴을 설치해야 합니다.
- Red Hat Integration - AMQ Streams operator - Apache Kafka 인스턴스용 Openshift Cluster와 AMQ Streams 간의 통신을 관리합니다.
- Red Hat Integration - Camel K operator - OpenShift에서 클라우드에서 기본적으로 실행되는 경량화된 통합 프레임워크인 Camel K를 설치 및 관리합니다.
- Camel K CLI 툴 - 모든 Camel K 기능에 액세스할 수 있습니다.
사전 요구 사항
- Apache Kafka 개념에 대해 잘 알고 있습니다.
- 올바른 액세스 수준, 프로젝트 생성 및 운영자 설치 기능, 로컬 시스템에 OpenShift 및 Camel K CLI 설치 기능을 사용하여 OpenShift 4.6 이상 클러스터에 액세스할 수 있습니다.
-
명령줄에서 OpenShift 클러스터와 상호 작용할 수 있도록
oc
)를 설치했습니다.
절차
AMQ Streams를 사용하여 Kafka를 설정하려면 다음을 수행합니다.
- OpenShift 클러스터의 웹 콘솔에 로그인합니다.
- 통합을 만들려는 프로젝트를 만들거나 엽니다(예: my-camel-k-kafka ).
- Camel K 설치에 설명된 대로 Camel K 및 Camel K CLI를 설치합니다. https://access.redhat.com/documentation/en-us/red_hat_integration/2023.q1/html-single/getting_started_with_camel_k#installing-camel-k
AMQ 스트림 Operator를 설치합니다.
- 모든 프로젝트에서 Operators > OperatorHub 를 선택합니다.
- 키워드로 필터링 필드에 AMQ Streams 를 입력합니다.
Red Hat Integration - AMQ Streams 카드를 클릭한 다음 설치를 클릭합니다.
Operator 설치 페이지가 열립니다.
- 기본값을 승인한 다음 설치를 클릭합니다.
- Operators > 설치된 Operator 를 선택하여 Camel K 및 AMQ Streams Operator가 설치되었는지 확인합니다.
5.1.1.2. AMQ Streams를 사용하여 Kafka 주제 설정
Kafka 주제에서는 Kafka 인스턴스의 데이터 스토리지에 대한 대상을 제공합니다. 데이터를 보내기 전에 Kafka 주제를 설정해야 합니다.
사전 요구 사항
- OpenShift 클러스터에 액세스할 수 있습니다.
- Red Hat Integration - Camel K 및 Red Hat Integration - AMQ Streams Operator를 OpenShift 클러스터 준비에 설명된 대로 설치했습니다.
-
OpenShift CLI(
oc
) 및 Camel K CLI(kamel
)를 설치했습니다.
절차
AMQ Streams를 사용하여 Kafka 주제를 설정하려면 다음을 수행합니다.
- OpenShift 클러스터의 웹 콘솔에 로그인합니다.
- 프로젝트를 선택한 다음 Red Hat Integration - AMQ Streams Operator를 설치한 프로젝트를 클릭합니다. 예를 들어 my-camel-k-kafka 프로젝트를 클릭합니다.
- Operators > 설치된 Operators 를 선택한 다음 Red Hat Integration - AMQ Streams 를 클릭합니다.
Kafka 클러스터를 생성합니다.
- Kafka 에서 인스턴스 생성을 클릭합니다.
- 클러스터 이름을 입력합니다(예: kafka-test ).
다른 기본값을 승인한 다음 만들기 를 클릭합니다.
Kafka 인스턴스를 생성하는 프로세스는 완료하는 데 몇 분이 걸릴 수 있습니다.
상태가 준비되면 다음 단계를 계속합니다.
Kafka 주제를 생성합니다.
- Operators > 설치된 Operators 를 선택한 다음 Red Hat Integration - AMQ Streams 를 클릭합니다.
- Kafka 주제 에서 Kafka 주제 만들기 를 클릭합니다.
- 주제의 이름을 입력합니다(예: test-topic ).
- 다른 기본값을 승인한 다음 만들기 를 클릭합니다.
5.1.2. OpenShift 스트림을 사용하여 Kafka 설정
Red Hat OpenShift Streams for Apache Kafka는 Apache Kafka 실행 프로세스를 단순화하는 관리형 클라우드 서비스입니다.
Apache Kafka용 OpenShift Streams를 사용하려면 Red Hat 계정에 로그인해야 합니다.
예를 들면 다음과 같습니다.
5.1.2.1. OpenShift Streams용 OpenShift 클러스터 준비
Apache Kafka 관리 클라우드 서비스용 Red Hat OpenShift Streams를 사용하려면 다음 Operator 및 툴을 설치해야 합니다.
- RHOAS(OpenShift Application Services) CLI - 터미널에서 애플리케이션 서비스를 관리할 수 있습니다.
- Red Hat Integration - Camel K operator Installs and manages Camel K - OpenShift에서 기본적으로 실행되는 경량 통합 프레임워크.
- Camel K CLI 툴 - 모든 Camel K 기능에 액세스할 수 있습니다.
사전 요구 사항
- Apache Kafka 개념에 대해 잘 알고 있습니다.
- 올바른 액세스 수준, 프로젝트 생성 및 운영자 설치 기능, 로컬 시스템에 OpenShift 및 Apache Camel K CLI 설치 기능을 사용하여 OpenShift 4.6 이상 클러스터에 액세스할 수 있습니다.
-
명령줄에서 OpenShift 클러스터와 상호 작용할 수 있도록
oc
)를 설치했습니다.
절차
- 클러스터 관리자 계정으로 OpenShift 웹 콘솔에 로그인합니다.
Camel K 또는 Kamelets 애플리케이션에 대한 OpenShift 프로젝트를 생성합니다.
- 홈 > 프로젝트를 선택합니다.
- 프로젝트 만들기를 클릭합니다.
-
프로젝트 이름(예:
my-camel-k-kafka
)을 입력한 다음 생성을 클릭합니다.
- rhoas CLI 시작하기에 설명된 대로 RHOAS CLI를 다운로드하여 설치합니다.
- Camel K 설치에 설명된 대로 Camel K 및 Camel K CLI를 설치합니다. https://access.redhat.com/documentation/en-us/red_hat_integration/2023.q1/html-single/getting_started_with_camel_k#installing-camel-k
- Red Hat Integration - Camel K operator가 설치되었는지 확인하려면 Operator > 설치된 Operator 를 클릭합니다.
다음 단계
5.1.2.2. RHOAS를 사용하여 Kafka 주제 설정
Kafka는 주제 와 관련된 메시지를 구성합니다. 각 항목에는 이름이 있습니다. 애플리케이션은 항목에 메시지를 보내고 주제에서 메시지를 검색합니다. Kafka 주제에서는 Kafka 인스턴스의 데이터 스토리지에 대한 대상을 제공합니다. 데이터를 보내기 전에 Kafka 주제를 설정해야 합니다.
사전 요구 사항
- 올바른 액세스 수준, 프로젝트를 생성하고 운영자를 설치하는 기능, 로컬 시스템에 OpenShift 및 Camel K CLI를 설치하는 기능을 사용하여 OpenShift 클러스터에 액세스할 수 있습니다.
-
OpenShift 클러스터 준비에 설명된 대로 OpenShift CLI(
oc
) , Camel K CLI(kamel
) 및 RHOAS CLI(rhoas
) 툴을 설치했습니다. - OpenShift 클러스터 준비에 설명된 대로 Red Hat Integration - Camel K operator를 설치하셨습니다.
- Red Hat 클라우드 사이트에 로그인되어 있습니다.
절차
Apache Kafka용 Red Hat OpenShift Streams를 사용하여 Kafka 주제를 설정하려면 다음을 수행합니다.
- 명령줄에서 OpenShift 클러스터에 로그인합니다.
프로젝트를 엽니다. 예를 들면 다음과 같습니다.
oc 프로젝트 my-camel-k-kafka
Camel K Operator가 프로젝트에 설치되어 있는지 확인합니다.
oc get csv
결과는 Red Hat Camel K operator를 나열하고
성공
단계에 있음을 나타냅니다.Kafka 인스턴스를 준비하고 RHOAS에 연결합니다.
다음 명령을 사용하여 RHOAS CLI에 로그인합니다.
rhoas login
kafka-test 와 같이 kafka 인스턴스를 생성합니다.
rhoas kafka create kafka-test
Kafka 인스턴스를 생성하는 프로세스는 완료하는 데 몇 분이 걸릴 수 있습니다.
Kafka 인스턴스의 상태를 확인하려면 다음을 수행합니다.
rhoas 상태
웹 콘솔에서 상태를 볼 수도 있습니다.
https://cloud.redhat.com/application-services/streams/kafkas/
상태가 준비 되면 다음 단계를 계속합니다.
새 Kafka 주제를 생성합니다.
rhoas kafka topic create --name test-topic
Kafka 인스턴스(클러스터)를 Openshift Application Services 인스턴스와 연결합니다.
rhoas 클러스터 연결
인증 정보 토큰을 가져오려면 스크립트 지침을 따르십시오.
출력은 다음과 유사합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Token Secret "rh-cloud-services-accesstoken-cli" created successfully Service Account Secret "rh-cloud-services-service-account" created successfully KafkaConnection resource "kafka-test" has been created KafkaConnection successfully installed on your cluster.
Token Secret "rh-cloud-services-accesstoken-cli" created successfully Service Account Secret "rh-cloud-services-service-account" created successfully KafkaConnection resource "kafka-test" has been created KafkaConnection successfully installed on your cluster.
다음 단계
5.1.2.3. Kafka 인증 정보 가져오기
애플리케이션 또는 서비스를 Kafka 인스턴스에 연결하려면 먼저 다음 Kafka 인증 정보를 가져와야 합니다.
- 부트스트랩 URL을 가져옵니다.
- 자격 증명을 사용하여 서비스 계정을 만듭니다(사용자 이름 및 암호).
OpenShift Streams의 경우 인증 프로토콜은 SASL_SSL입니다.
사전 요구 사항
- Kafka 인스턴스를 생성했으며 상태가 준비되었습니다.
- Kafka 주제를 생성했습니다.
절차
Kafka 브로커 URL (Bootstrap URL)을 가져옵니다.
rhoas 상태
이 명령은 다음과 유사한 출력을 반환합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Kafka --------------------------------------------------------------- ID: 1ptdfZRHmLKwqW6A3YKM2MawgDh Name: my-kafka Status: ready Bootstrap URL: my-kafka--ptdfzrhmlkwqw-a-ykm-mawgdh.kafka.devshift.org:443
Kafka --------------------------------------------------------------- ID: 1ptdfZRHmLKwqW6A3YKM2MawgDh Name: my-kafka Status: ready Bootstrap URL: my-kafka--ptdfzrhmlkwqw-a-ykm-mawgdh.kafka.devshift.org:443
사용자 이름과 암호를 가져오려면 다음 구문을 사용하여 서비스 계정을 생성합니다.
rhoas service-account create --name "<account-name>" --file-format json
참고서비스 계정을 생성할 때 자격 증명을 저장할 파일 형식 및 위치를 선택할 수 있습니다. 자세한 내용은
rhoas service-account create --help
를 입력합니다.예를 들면 다음과 같습니다.
rhoas service-account create --name "my-service-acct" --file-format json
서비스 계정이 생성되어 JSON 파일에 저장됩니다.
서비스 계정 인증 정보를 확인하려면
credentials.json
파일을 확인합니다.cat credentials.json
이 명령은 다음과 유사한 출력을 반환합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow {"clientID":"srvc-acct-eb575691-b94a-41f1-ab97-50ade0cd1094", "password":"facf3df1-3c8d-4253-aa87-8c95ca5e1225"}
{"clientID":"srvc-acct-eb575691-b94a-41f1-ab97-50ade0cd1094", "password":"facf3df1-3c8d-4253-aa87-8c95ca5e1225"}
Kakfa 주제로 또는에게 메시지를 보내거나 받을 수 있는 권한을 부여합니다. 다음 명령을 사용합니다. 여기서
clientID
는credentials.json
파일에 제공된 값입니다(단계 3).Copy to Clipboard Copied! Toggle word wrap Toggle overflow rhoas kafka acl grant-access --producer --consumer --service-account $CLIENT_ID --topic test-topic --group all
rhoas kafka acl grant-access --producer --consumer --service-account $CLIENT_ID --topic test-topic --group all
예를 들면 다음과 같습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rhoas kafka acl grant-access --producer --consumer --service-account srvc-acct-eb575691-b94a-41f1-ab97-50ade0cd1094 --topic test-topic --group all
rhoas kafka acl grant-access --producer --consumer --service-account srvc-acct-eb575691-b94a-41f1-ab97-50ade0cd1094 --topic test-topic --group all
5.1.2.4. SASL/Plain 인증 방법을 사용하여 시크릿 생성
가져온 인증 정보(Kafka 부트스트랩 URL, 서비스 계정 ID 및 서비스 계정 시크릿)를 사용하여 보안을 생성할 수 있습니다.
절차
application.properties
파일을 편집하고 Kafka 자격 증명을 추가합니다.application.properties 파일
Copy to Clipboard Copied! Toggle word wrap Toggle overflow camel.component.kafka.brokers = <YOUR-KAFKA-BOOTSTRAP-URL-HERE> camel.component.kafka.security-protocol = SASL_SSL camel.component.kafka.sasl-mechanism = PLAIN camel.component.kafka.sasl-jaas-config=org.apache.kafka.common.security.plain.PlainLoginModule required username='<YOUR-SERVICE-ACCOUNT-ID-HERE>' password='<YOUR-SERVICE-ACCOUNT-SECRET-HERE>'; consumer.topic=<TOPIC-NAME> producer.topic=<TOPIC-NAME>
camel.component.kafka.brokers = <YOUR-KAFKA-BOOTSTRAP-URL-HERE> camel.component.kafka.security-protocol = SASL_SSL camel.component.kafka.sasl-mechanism = PLAIN camel.component.kafka.sasl-jaas-config=org.apache.kafka.common.security.plain.PlainLoginModule required username='<YOUR-SERVICE-ACCOUNT-ID-HERE>' password='<YOUR-SERVICE-ACCOUNT-SECRET-HERE>'; consumer.topic=<TOPIC-NAME> producer.topic=<TOPIC-NAME>
다음 명령을 실행하여
application.properties
파일에 중요한 속성이 포함된 시크릿을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create secret generic kafka-props --from-file application.properties
oc create secret generic kafka-props --from-file application.properties
Camel K 통합을 실행할 때 이 시크릿을 사용합니다.
예를 들면 다음과 같습니다.
5.1.2.5. SASL/OAUTHBearer 인증 방법을 사용하여 시크릿 생성
가져온 인증 정보(Kafka 부트스트랩 URL, 서비스 계정 ID 및 서비스 계정 시크릿)를 사용하여 보안을 생성할 수 있습니다.
절차
application-oauth.properties
파일을 편집하고 Kafka 자격 증명을 추가합니다.application-oauth.properties 파일
Copy to Clipboard Copied! Toggle word wrap Toggle overflow camel.component.kafka.brokers = <YOUR-KAFKA-BOOTSTRAP-URL-HERE> camel.component.kafka.security-protocol = SASL_SSL camel.component.kafka.sasl-mechanism = OAUTHBEARER camel.component.kafka.sasl-jaas-config = org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \ oauth.client.id='<YOUR-SERVICE-ACCOUNT-ID-HERE>' \ oauth.client.secret='<YOUR-SERVICE-ACCOUNT-SECRET-HERE>' \ oauth.token.endpoint.uri="https://identity.api.openshift.com/auth/realms/rhoas/protocol/openid-connect/token" ; camel.component.kafka.additional-properties[sasl.login.callback.handler.class]=io.strimzi.kafka.oauth.client.JaasClientOauthLoginCallbackHandler consumer.topic=<TOPIC-NAME> producer.topic=<TOPIC-NAME>
camel.component.kafka.brokers = <YOUR-KAFKA-BOOTSTRAP-URL-HERE> camel.component.kafka.security-protocol = SASL_SSL camel.component.kafka.sasl-mechanism = OAUTHBEARER camel.component.kafka.sasl-jaas-config = org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \ oauth.client.id='<YOUR-SERVICE-ACCOUNT-ID-HERE>' \ oauth.client.secret='<YOUR-SERVICE-ACCOUNT-SECRET-HERE>' \ oauth.token.endpoint.uri="https://identity.api.openshift.com/auth/realms/rhoas/protocol/openid-connect/token" ; camel.component.kafka.additional-properties[sasl.login.callback.handler.class]=io.strimzi.kafka.oauth.client.JaasClientOauthLoginCallbackHandler consumer.topic=<TOPIC-NAME> producer.topic=<TOPIC-NAME>
다음 명령을 실행하여
application.properties
파일에 중요한 속성이 포함된 시크릿을 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc create secret generic kafka-props --from-file application-oauth.properties
oc create secret generic kafka-props --from-file application-oauth.properties
Camel K 통합을 실행할 때 이 시크릿을 사용합니다.
예를 들면 다음과 같습니다.
5.2. Kafka 통합 실행
생산자 통합 실행
샘플 생산자 통합을 생성합니다. 이렇게 하면 10초마다 메시지로 주제가 채워집니다.
Sample SaslSSLKafkaProducer.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow // kamel run --secret kafka-props SaslSSLKafkaProducer.java --dev // camel-k: language=java dependency=mvn:org.apache.camel.quarkus:camel-quarkus-kafka dependency=mvn:io.strimzi:kafka-oauth-client:0.7.1.redhat-00003 import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.kafka.KafkaConstants; public class SaslSSLKafkaProducer extends RouteBuilder { @Override public void configure() throws Exception { log.info("About to start route: Timer -> Kafka "); from("timer:foo") .routeId("FromTimer2Kafka") .setBody() .simple("Message #${exchangeProperty.CamelTimerCounter}") .to("kafka:{{producer.topic}}") .log("Message correctly sent to the topic!"); } }
// kamel run --secret kafka-props SaslSSLKafkaProducer.java --dev // camel-k: language=java dependency=mvn:org.apache.camel.quarkus:camel-quarkus-kafka dependency=mvn:io.strimzi:kafka-oauth-client:0.7.1.redhat-00003 import org.apache.camel.builder.RouteBuilder; import org.apache.camel.component.kafka.KafkaConstants; public class SaslSSLKafkaProducer extends RouteBuilder { @Override public void configure() throws Exception { log.info("About to start route: Timer -> Kafka "); from("timer:foo") .routeId("FromTimer2Kafka") .setBody() .simple("Message #${exchangeProperty.CamelTimerCounter}") .to("kafka:{{producer.topic}}") .log("Message correctly sent to the topic!"); } }
그런 다음 통합 절차를 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --secret kafka-props SaslSSLKafkaProducer.java --dev
kamel run --secret kafka-props SaslSSLKafkaProducer.java --dev
생산자는 새 메시지를 생성하고 항목에 푸시하고 일부 정보를 기록합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow [2] 2021-05-06 08:48:11,854 INFO [FromTimer2Kafka] (Camel (camel-1) thread #1 - KafkaProducer[test]) Message correctly sent to the topic! [2] 2021-05-06 08:48:11,854 INFO [FromTimer2Kafka] (Camel (camel-1) thread #3 - KafkaProducer[test]) Message correctly sent to the topic! [2] 2021-05-06 08:48:11,973 INFO [FromTimer2Kafka] (Camel (camel-1) thread #5 - KafkaProducer[test]) Message correctly sent to the topic! [2] 2021-05-06 08:48:12,970 INFO [FromTimer2Kafka] (Camel (camel-1) thread #7 - KafkaProducer[test]) Message correctly sent to the topic! [2] 2021-05-06 08:48:13,970 INFO [FromTimer2Kafka] (Camel (camel-1) thread #9 - KafkaProducer[test]) Message correctly sent to the topic!
[2] 2021-05-06 08:48:11,854 INFO [FromTimer2Kafka] (Camel (camel-1) thread #1 - KafkaProducer[test]) Message correctly sent to the topic! [2] 2021-05-06 08:48:11,854 INFO [FromTimer2Kafka] (Camel (camel-1) thread #3 - KafkaProducer[test]) Message correctly sent to the topic! [2] 2021-05-06 08:48:11,973 INFO [FromTimer2Kafka] (Camel (camel-1) thread #5 - KafkaProducer[test]) Message correctly sent to the topic! [2] 2021-05-06 08:48:12,970 INFO [FromTimer2Kafka] (Camel (camel-1) thread #7 - KafkaProducer[test]) Message correctly sent to the topic! [2] 2021-05-06 08:48:13,970 INFO [FromTimer2Kafka] (Camel (camel-1) thread #9 - KafkaProducer[test]) Message correctly sent to the topic!
소비자 통합 실행
소비자 통합을 생성합니다.
Sample SaslSSLKafkaProducer.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow // kamel run --secret kafka-props SaslSSLKafkaConsumer.java --dev // camel-k: language=java dependency=mvn:org.apache.camel.quarkus:camel-quarkus-kafka dependency=mvn:io.strimzi:kafka-oauth-client:0.7.1.redhat-00003 import org.apache.camel.builder.RouteBuilder; public class SaslSSLKafkaConsumer extends RouteBuilder { @Override public void configure() throws Exception { log.info("About to start route: Kafka -> Log "); from("kafka:{{consumer.topic}}") .routeId("FromKafka2Log") .log("${body}"); } }
// kamel run --secret kafka-props SaslSSLKafkaConsumer.java --dev // camel-k: language=java dependency=mvn:org.apache.camel.quarkus:camel-quarkus-kafka dependency=mvn:io.strimzi:kafka-oauth-client:0.7.1.redhat-00003 import org.apache.camel.builder.RouteBuilder; public class SaslSSLKafkaConsumer extends RouteBuilder { @Override public void configure() throws Exception { log.info("About to start route: Kafka -> Log "); from("kafka:{{consumer.topic}}") .routeId("FromKafka2Log") .log("${body}"); } }
다른 쉘을 열고 다음 명령을 사용하여 소비자 통합을 실행합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --secret kafka-props SaslSSLKafkaConsumer.java --dev
kamel run --secret kafka-props SaslSSLKafkaConsumer.java --dev
소비자는 주제에 있는 이벤트 로깅을 시작합니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow [1] 2021-05-06 08:51:08,991 INFO [FromKafka2Log] (Camel (camel-1) thread #0 - KafkaConsumer[test]) Message #8 [1] 2021-05-06 08:51:10,065 INFO [FromKafka2Log] (Camel (camel-1) thread #0 - KafkaConsumer[test]) Message #9 [1] 2021-05-06 08:51:10,991 INFO [FromKafka2Log] (Camel (camel-1) thread #0 - KafkaConsumer[test]) Message #10 [1] 2021-05-06 08:51:11,991 INFO [FromKafka2Log] (Camel (camel-1) thread #0 - KafkaConsumer[test]) Message #11
[1] 2021-05-06 08:51:08,991 INFO [FromKafka2Log] (Camel (camel-1) thread #0 - KafkaConsumer[test]) Message #8 [1] 2021-05-06 08:51:10,065 INFO [FromKafka2Log] (Camel (camel-1) thread #0 - KafkaConsumer[test]) Message #9 [1] 2021-05-06 08:51:10,991 INFO [FromKafka2Log] (Camel (camel-1) thread #0 - KafkaConsumer[test]) Message #10 [1] 2021-05-06 08:51:11,991 INFO [FromKafka2Log] (Camel (camel-1) thread #0 - KafkaConsumer[test]) Message #11
6장. Camel K 특성 구성 참조
이 장에서는 특성을 사용하여 런타임 시 명령줄에서 구성할 수 있는 고급 기능 및 핵심 기능에 대한 참조 정보를 제공합니다. Camel K는 특정 기능 및 기술을 구성하기 위한 기능 특성을 제공합니다. Camel K는 내부 Camel K 핵심 기능을 구성하기 위한 플랫폼 특성을 제공합니다.
Red Hat Integration - Camel K 1.6에는 OpenShift
및 Knative
프로필이 포함되어 있습니다. Kubernetes
프로필에는 커뮤니티 전용 지원이 있습니다. 또한 통합을 위한 Java 및 YAML DSL 지원이 포함되어 있습니다. XML, Groovy, JavaScript와 같은 다른 언어에서는 커뮤니티 전용 지원이 있습니다.
이 장에는 다음 섹션이 포함되어 있습니다.
Camel K 기능 특성
Camel K 코어 플랫폼 특성
- 6.3.1절. “빌더 Trait”
- 6.3.3절. “Camel Trait”
- 6.3.2절. “컨테이너 특성”
- 6.3.4절. “종속 항목 Trait”
- 6.3.5절. “배포자 Trait”
- 6.3.6절. “배포 평가”
- 6.3.7절. “환경 Trait”
- 6.3.8절. “Error Handler Trait”
- 6.3.9절. “JVM 트레이블”
- 6.3.10절. “Kamelets Trait”
- 6.3.11절. “OpenAPI Trait”- 기술 프리뷰
- 6.3.12절. “소유자 Trait”
- 6.3.13절. “플랫폼 트레이블”
- 6.3.14절. “Quarkus Trait”
6.1. Camel K 특성 및 프로필 구성
이 섹션에서는 런타임 시 고급 Camel K 기능을 구성하는 데 사용되는 특성 및 프로필 의 중요한 Camel K 개념에 대해 설명합니다.
Camel K 특성
Camel K 특성은 Camel K 통합을 사용자 지정하기 위해 명령줄에서 구성할 수 있는 고급 기능 및 핵심 기능입니다. 예를 들어 여기에는 3scale API Management, Quarkus, Knative 및 Prometheus와 같은 기술과의 상호 작용을 구성하는 기능 속성이 포함됩니다. Camel K는 Camel 지원, 컨테이너, 종속성 확인 및 JVM 지원과 같은 중요한 핵심 플랫폼 기능을 구성하는 내부 플랫폼 특성 도 제공합니다.
Camel K 프로필
Camel K 프로필은 Camel K 통합을 실행하는 대상 클라우드 플랫폼을 정의합니다. 지원되는 프로필은 OpenShift
및 Knative
프로필입니다.
OpenShift에서 통합을 실행하면 OpenShift Serverless가 클러스터에 설치되어 있는 경우 Camel K는 Knative
프로필을 사용합니다. Camel K는 OpenShift
Serverless가 설치되지 않은 경우 OpenShift 프로필을 사용합니다.
kamel run --profile
옵션을 사용하여 런타임에 프로필을 지정할 수도 있습니다.
Camel K는 통합이 실행되는 대상 프로필을 고려하여 모든 특성에 유용한 기본값을 제공합니다. 그러나 고급 사용자는 사용자 지정 동작을 위해 Camel K 특성을 구성할 수 있습니다. 일부 특성은 OpenShift
또는 Knative
와 같은 특정 프로필에만 적용됩니다. 자세한 내용은 각 특성 설명에서 사용 가능한 프로필을 참조하십시오.
Camel K 특성 구성
각 Camel 특성에는 명령줄에서 특성을 구성하는 데 사용할 수 있는 고유 ID가 있습니다. 예를 들어 다음 명령은 통합을 위해 OpenShift 서비스 생성을 비활성화합니다.
kamel run --trait service.enabled=false my-integration.yaml
kamel run --trait service.enabled=false my-integration.yaml
-t
옵션을 사용하여 특성을 지정할 수도 있습니다.
Camel K 특성 속성
enabled
속성을 사용하여 각 특성을 활성화하거나 비활성화할 수 있습니다. 모든 특성에는 사용자가 명시적으로 활성화하지 않을 때 활성화해야 하는지 확인하는 자체 내부 논리가 있습니다.
플랫폼 특성을 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
일부 특성에는 환경에 따라 특성의 자동 구성을 활성화하거나 비활성화하는 데 사용할 수 있는 auto
속성이 있습니다. 예를 들어 여기에는 3scale, Cron, Knative와 같은 특성이 포함됩니다. 이 자동 구성은 enabled
속성이 명시적으로 설정되지 않은 경우 특성을 활성화하거나 비활성화할 수 있으며 특성 구성을 변경할 수 있습니다.
대부분의 특성에는 명령줄에서 구성할 수 있는 추가 속성이 있습니다. 자세한 내용은 다음 섹션의 각 특성에 대한 설명을 참조하십시오.
6.2. Camel K 기능 특성
6.2.1. Knative Trait
Knative 특성은 Knative 리소스의 주소를 자동으로 검색하여 실행 중인 통합에 삽입합니다.
전체 Knative 구성이 JSON 형식으로 CAMEL_KNATIVE_CONFIGURATION에 삽입됩니다. 그런 다음 Camel Knative 구성 요소는 전체 구성을 사용하여 경로를 구성합니다.
Knative 프로필이 활성화되면 해당 특성이 기본적으로 활성화됩니다.
이 특성은 다음 프로필에서 사용할 수 있습니다: Knative.
6.2.1.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait knative.[key]=[value] --trait knative.[key2]=[value2] integration.java
$ kamel run --trait knative.[key]=[value] --trait knative.[key2]=[value2] integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
| 를 사용하여 JSON 형식으로 Knative 전체 구성을 삽입할 수 있습니다. |
|
| 통합 경로 소스로 사용되는 채널 목록입니다. 간단한 채널 이름 또는 전체 Camel URI를 포함할 수 있습니다. |
|
| 통합 경로 대상으로 사용되는 채널 목록입니다. 간단한 채널 이름 또는 전체 Camel URI를 포함할 수 있습니다. |
|
| 통합 경로 소스로 사용되는 채널 목록입니다. |
|
| 통합 경로 대상으로 사용되는 끝점 목록입니다. 간단한 끝점 이름 또는 전체 Camel URI를 포함할 수 있습니다. |
|
| 통합을 서브스크립션할 이벤트 유형 목록입니다. "기본"과 다른 특정 브로커를 사용하려면 간단한 이벤트 유형 또는 전체 Camel URI를 포함할 수 있습니다. |
|
| 통합을 생성할 이벤트 유형 목록입니다. 특정 브로커를 사용하기 위해 간단한 이벤트 유형 또는 전체 Camel URI를 포함할 수 있습니다. |
|
| 헤더 "ce-knativehistory"에 따라 이벤트를 필터링할 수 있습니다. 이 헤더는 최신 버전의 Knative에서 제거되었으므로 필터링은 기본적으로 비활성화되어 있습니다. |
|
| Knative SinkBinding 리소스를 통해 싱크에 통합을 바인딩할 수 있습니다. 이는 통합에서 단일 싱크를 대상으로 할 때 사용할 수 있습니다. 통합에서 단일 싱크를 대상으로 할 때 기본적으로 활성화됩니다( Knative 소스에서 통합을 소유한 경우 제외). |
|
| 모든 특성 속성에 대한 자동 검색을 활성화합니다. |
6.2.2. Knative 서비스 Trait
Knative 서비스 특성을 사용하면 표준 Kubernetes 배포 대신 Knative 서비스로 통합을 실행할 때 옵션을 구성할 수 있습니다.
Knative 서비스로 통합을 실행하면 자동 확장(및 스케일 0) 기능이 추가되지만 이러한 기능은 경로에서 HTTP 끝점 소비자를 사용하는 경우에만 의미가 있습니다.
이 특성은 다음 프로필에서 사용할 수 있습니다: Knative.
6.2.2.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait knative-service.[key]=[value] --trait knative-service.[key2]=[value2] Integration.java
$ kamel run --trait knative-service.[key]=[value] --trait knative-service.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
|
Knative 자동 스케일링 클래스 속성(예: 자세한 내용은 Knative 설명서를 참조하십시오. |
|
|
Knative 자동 스케일링 메트릭 속성(예: 자세한 내용은 Knative 설명서를 참조하십시오. |
|
| 각 Pod에 대해 허용되는 동시성 수준 또는 CPU 백분율(자동 스케일링 지표에 따라)을 설정합니다. 자세한 내용은 Knative 설명서를 참조하십시오. |
|
| 통합을 위해 언제든지 실행해야 하는 최소 Pod 수입니다. 기본적으로 0입니다. 즉, 구성된 시간 동안 사용하지 않으면 통합이 0으로 축소됩니다. 자세한 내용은 Knative 설명서를 참조하십시오. |
|
| 통합을 위해 병렬로 실행할 수 있는 Pod 수에 대한 상한입니다. Knative에는 설치에 따라 달라지는 자체 cap 값이 있습니다. 자세한 내용은 Knative 설명서를 참조하십시오. |
|
| 모든 조건이 충족되면 Knative 서비스로 통합을 자동으로 배포합니다.
|
6.2.3. Prometheus Trait
Prometheus 특성은 Prometheus 호환 끝점을 구성합니다. 또한 Prometheus Operator를 사용하는 경우 끝점을 자동으로 스크랩할 수 있도록 PodMonitor
리소스를 생성합니다.
지표는 MicroProfile 메트릭을 사용하여 노출됩니다.
PodMonitor
리소스를 생성하려면 Prometheus Operator 사용자 정의 리소스 정의가 설치되어 있어야 합니다. Prometheus Operator 없이 Prometheus 특성이 작동하려면 pod-monitor
를 false
로 설정할 수 있습니다.
Prometheus 특성은 기본적으로 비활성화되어 있습니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
6.2.3.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait prometheus.[key]=[value] --trait prometheus.[key2]=[value2] Integration.java
$ kamel run --trait prometheus.[key]=[value] --trait prometheus.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
|
|
|
|
|
6.2.4. PDB Trait
PDB 특성을 사용하면 통합 Pod에 대해 PodDisruptionBudget 리소스를 구성할 수 있습니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
6.2.4.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait pdb.[key]=[value] --trait pdb.[key2]=[value2] Integration.java
$ kamel run --trait pdb.[key]=[value] --trait pdb.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
|
제거 후에도 사용할 수 있어야 하는 Integration의 pod 수입니다. 절대 숫자 또는 백분율일 수 있습니다. |
|
|
제거 후 사용할 수 없는 통합의 Pod 수입니다. 절대 번호 또는 백분율( |
6.2.5. pull Secret Trait
Pull Secret 특성은 Kubernetes가 외부 레지스트리에서 컨테이너 이미지를 검색할 수 있도록 Pod에서 가져오기 보안을 설정합니다.
가져오기 시크릿은 수동으로 지정하거나 IntegrationPlatform
의 외부 컨테이너 레지스트리에 대한 인증을 구성한 경우 이미지를 가져오는 데 동일한 시크릿을 사용합니다.
외부 컨테이너 레지스트리에 대한 인증을 구성할 때마다 기본적으로 활성화되어 있으므로 외부 레지스트리가 프라이빗이라고 가정합니다.
레지스트리에 이미지 가져오기에 대한 인증이 필요하지 않은 경우 이 특성을 비활성화할 수 있습니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
6.2.5.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait pull-secret.[key]=[value] --trait pull-secret.[key2]=[value2] Integration.java
$ kamel run --trait pull-secret.[key]=[value] --trait pull-secret.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
|
Pod에 설정할 풀 시크릿 이름입니다. 비워 두면 |
|
|
공유 플랫폼과 함께 글로벌 Operator를 사용하는 경우 Operator 네임스페이스에서 |
|
|
|
6.2.6. 경로 등급
Route 특성을 사용하여 통합을 위해 OpenShift 경로 생성을 구성할 수 있습니다.
인증서 및 키 내용은 로컬 파일 시스템 또는 Openshift 시크릿
오브젝트에서 소싱할 수 있습니다. 사용자는 시크릿에 저장된 인증서를 참조하기 위해 -
(예: secret
tls-certificate-secret
)으로 끝나는 매개변수를 사용할 수 있습니다. 시크릿으로 끝나는 매개변수는 우선 순위가 높으며 동일한 경로 매개변수가 설정된 경우(예: tls-key
및 -secret
tls-key
), tls-key-secret
이 사용됩니다. 키 및 인증서를 설정하는 권장 방법은 시크릿
을 사용하여 콘텐츠를 저장하고 다음 매개변수를 사용하여 해당 콘텐츠를 참조하는 것입니다.
,tls-key-secret
tls-ca-certificate-secret
,tls-destination-ca-certificate-secret
은 이 페이지 끝에 있는 예제 섹션을 참조하여 설정 옵션을 확인하는 것입니다.
이 특성은 다음 프로필인 OpenShift 에서 사용할 수 있습니다.
6.2.6.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait route.[key]=[value] --trait route.[key2]=[value2] integration.java
$ kamel run --trait route.[key]=[value] --trait route.[key2]=[value2] integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
| 경로에서 노출되는 호스트를 구성하려면 다음을 수행합니다. |
|
|
자세한 내용은 OpenShift 경로 설명서를 참조하십시오. |
|
| TLS 인증서 콘텐츠입니다. 자세한 내용은 OpenShift 경로 설명서를 참조하십시오. |
|
| TLS 인증서에 대한 보안 이름 및 키 참조입니다. 형식은 "secret-name[/key-name]"이며, 시크릿에 키가 하나만 있는 경우 값은 시크릿 이름을 나타냅니다. 그렇지 않으면 "/"로 구분된 키 이름을 설정할 수 있습니다. 자세한 내용은 OpenShift 경로 설명서를 참조하십시오. |
|
| TLS 인증서 키 콘텐츠입니다. 자세한 내용은 OpenShift 경로 설명서를 참조하십시오. |
|
| TLS 인증서 키에 대한 보안 이름 및 키 참조입니다. 형식은 "secret-name[/key-name]"이며, 시크릿에 키가 하나만 있는 경우 값은 시크릿 이름을 나타냅니다. 그렇지 않으면 "/"로 구분된 키 이름을 설정할 수 있습니다. 자세한 내용은 OpenShift 경로 설명서를 참조하십시오. |
|
| TLS CA 인증서 콘텐츠입니다. 자세한 내용은 OpenShift 경로 설명서를 참조하십시오. |
|
| TLS CA 인증서에 대한 시크릿 이름 및 키 참조입니다. 형식은 "secret-name[/key-name]"이며, 시크릿에 키가 하나만 있는 경우 값은 시크릿 이름을 나타냅니다. 그렇지 않으면 "/"로 구분된 키 이름을 설정할 수 있습니다. 자세한 내용은 OpenShift 경로 설명서를 참조하십시오. |
|
| 대상 CA 인증서는 최종 대상의 ca 인증서 내용을 제공합니다. 재암호화 종료를 사용하는 경우 이 파일을 제공하여 라우터에서 보안 연결의 상태 점검에 사용해야 합니다. 이 필드를 지정하지 않으면 라우터에서 자체 대상 CA를 제공하고 단기 서비스 이름(service.namespace.svc)을 사용하여 호스트 이름(service.namespace.svc)을 사용하여 인프라 생성 인증서를 자동으로 확인할 수 있습니다. 자세한 내용은 OpenShift 경로 설명서를 참조하십시오. |
|
| 대상 CA 인증서에 대한 보안 이름 및 키 참조입니다. 형식은 "secret-name[/key-name]"이며, 시크릿에 키가 하나만 있는 경우 값은 시크릿 이름을 나타냅니다. 그렇지 않으면 "/"로 구분된 키 이름을 설정할 수 있습니다. 자세한 내용은 OpenShift 경로 설명서를 참조하십시오. |
|
|
비보안 트래픽을 처리하는 방법을 구성하려면 트래픽 자세한 내용은 OpenShift 경로 설명서를 참조하십시오. |
6.2.6.2. 예
이 예제에서는 시크릿 을 사용하여 통합에 참조할 인증서와 키를 저장합니다. 경로에 대한 자세한 내용은 Openshift 경로 문서를 참조하십시오. PlatformHttpServer.java 는 통합 예제입니다.
이러한 예제를 실행하려면 키와 인증서가 있는 보안이 있어야 합니다.
6.2.6.2.1. 자체 서명된 인증서를 생성하고 보안을 생성합니다.
openssl genrsa -out tls.key openssl req -new -key tls.key -out csr.csr -subj "/CN=my-server.com" openssl x509 -req -in csr.csr -signkey tls.key -out tls.crt oc create secret tls my-combined-certs --key=tls.key --cert=tls.crt
openssl genrsa -out tls.key
openssl req -new -key tls.key -out csr.csr -subj "/CN=my-server.com"
openssl x509 -req -in csr.csr -signkey tls.key -out tls.crt
oc create secret tls my-combined-certs --key=tls.key --cert=tls.crt
6.2.6.2.2. 경로에 HTTP 요청 만들기
모든 예제에 대해 다음 curl 명령을 사용하여 HTTP 요청을 수행할 수 있습니다. 인라인 스크립트를 사용하여 이러한 인라인 스크립트를 지원하지 않는 쉘을 사용하는 경우 인라인 스크립트를 실제 네임스페이스 및 기본 도메인 값으로 교체해야 합니다.
curl -k https://platform-http-server-`oc config view --minify -o 'jsonpath={..namespace}'`.`oc get dnses/cluster -ojsonpath='{.spec.baseDomain}'`/hello?name=Camel-K
curl -k https://platform-http-server-`oc config view --minify -o 'jsonpath={..namespace}'`.`oc get dnses/cluster -ojsonpath='{.spec.baseDomain}'`/hello?name=Camel-K
보안을 사용하여 에지 경로를 추가하려면
-secret
으로 끝나는 매개변수를 사용하여 인증서가 포함된 보안 이름을 설정합니다. 이 경로 예제 trait은tls.key
및tls.crt
라는 두 개의 키가 포함된my-combined-certs
라는 보안을 참조합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --dev PlatformHttpServer.java -t route.tls-termination=edge -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key
kamel run --dev PlatformHttpServer.java -t route.tls-termination=edge -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key
보안을 사용하여 패스스루 경로를 추가하려면 TLS가 통합 Pod에 설정되고, 실행 중인 통합 Pod에 키와 인증서가 표시되고,
--resource
kamel 매개변수를 사용하여 통합 Pod에 보안을 마운트한 다음 실행 중인 Pod에서 이러한 인증서 파일을 참조하기 위해 camel quarkus 매개변수를 사용하여-p quarkus.http.ssl.certificate
로 시작합니다. 이 경로 예제 trait은tls.key
및tls.crt
라는 두 개의 키가 포함된my-combined-certs
라는 보안을 참조합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --dev PlatformHttpServer.java --resource secret:my-combined-certs@/etc/ssl/my-combined-certs -p quarkus.http.ssl.certificate.file=/etc/ssl/my-combined-certs/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/my-combined-certs/tls.key -t route.tls-termination=passthrough -t container.port=8443
kamel run --dev PlatformHttpServer.java --resource secret:my-combined-certs@/etc/ssl/my-combined-certs -p quarkus.http.ssl.certificate.file=/etc/ssl/my-combined-certs/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/my-combined-certs/tls.key -t route.tls-termination=passthrough -t container.port=8443
보안을 사용하여 재암호화 경로를 추가하려면 TLS가 통합 Pod에 설정되고, 실행 중인 통합 Pod에 키와 인증서가 표시되고,
--resource
kamel 매개변수를 사용하여 통합 Pod에 보안을 마운트한 다음 실행 중인 Pod에서 이러한 인증서 파일을 참조하기 위해 camel quarkus 매개변수를 사용하여-p quaus.http.ssl.certificate
로 시작해야 합니다. 이 경로 예제 trait은tls.key
및tls.crt
라는 두 개의 키가 포함된my-combined-certs
라는 보안을 참조합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --dev PlatformHttpServer.java --resource secret:my-combined-certs@/etc/ssl/my-combined-certs -p quarkus.http.ssl.certificate.file=/etc/ssl/my-combined-certs/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/my-combined-certs/tls.key -t route.tls-termination=reencrypt -t route.tls-destination-ca-certificate-secret=my-combined-certs/tls.crt -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key -t container.port=8443
kamel run --dev PlatformHttpServer.java --resource secret:my-combined-certs@/etc/ssl/my-combined-certs -p quarkus.http.ssl.certificate.file=/etc/ssl/my-combined-certs/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/my-combined-certs/tls.key -t route.tls-termination=reencrypt -t route.tls-destination-ca-certificate-secret=my-combined-certs/tls.crt -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key -t container.port=8443
통합 엔드포인트에 대한 경로 및 Openshift 서비스 제공 인증서의 보안에서 특정 인증서를 사용하여 재암호화 경로를 추가하려면 다음을 수행합니다. 이렇게 하면 Openshift 서비스 제공 인증서가 통합 Pod에서만 설정됩니다. 이 작업을 수행하려면
--resource
kamel 매개변수를 사용하여 통합 Pod에서 보안을 마운트한 다음 실행 중인 Pod에서 이러한 인증서 파일을 참조하기 위해 일부 camel quarkus 매개변수를 사용하여-p quarkus.ssl.certificate
로 시작합니다. 이 경로 예제 trait은tls.key
및tls.crt
라는 두 개의 키가 포함된my-combined-certs
라는 보안을 참조합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run --dev PlatformHttpServer.java --resource secret:cert-from-openshift@/etc/ssl/cert-from-openshift -p quarkus.http.ssl.certificate.file=/etc/ssl/cert-from-openshift/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/cert-from-openshift/tls.key -t route.tls-termination=reencrypt -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key -t container.port=8443
kamel run --dev PlatformHttpServer.java --resource secret:cert-from-openshift@/etc/ssl/cert-from-openshift -p quarkus.http.ssl.certificate.file=/etc/ssl/cert-from-openshift/tls.crt -p quarkus.http.ssl.certificate.key-file=/etc/ssl/cert-from-openshift/tls.key -t route.tls-termination=reencrypt -t route.tls-certificate-secret=my-combined-certs/tls.crt -t route.tls-key-secret=my-combined-certs/tls.key -t container.port=8443
그런 다음 Openshift 서비스 제공 인증서를 삽입하도록 통합 서비스에 주석을 답니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc annotate service platform-http-server service.beta.openshift.io/serving-cert-secret-name=cert-from-openshift
oc annotate service platform-http-server service.beta.openshift.io/serving-cert-secret-name=cert-from-openshift
로컬 파일 시스템에서 제공한 인증서 및 개인 키를 사용하여 엣지 경로를 추가하려면 다음을 수행합니다. 이 예제에서는 인라인 스크립트를 사용하여 인증서 및 개인 키 파일 내용을 읽은 다음 모든 새 줄 문자를 제거합니다(이는 인증서를 매개 변수 값으로 설정하는 데 필요합니다). 따라서 값이 한 줄에 있습니다.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run PlatformHttpServer.java --dev -t route.tls-termination=edge -t route.tls-certificate="$(cat tls.crt|awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}')" -t route.tls-key="$(cat tls.key|awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}')"
kamel run PlatformHttpServer.java --dev -t route.tls-termination=edge -t route.tls-certificate="$(cat tls.crt|awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}')" -t route.tls-key="$(cat tls.key|awk 'NF {sub(/\r/, ""); printf "%s\\n",$0;}')"
6.2.7. Service Trait
서비스 특성은 동일한 네임스페이스의 다른 애플리케이션(또는 통합)에서 액세스할 수 있도록 서비스 리소스와의 통합을 노출합니다.
통합이 HTTP 끝점을 노출할 수 있는 Camel 구성 요소에 의존하는 경우 기본적으로 활성화되어 있습니다.
이 특성은 Kubernetes, OpenShift 프로필에서 사용할 수 있습니다.
6.2.7.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait service.[key]=[value] --trait service.[key2]=[value2] Integration.java
$ kamel run --trait service.[key]=[value] --trait service.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
| 서비스를 생성해야 하는 경우 코드에서 자동으로 감지합니다. |
|
|
Service가 NodePort(기본값: |
6.3. Camel K 플랫폼 특성
6.3.1. 빌더 Trait
빌더 특성은 내부적으로 IntegrationKits를 빌드하고 구성하기 위한 최상의 전략을 결정하는 데 사용됩니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
빌더 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.1.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait builder.[key]=[value] --trait builder.[key2]=[value2] Integration.java
$ kamel run --trait builder.[key]=[value] --trait builder.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
| 이를 지원하는 빌드 구성 요소(예: OpenShift 빌드 Pod)에 대한 자세한 로깅을 활성화합니다. Kaniko 및 Buildah는 지원되지 않습니다. |
|
| 빌드 작업에 제공할 속성 목록 |
6.3.2. 컨테이너 특성
컨테이너 특성을 사용하여 통합이 실행되는 컨테이너의 속성을 구성할 수 있습니다.
컨테이너와 관련된 서비스 구성도 제공합니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
컨테이너 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.2.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait container.[key]=[value] --trait container.[key2]=[value2] Integration.java
$ kamel run --trait container.[key]=[value] --trait container.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
| |
|
| 필요한 최소 CPU 양입니다. |
|
| 필요한 최소 메모리 양입니다. |
|
| 필요한 최대 CPU 양입니다. |
|
| 필요한 최대 메모리 양입니다. |
|
| kubernetes 서비스를 통해 노출을 활성화/비활성화하는 데 사용할 수 있습니다. |
|
|
컨테이너에서 노출하는 다른 포트를 구성하려면 다음을 수행하십시오(기본 |
|
|
컨테이너에서 노출된 포트의 다른 포트 이름을 구성하려면 (기본값 |
|
|
컨테이너 포트가 노출될 서비스 포트(기본값 |
|
|
컨테이너 포트가 노출될 서비스 포트 이름(기본 |
|
|
기본 컨테이너 이름입니다. 기본적으로 |
|
| 기본 컨테이너 이미지 |
|
|
컨테이너에서 ProbesEnabled 프로브를 활성화/비활성화합니다(기본값 |
|
| 활성 상태 프로브가 시작되기 전에 컨테이너가 시작된 후의 시간(초)입니다. |
|
| 프로브가 시간 초과되는 시간(초)입니다. 활성 상태 프로브에 적용됩니다. |
|
| 프로브를 수행하는 빈도입니다. 활성 상태 프로브에 적용됩니다. |
|
| 실패 후 프로브가 성공한 것으로 간주되는 최소 연속 성공 사례입니다. 활성 상태 프로브에 적용됩니다. |
|
| 성공한 후 프로브가 실패한 것으로 간주하기 위한 최소 연속 실패 횟수입니다. 활성 상태 프로브에 적용됩니다. |
|
| 준비 상태 프로브가 시작되기 전에 컨테이너가 시작된 후의 시간(초)입니다. |
|
| 프로브가 시간 초과되는 시간(초)입니다. 준비 상태 프로브에 적용됩니다. |
|
| 프로브를 수행하는 빈도입니다. 준비 상태 프로브에 적용됩니다. |
|
| 실패 후 프로브가 성공한 것으로 간주되는 최소 연속 성공 사례입니다. 준비 상태 프로브에 적용됩니다. |
|
| 성공한 후 프로브가 실패한 것으로 간주하기 위한 최소 연속 실패 횟수입니다. 준비 상태 프로브에 적용됩니다. |
6.3.3. Camel Trait
Camel 특성을 사용하여 Apache Camel K 런타임 및 관련 라이브러리 버전을 구성할 수 있으며 비활성화할 수 없습니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
camel 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.3.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait camel.[key]=[value] --trait camel.[key2]=[value2] Integration.java
$ kamel run --trait camel.[key]=[value] --trait camel.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
6.3.4. 종속 항목 Trait
Dependencies 특성은 사용자가 실행하려는 통합을 기반으로 런타임 종속성을 자동으로 추가하는 데 내부적으로 사용됩니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
종속 항목 특성은 플랫폼 특성입니다. 즉, 플랫폼 기능을 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.4.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait dependencies.[key]=[value] Integration.java
$ kamel run --trait dependencies.[key]=[value] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
6.3.5. 배포자 Trait
배포자 특성을 사용하여 통합을 배포할 높은 수준의 리소스 유형을 명시적으로 선택할 수 있습니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
배포자 특성은 플랫폼 특성입니다. 이를 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.5.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait deployer.[key]=[value] --trait deployer.[key2]=[value2] Integration.java
$ kamel run --trait deployer.[key]=[value] --trait deployer.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
|
통합을 실행하는 데 필요한 리소스를 생성할 때 배포 , |
6.3.6. 배포 평가
배포 특성은 클러스터에서 통합이 실행되는 Kubernetes 배포를 생성합니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
배포 특성은 플랫폼 특성입니다. 즉, 플랫폼 기능을 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.6.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait deployment.[key]=[value] Integration.java
$ kamel run --trait deployment.[key]=[value] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
6.3.7. 환경 Trait
환경 특성은 NAMESPACE
,POD_NAME
등과 같은 통합 컨테이너에 표준 환경 변수를 삽입하는 데 내부적으로 사용됩니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
환경 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.7.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait environment.[key]=[value] --trait environment.[key2]=[value2] Integration.java
$ kamel run --trait environment.[key]=[value] --trait environment.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
|
|
6.3.8. Error Handler Trait
error-handler는 Error Handler 소스를 통합 런타임에 삽입하는 데 사용되는 플랫폼 특성입니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
error-handler 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.8.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait error-handler.[key]=[value] --trait error-handler.[key2]=[value2] Integration.java
$ kamel run --trait error-handler.[key]=[value] --trait error-handler.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
| 오류 처리기 참조 이름이 애플리케이션 속성에서 제공되거나 제공됨 |
6.3.9. JVM 트레이블
JVM 특성은 통합을 실행하는 JVM을 구성하는 데 사용됩니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
jvm 특성은 플랫폼 특성입니다. 이를 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.9.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait jvm.[key]=[value] --trait jvm.[key2]=[value2] Integration.java
$ kamel run --trait jvm.[key]=[value] --trait jvm.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
| 디버거를 JVM에 연결할 수 있도록 원격 디버깅을 활성화합니다(예: port-forwarding 사용). |
|
| 기본 클래스가 로드되기 직전에 대상 JVM이 일시 중지됨 |
|
|
컨테이너 로그에서 JVM 시작(기본값 |
|
|
새로 시작된 JVM을 청취할 전송 주소(기본값 |
|
| JVM 옵션 목록 |
|
|
추가 JVM 클래스 경로 ( |
6.3.9.2. 예
통합에 추가 클래스 경로를
포함합니다
.Copy to Clipboard Copied! Toggle word wrap Toggle overflow kamel run -t jvm.classpath=/path/to/my-dependency.jar:/path/to/another-dependency.jar ...
$ kamel run -t jvm.classpath=/path/to/my-dependency.jar:/path/to/another-dependency.jar ...
6.3.10. Kamelets Trait
kamelets 특성은 Kamelets를 통합 런타임에 삽입하는 데 사용되는 플랫폼 특성입니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
kamelets 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.10.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait kamelets.[key]=[value] --trait kamelets.[key2]=[value2] Integration.java
$ kamel run --trait kamelets.[key]=[value] --trait kamelets.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
| 참조된 모든 Kamelets 및 기본 구성(기본적으로 사용)을 자동으로 삽입합니다. |
|
| 현재 통합으로 로드할 Kamelet 이름 쉼표로 구분된 목록입니다. |
6.3.11. OpenAPI Trait
OpenAPI DSL 특성은 OpenAPI 사양에서 통합을 생성하는 데 내부적으로 사용됩니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
openapi 특성은 플랫폼 특성입니다. 이를 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.11.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait openapi.[key]=[value] Integration.java
$ kamel run --trait openapi.[key]=[value] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
6.3.12. 소유자 Trait
Owner 특성을 사용하면 생성된 모든 리소스가 통합에 속하고 이러한 소유 리소스에 대한 통합에 대한 주석과 레이블을 전송합니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
소유자 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.12.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait owner.[key]=[value] --trait owner.[key2]=[value2] Integration.java
$ kamel run --trait owner.[key]=[value] --trait owner.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
| 전송할 주석 세트 |
|
| 전송할 라벨 세트 |
6.3.13. 플랫폼 트레이블
플랫폼 특성은 통합 플랫폼을 통합하는 데 사용되는 기본 특성입니다.
플랫폼이 없는 경우 해당 특성은 기본 플랫폼을 생성할 수 있습니다. 이 기능은 플랫폼에 대한 사용자 지정 구성을 제공할 필요가 없는 컨텍스트에서 유용합니다(예: OpenShift에서 기본 설정이 작동함).
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
플랫폼 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.13.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait platform.[key]=[value] --trait platform.[key2]=[value2] Integration.java
$ kamel run --trait platform.[key]=[value] --trait platform.[key2]=[value2] Integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
| 플랫폼이 누락될 때 기본(비어 있음) 플랫폼을 생성하려면 다음을 수행합니다. |
|
| Global operator (default true)의 경우 플랫폼을 전역적으로 생성해야 하는지 여부를 나타냅니다. |
|
| 기본 플랫폼을 생성할 수 있는 경우 환경에서 자동으로 감지합니다(OpenShift에서만 생성됨). |
6.3.14. Quarkus Trait
Quarkus 특성은 Quarkus 런타임을 활성화합니다.
기본적으로 활성화되어 있습니다.
네이티브 실행 파일로 컴파일합니다. 즉 package-type=native
를 사용하는 경우 kamelets 및 YAML 통합에만 지원됩니다. 또한 최소 4GiB의 메모리가 필요하므로 기본 빌드를 실행하는 Pod는 Operator Pod 또는 빌드 Pod(플랫폼에 구성된 빌드 전략에 따라)를 사용할 수 있는 충분한 메모리를 보유해야 합니다.
이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.
quarkus 특성은 플랫폼 특성입니다: 비활성화하면 플랫폼 기능이 손상될 수 있습니다.
6.3.14.1. 설정
CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.
kamel run --trait quarkus.[key]=[value] --trait quarkus.[key2]=[value2] integration.java
$ kamel run --trait quarkus.[key]=[value] --trait quarkus.[key2]=[value2] integration.java
다음 설정 옵션을 사용할 수 있습니다.
속성 | 유형 | 설명 |
---|---|---|
|
| 특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다. |
|
|
Quarkus 패키지 유형(기본값: |
6.3.14.2. 지원되는 Camel 구성 요소
Camel K는 Camel Quarkus Extensions로 제공되는 Camel 구성 요소만 지원합니다.
6.3.14.3. 예
6.3.14.3.1. 네이티브 통합에 대한 자동 롤아웃
네이티브 실행 파일로 컴파일하면 더 빠르게 시작하고 런타임 시 더 적은 메모리를 사용하는 통합이 생성되는 반면 빌드 프로세스는 리소스를 집약적이며 기존 Java 애플리케이션에 패키징하는 것보다 시간이 더 오래 걸립니다.
두 가지 장점을 모두 결합하기 위해 통합을 실행할 때 기존 빌드와 네이티브 빌드를 병렬로 실행하도록 Quarkus 특성을 구성할 수 있습니다.
kamel run -t quarkus.package-type=fast-jar -t quarkus.package-type=native ...
$ kamel run -t quarkus.package-type=fast-jar -t quarkus.package-type=native ...
빠른jar
빌드가 완료되면 통합 pod가 실행되고, 서비스 중단 없이 네이티브
빌드가 완료되면 네이티브
이미지에 대한 롤아웃 배포가 트리거됩니다.
7장. Camel K 명령 참조
이 장에서는 Camel K CLI(명령줄 인터페이스)에 대한 참조 정보를 제공하고 kamel
명령 사용 예를 제공합니다. 이 장에서는 런타임 시 실행되는 Camel K 통합 소스 파일에서 지정할 수 있는 Camel K 모드 라인 옵션에 대한 참조 정보도 제공합니다.
이 장에는 다음 섹션이 포함되어 있습니다.
7.1. Camel K 명령줄
Camel K CLI는 OpenShift에서 Camel K 통합을 실행하기 위한 주요 진입점으로 kamel
명령을 제공합니다.
7.1.1. 지원되는 명령
다음 키를 확인합니다.
symbol | 설명 |
---|---|
✔ | 지원됨 |
❌ | 지원되지 않거나 아직 지원되지 않음 |
이름 | 지원됨 | 설명 | 예제 |
---|---|---|---|
| ✔ | 통합 흐름에서 Kamelets와 같은 Kubernetes 리소스를 Knative 채널, Kafka 주제 또는 기타 엔드포인트에 바인딩합니다. |
|
| ❌ | 완료 스크립트를 생성합니다. |
|
| ❌ | 로컬 디버거를 사용하여 원격 통합을 디버깅합니다. |
|
| ✔ | OpenShift에 배포된 통합을 삭제합니다. |
|
| ✔ |
Camel K 리소스에 대한 자세한 정보를 얻습니다. 여기에는 |
|
| ✔ | OpenShift에 배포된 통합 상태를 가져옵니다. |
|
| ✔ |
사용 가능한 명령 전체 목록을 가져옵니다. 자세한 내용은 각 명령에 |
|
| ✔ | Java 또는 YAML에서 구현된 빈 Camel K 파일을 초기화합니다. |
|
| ❌ | OpenShift 클러스터에 Camel K를 설치합니다. 참고: OpenShift Camel K Operator를 사용하여 Camel K를 설치 및 제거하는 것이 좋습니다. |
|
| ❌ | 통합 키트 구성. |
|
| ❌ | 입력 통합 파일 집합이 제공된 로컬에서 통합 작업을 수행합니다. |
|
| ✔ | 실행 중인 통합의 로그를 출력합니다. |
|
| ✔ | 다시 빌드되는 하나 이상의 통합 상태를 지웁니다. |
|
| ✔ | 현재 Camel K 설치를 재설정합니다. |
|
| ✔ | OpenShift에서 통합을 실행합니다. |
|
| ❌ | OpenShift 클러스터에서 Camel K 설치 제거. 참고: OpenShift Camel K Operator를 사용하여 Camel K를 설치 및 제거하는 것이 좋습니다. |
|
| ✔ | Camel-K 클라이언트 버전을 표시합니다. |
|
추가 리소스
- Camel K 설치를참조하십시오.
7.2. Camel K 모드 라인 옵션
Camel K modeline을 사용하여 런타임에 실행되는 Camel K 통합 소스 파일에 구성 옵션을 입력할 수 있습니다(예: kamel run My>-<.java
). 자세한 내용은 명령줄을 사용한 Camel K 통합 실행을 참조하십시오.
kamel run
명령에 사용할 수 있는 모든 옵션은 modeline 옵션으로 지정할 수 있습니다.
다음 표에서는 가장 일반적으로 사용되는 모드 줄 옵션 중 일부를 설명합니다.
옵션 | 설명 |
---|---|
| build-time 속성 또는 build-time 속성 파일을 추가합니다.
Syntax: |
| Configmap, Secret 또는 파일에서 런타임 구성 추가
구문:
-
- |
| 외부 라이브러리 포함(예: Maven 종속성)
예: |
|
통합 컨테이너에서 환경 변수를 설정합니다. 예를 들면 |
|
통합을 위해 레이블을 추가합니다. 예를 들면 |
|
통합 이름을 추가합니다. 예: |
|
OpenAPI v2 사양을 추가합니다. 예를 들면 |
|
배포에 사용된 Camel K 특성 프로필을 설정합니다. 예: |
| 런타임 속성 또는 런타임 속성 파일을 추가합니다.
Syntax: |
| ConfigMap, Secret 또는 파일에서 런타임 리소스 추가
구문:
-
- |
|
특성에서 Camel K 기능 또는 핵심 기능을 구성합니다. 예를 들면 |