Camel K를 사용하여 통합 개발 및 관리


Red Hat build of Apache Camel K 1.10

Camel K에 대한 개발자 가이드

Red Hat build of Apache Camel K Documentation Team

초록

Apache Camel K 애플리케이션의 Red Hat 빌드를 개발, 구성 및 관리하는 필수 요소입니다.

머리말

보다 포괄적 수용을 위한 오픈 소스 용어 교체

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 삭제

사전 요구 사항

절차

  1. Camel K Operator가 OpenShift 클러스터에서 실행 중인지 확인합니다. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    oc get pod
    Copy to Clipboard Toggle word wrap
    NAME                               READY   STATUS    RESTARTS   AGE
    camel-k-operator-86b8d94b4-pk7d6   1/1     Running   0          6m28s
  2. kamel run 명령을 입력하여 OpenShift의 클라우드에서 통합을 실행합니다. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    kamel run hello.camelk.yaml
    Copy to Clipboard Toggle word wrap
    integration "hello" created
  3. kamel get 명령을 입력하여 통합 상태를 확인합니다.

    Copy to Clipboard Toggle word wrap
    kamel get
    Copy to Clipboard Toggle word wrap
    NAME   PHASE        KIT
    hello  Building Kit kit-bqatqib5t4kse5vukt40
  4. kamel describe 명령을 입력하여 통합에 대한 자세한 정보를 출력합니다.

    Copy to Clipboard Toggle word wrap
    kamel describe integration hello
    Copy to Clipboard Toggle word wrap
    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
  5. kamel log 명령을 입력하여 로그를 stdout 에 출력합니다.

    Copy to Clipboard Toggle word wrap
    kamel log hello
    Copy to Clipboard Toggle word wrap
    ...
    [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]
    ...
  6. Ctrl-C 를 눌러 터미널에서 로깅을 종료합니다.
  7. kamel delete 를 입력하여 OpenShift에 배포된 통합을 삭제합니다.

    Copy to Clipboard Toggle word wrap
    kamel delete hello
    Copy to Clipboard Toggle word wrap
    Integration hello deleted

추가 리소스

1.2. Camel K 통합 로깅 수준 관리

Camel K는 Quarkus 로깅 메커니즘을 통합을 위한 로깅 프레임워크로 사용합니다. quarkus.log.category 접두사를 통합 속성으로 지정하여 런타임에 다양한 로거의 로깅 수준을 구성할 수 있습니다. 예를 들면 다음과 같습니다.

예제

Copy to Clipboard Toggle word wrap
--property 'quarkus.log.category."org".level'=DEBUG

참고

작은 따옴표로 속성을 이스케이프하는 것이 중요합니다.

사전 요구 사항

절차

  1. kamel run 명령을 입력하고 --property 옵션을 사용하여 로깅 수준을 지정합니다. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    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]
    ...
  2. Ctrl-C 를 눌러 터미널에서 로깅을 종료합니다.

추가 리소스

1.3. Camel K 통합 스케일링

oc scale 명령을 사용하여 통합을 확장할 수 있습니다.

절차

  • Camel K 통합을 확장하려면 다음 명령을 실행합니다.

    Copy to Clipboard Toggle word wrap
    oc scale it <integration_name> --replicas <number_of_replicas>
  • Integration 리소스를 직접 편집하여 통합을 확장할 수도 있습니다.

    Copy to Clipboard Toggle word wrap
    oc patch it <integration_name> --type merge -p '{"spec":{"replicas":<number_of_replicas>}}'

    통합을 위한 복제본 수를 보려면 다음 명령을 사용하십시오.

    Copy to Clipboard Toggle word wrap
    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 설치를 참조하십시오.

절차

  1. 다음 명령을 입력하여 openshift-monitoring 프로젝트에 cluster-monitoring-config ConfigMap 오브젝트가 있는지 확인합니다.

    Copy to Clipboard Toggle word wrap
    $ oc -n openshift-monitoring get configmap cluster-monitoring-config
  2. cluster-monitoring-config ConfigMap이 아직 없는 경우 해당 ConfigMap을 생성합니다.

    Copy to Clipboard Toggle word wrap
    $ oc -n openshift-monitoring create configmap cluster-monitoring-config
  3. cluster-monitoring-config ConfigMap을 편집합니다.

    Copy to Clipboard Toggle word wrap
    $ oc -n openshift-monitoring edit configmap cluster-monitoring-config
  4. data:config.yaml: 에서 enableUserWorkloadtrue 로 설정합니다.

    Copy to Clipboard Toggle word wrap
    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 지표를 자동으로 수집하고 노출합니다.

사전 요구 사항

절차

  1. 다음 명령을 입력하여 Prometheus 특성을 활성화하여 Camel K 통합을 실행합니다.

    Copy to Clipboard Toggle word wrap
    kamel run myIntegration.java -t prometheus.enabled=true

    또는 다음과 같이 통합 플랫폼을 업데이트하여 Prometheus 특성을 전역적으로 활성화할 수 있습니다.

    Copy to Clipboard Toggle word wrap
    $ oc patch ip camel-k --type=merge -p '{"spec":{"traits":{"prometheus":{"configuration":{"enabled":true}}}}}'
  2. Prometheus에서 Camel K 통합 지표의 모니터링을 확인합니다. 예를 들어 포함된 Prometheus의 경우 OpenShift 관리자 또는 개발자 웹 콘솔에서 모니터링 > 메트릭 을 선택합니다.
  3. 보려는 Camel K 메트릭을 입력합니다. 예를 들어, 관리자 콘솔에서 Cursor의 Insert Metric 아래에 application_camel_context_uptime_seconds 를 입력하고 Run Queries 를 클릭합니다.
  4. 추가 쿼리를 클릭하여 추가 지표를 확인합니다.

2.3. 사용자 정의 Camel K 통합 지표 추가

Java 코드에서 Camel MicroProfile Metrics 구성 요소와 주석을 사용하여 Camel K 통합에 사용자 지정 지표를 추가할 수 있습니다. 그러면 이러한 사용자 지정 지표가 Prometheus에서 자동으로 검색 및 표시됩니다.

이 섹션에서는 Camel K 통합 및 서비스 구현 코드에 Camel MicroProfile Metrics 주석을 추가하는 예를 보여줍니다.

사전 요구 사항

절차

  1. Camel MicroProfile Metrics 구성 요소 주석을 사용하여 Camel 통합 코드에서 사용자 지정 지표를 등록합니다. 다음 예제에서는 Metrics.java 통합을 보여줍니다.

    Copy to Clipboard Toggle word wrap
    // 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
    
        }
    }
    1
    Camel K modeline을 사용하여 Prometheus 특성 및 Maven 종속 항목을 자동으로 구성
    2
    Error: 처리되지 않은 이벤트 수에 해당하는 오류 수에 대한 메트릭
    3
    생성 됨 : 처리할 이벤트 수에 대한 메트릭
    4
    attempt: 들어오는 이벤트를 처리하기 위해 서비스 빈에 수행된 호출 수를 나타냅니다.
    5
    redelivery: 이벤트를 처리하기 위해 발생한 재시도 횟수를 나타냅니다.
    6
    Success (ucce) : 성공적으로 처리된 이벤트 수에 대한 메트릭
  2. 필요에 따라 모든 구현 파일에 Camel MicroProfile Metrics 주석을 추가합니다. 다음 예제에서는 Camel K 통합에서 호출하는 서비스 빈을 보여줍니다. 이로 인해 임의 오류가 발생합니다.

    Copy to Clipboard Toggle word wrap
    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
    
          }
       }
     }
    1
    @Metered MicroProfile Metrics 주석은 측정을 선언하고 지표 메서드 이름(이 경우 시도 )을 기반으로 이름이 자동으로 생성됩니다.
    2
    이 예제는 메트릭에 대한 오류를 생성하기 위해 임의로 실패합니다.
  3. 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 모니터링 끝점에서는 다음 지표를 노출합니다.

표 3.1. Camel K operator 지표
이름유형설명버킷라벨

camel_k_reconciliation_duration_seconds

HistogramVec

조정 요청 기간

0.25s, 0.5s, 1s, 5s

namespace,group,version,kind,result:Reconciled|Errored|Requeued,tag:""|PlatformError|UserError

camel_k_build_duration_seconds

HistogramVec

빌드 기간

30s, 1m, 1.5m, 2m, 5m, 10m

Result:성공|오류

camel_k_build_recovery_attempts

히스토그램

빌드 복구 시도

0, 1, 2, 3, 4, 5

Result:성공|오류

camel_k_build_queue_duration_seconds

히스토그램

빌드 대기열 기간

5s, 15s, 30s, 1m, 5m,

해당 없음

camel_k_integration_first_readiness_seconds

히스토그램

첫 번째 통합 준비 시간

5s, 10s, 30s, 1m, 2m

해당 없음

3.2. Camel K Operator 모니터링 활성화

OpenShift 4.3 이상에는 OpenShift 모니터링의 일부로 이미 배포된 내장 Prometheus Operator가 포함되어 있습니다. 이 섹션에서는 OpenShift 모니터링에서 자체 애플리케이션 서비스 모니터링을 활성화하는 방법을 설명합니다.

사전 요구 사항

절차

  1. Operator 지표 끝점을 대상으로 PodMonitor 리소스를 생성하여 Prometheus 서버가 Operator가 노출하는 지표를 스크랩할 수 있습니다.

    operator-pod-monitor.yaml

    Copy to Clipboard Toggle word wrap
    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

  2. PodMonitor 리소스를 생성합니다.

    Copy to Clipboard Toggle word wrap
    oc apply -f operator-pod-monitor.yaml

추가 리소스

3.3. Camel K operator 경고

OpenShift 모니터링 스택의 AlertManager 인스턴스가 Camel K Operator가 노출하는 메트릭을 기반으로 경고를 트리거할 수 있도록 PrometheusRule 리소스를 생성할 수 있습니다.

예제

아래와 같이 노출된 메트릭을 기반으로 경고 규칙을 사용하여 PrometheusRule 리소스를 생성할 수 있습니다.

Copy to Clipboard Toggle word wrap
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 리소스에 정의된 경고 규칙을 보여줍니다.

이름심각도설명

CamelKReconciliationDuration

경고

조정 요청의 10% 이상은 1분 이상 0.5s 이상의 기간이 있습니다.

CamelKReconciliationFailure

경고

조정 요청의 1% 이상이 10분 이상 실패했습니다.

CamelKSuccessBuildDuration2m

경고

성공적인 빌드의 10% 이상은 최소 1분 이상 2분 이상 지속됩니다.

CamelKSuccessBuildDuration5m

심각

성공적인 빌드의 1 % 이상은 최소 1분 이상 5분 이상 지속됩니다.

CamelKBuildError

심각

빌드의 1% 이상이 최소 10분 이상 오류가 발생했습니다.

CamelKBuildQueueDuration1m

경고

1분 이상 1분 이상 대기 중인 빌드의 1% 이상이 대기되었습니다.

CamelKBuildQueueDuration5m

심각

빌드의 1% 이상이 최소 1분 이상 대기되었습니다.

OpenShift 설명서에서 경고 규칙 생성 에서 경고에 대한 자세한 정보를 확인할 수 있습니다.

4장. Camel K 통합 구성

Camel K 통합 라이프 사이클에는 다음 두 가지 구성 단계가 있습니다.

  • 빌드 시간 - Camel Quarkus가 Camel K 통합을 빌드하면 빌드 타임 속성이 사용됩니다.
  • 런타임 - Camel K 통합이 실행 중일 때 통합에서는 로컬 파일, OpenShift ConfigMap 또는 시크릿의 런타임 속성 또는 구성 정보를 사용합니다.

kamel run 명령과 함께 다음 옵션을 사용하여 구성 정보를 제공합니다.

예를 들어 빌드 시간 및 런타임 옵션을 사용하여 Camel K에서 데이터 소스를 빠르게 구성할 수 있습니다: Connect Camel K with databases sample configuration.

4.1. 빌드 시간 구성 속성 지정

Camel K 통합을 구축할 수 있도록 Camel Quarkus 런타임에 속성 값을 제공해야 할 수 있습니다. 빌드 시간 동안 적용되는 Quarkus 구성에 대한 자세한 내용은 Quarkus Build Time 구성 설명서 를 참조하십시오. 명령줄에서 직접 빌드 시간 속성을 지정하거나 속성 파일을 참조하여 지정할 수 있습니다. 속성이 두 위치에 모두 정의되면 명령줄에 직접 지정된 값이 속성 파일의 값보다 우선합니다.

사전 요구 사항

절차

  • Camel K kamel run 명령을 사용하여 --build-property 옵션을 지정합니다.

    Copy to Clipboard Toggle word wrap
    kamel run --build-property <quarkus-property>=<property-value> <camel-k-integration>

    예를 들어 다음 Camel K 통합 ( my-simple-timer.yaml)은 quarkus.application.name 구성 옵션을 사용합니다.

    Copy to Clipboard Toggle word wrap
    - 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 Toggle word wrap
    kamel run --build-property quarkus.application.name=my-favorite-app my-simple-timer.yaml
  • 둘 이상의 빌드 시간 속성을 제공하려면 kamel run 명령에 --build-property 옵션을 추가합니다.

    Copy to Clipboard Toggle word wrap
    kamel run --build-property <quarkus-property1>=<property-value1> -build-property=<quarkus-property2>=<property-value12> <camel-k-integration>

    또는 여러 속성을 지정해야 하는 경우 속성 파일을 만들고 --build-property 파일 옵션을 사용하여 속성 파일을 지정할 수 있습니다.

    Copy to Clipboard Toggle word wrap
    kamel run --build-property file:<property-filename> <camel-k-integration>

    예를 들어 다음 속성 파일( quarkus.properties)은 두 개의 Quarkus 속성을 정의합니다.

    Copy to Clipboard Toggle word wrap
    quarkus.application.name = my-favorite-app
    quarkus.banner.enabled = true

    quarkus.ovnner.enabled 속성은 통합이 시작될 때 Quarkus 배너를 표시하도록 지정합니다.

    Camel K kamel run 명령을 사용하여 quarkus.properties 파일을 지정하려면 다음을 실행합니다.

    Copy to Clipboard Toggle word wrap
    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 ). 단일 명령에서 여러 속성을 지정할 수 있습니다.

사전 요구 사항

절차

  1. 속성을 사용하는 Camel 통합 개발. 다음 간단한 예제에는 {{my.message}} 속성 자리 표시자가 포함되어 있습니다.

    Copy to Clipboard Toggle word wrap
    ...
    - from:
       uri: "timer:tick"
       steps:
         - set-body:
             constant: "{{my.message}}"
         - to: "log:info"
    ...
  2. 다음 구문을 사용하여 런타임에 속성 값을 설정하여 통합을 실행합니다.

    Copy to Clipboard Toggle word wrap
    kamel run --property <property>=<value> <integration>

    또는 --p 단축 표기법( --property대신)을 사용할 수 있습니다.

    Copy to Clipboard Toggle word wrap
    kamel run --property <property>=<value> <integration>

    예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    kamel run --property my.message="Hola Mundo" HelloCamelK.java --dev

    또는

    Copy to Clipboard Toggle word wrap
    kamel run --p my.message="Hola Mundo" HelloCamelK.java --dev

    다음은 예제 결과입니다.

    Copy to Clipboard Toggle word wrap
    ...
    [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 ).

사전 요구 사항

절차

  1. 통합 속성 파일을 생성합니다. 다음 예제는 my.properties 라는 파일에서 가져온 것입니다.

    Copy to Clipboard Toggle word wrap
    my.key.1=hello
    my.key.2=world
  2. 속성 파일에 정의된 속성을 사용하는 Camel 통합을 개발합니다. 다음 예제 Routing.java 통합에서는 {{my.key.1}}{{my.key.2=world}} 속성 자리 표시자를 사용합니다.

    Copy to Clipboard Toggle word wrap
    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}}");
    
      }
    }
  3. 속성 파일을 참조하려면 다음 구문을 사용하여 통합을 실행합니다.

    Copy to Clipboard Toggle word wrap
    kamel run --property file:<my-file.properties> <integration>

    또는 --p 단축 표기법( --property대신)을 사용할 수 있습니다.

    Copy to Clipboard Toggle word wrap
    kamel run --p file:<my-file.properties> <integration>

    예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    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 Toggle word wrap
    the file body

절차

  1. 구성 값이 포함된 텍스트 파일을 참조하는 Camel K 통합을 생성합니다.

    예를 들어 다음 통합(ConfigFileRoute.java)에 런타임 시 classpath에서 resources-data.txt 파일을 사용할 수 있어야 합니다.

    Copy to Clipboard Toggle word wrap
    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}");
    
      }
    }
  2. 통합을 실행하고 --config 옵션을 사용하여 실행 중인 통합에서 사용할 수 있도록 텍스트 파일을 지정합니다. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    kamel run --config file:resources-data.txt ConfigFileRoute.java --dev

    선택적으로 --config 옵션을 반복적으로 추가하여 두 개 이상의 파일을 제공할 수 있습니다. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    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 Toggle word wrap
    oc create configmap my-cm --from-literal=my-configmap-key="configmap content"

절차

  1. ConfigMap을 참조하는 Camel K 통합을 생성합니다.

    예를 들어 다음 통합( ConfigConfigmapRoute.java라고 함)은 my-cm 라는 ConfigMap에서 my-configmap-key 라는 구성 값을 참조합니다.

    Copy to Clipboard Toggle word wrap
    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}");
    
      }
    }
  2. 통합을 실행하고 --config 옵션을 사용하여 실행 중인 통합에서 사용할 수 있도록 ConfigMap 파일을 구체화합니다. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    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 Toggle word wrap
    oc create secret generic my-sec --from-literal=my-secret-key="very top secret"

절차

  1. ConfigMap을 참조하는 Camel K 통합을 생성합니다.

    예를 들어, 다음 통합 ( ConfigSecretRoute.java)은 my-sec 이라는 보안에 있는 my-secret 속성을 참조합니다.

    Copy to Clipboard Toggle word wrap
    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}");
    
      }
    }
  2. 통합을 실행하고 --config 옵션을 사용하여 실행 중인 통합에서 사용할 수 있도록 보안을 구체화합니다. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    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.

사전 요구 사항

절차

  1. 속성이 포함된 텍스트 파일을 만듭니다.

    예를 들어 다음 속성이 포함된 my.properties 라는 파일을 생성합니다.

    Copy to Clipboard Toggle word wrap
    my.key.1=hello
    my.key.2=world
  2. 속성 파일을 기반으로 ConfigMap 또는 보안을 생성합니다.

    예를 들어 다음 명령을 사용하여 my.properties 파일에서 시크릿을 생성합니다.

    Copy to Clipboard Toggle word wrap
    oc create secret generic my-sec --from-file my.properties
  3. 통합에서 시크릿에 정의된 속성을 참조하십시오.

    예를 들어, 다음 통합 ( ConfigSecretPropertyRoute.java)은 my.key.1my.key.2 속성을 참조합니다.

    Copy to Clipboard Toggle word wrap
    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}}");
    
      }
    }
  4. 통합을 실행하고 --config 옵션을 사용하여 my.key.1my.key.2 속성이 포함된 Secret을 지정합니다.

    예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    kamel run --config secret:my-sec ConfigSecretPropertyRoute.java --dev
4.2.2.5. ConfigMap 또는 Secret에서 가져온 구성 값 필터링

ConfigMaps 및 Secrets는 둘 이상의 소스를 보유할 수 있습니다. 예를 들어 다음 명령은 두 가지 소스에서 시크릿(my-sec-multi)을 생성합니다.

Copy to Clipboard Toggle word wrap
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 표기법을 사용하여 통합에서 검색하는 정보의 수를 하나의 소스로 제한할 수 있습니다.

사전 요구 사항

절차

  1. ConfigMap 또는 Secret의 소스 중 하나에서 구성 값을 사용하는 통합을 생성합니다.

    예를 들어 다음 통합(ConfigSecretKeyRoute.java)은 my-sec-multi 시크릿의 소스 중 하나만의 속성을 사용합니다.

    Copy to Clipboard Toggle word wrap
    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}");
      }
    }
  2. --config secret 옵션과 /key 표기법을 사용하여 통합을 실행합니다.

    예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    kamel run --config secret:my-sec-multi/my-secret-key-2 ConfigSecretKeyRoute.java --dev
  3. 통합 Pod를 확인하여 지정된 소스(예: my-secret-key-2)만 마운트되었는지 확인합니다.

    예를 들어 다음 명령을 실행하여 Pod의 모든 볼륨을 나열합니다.

    Copy to Clipboard Toggle word wrap
    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/ 디렉터리에 복사합니다. 필요한 경우 리소스의 대상 경로 지정에 설명된 대로 다른 대상 디렉터리를 지정할 수 있습니다.

사전 요구 사항

절차

  1. 사용자가 제공하는 파일의 내용을 읽어 Camel K 통합을 만듭니다.

    예를 들어 다음 통합 (ResourceFileBinaryRoute.java)의 압축을 풀고 resources-data.zip 파일을 읽습니다.

    Copy to Clipboard Toggle word wrap
    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}");
    
      }
    }
  2. 통합을 실행하고 --resource 옵션을 사용하여 파일을 기본 대상 디렉터리(/etc/camel/resources/)에 복사합니다. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    kamel run --resource file:resources-data.zip ResourceFileBinaryRoute.java -d camel-zipfile --dev

    참고: 바이너리 파일을 지정하면 파일 내용의 바이너리 표현이 생성되고 통합에서 투명하게 디코딩됩니다.

    선택적으로 --resource 옵션을 반복적으로 추가하여 둘 이상의 리소스를 제공할 수 있습니다. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    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 Toggle word wrap
    oc create configmap my-cm --from-literal=my-configmap-key="configmap content"

절차

  1. OpenShift 클러스터에 저장된 ConfigMap을 참조하는 Camel K 통합을 생성합니다.

    예를 들어 다음 통합( ResourceConfigmapRoute.java라고 함)은 my-configmap-key 가 포함된 my-cm 라는 ConfigMap을 참조합니다.

    Copy to Clipboard Toggle word wrap
    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}");
    
      }
    }
  2. 통합을 실행하고 --resource 옵션을 사용하여 실행 중인 통합에서 사용할 수 있도록 기본 /etc/camel/resources/ 디렉터리에 ConfigMap 파일을 구체화합니다.

    예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    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 Toggle word wrap
    oc create secret generic my-sec --from-literal=my-secret-key="very top secret"

절차

  1. OpenShift 클러스터에 저장된 보안을 참조하는 Camel K 통합을 생성합니다.

    예를 들어, 다음 통합 ( ResourceSecretRoute.java)은 my-sec Secret을 참조합니다.

    Copy to Clipboard Toggle word wrap
    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}");
    
      }
    }
  2. 통합을 실행하고 --resource 옵션을 사용하여 실행 중인 통합에서 사용할 수 있도록 기본 /etc/camel/resources/ 디렉터리에 보안을 구체화합니다.

    예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    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 구문을 사용합니다.

사전 요구 사항

절차

  1. 구성 속성이 포함된 파일, ConfigMap 또는 보안을 참조하는 Camel K 통합을 생성합니다. 예를 들어 다음 통합( ResourceFileLocationRoute.java)은 myprops 파일을 참조합니다.

    Copy to Clipboard Toggle word wrap
    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}");
    
      }
    }
  2. 통합을 실행하고 @path 구문과 함께 --resource 옵션을 사용하고 리소스 콘텐츠를 마운트할 위치(파일, ConfigMap 또는 Secret)를 지정합니다.

    예를 들어 다음 명령은 /tmp 디렉터리를 사용하여 input.txt 파일을 마운트하도록 지정합니다.

    Copy to Clipboard Toggle word wrap
    kamel run --resource file:resources-data.txt@/tmp/input.txt ResourceFileLocationRoute.java --dev
  3. 통합 포드를 확인하여 파일(예: input.txt)이 올바른 위치(예: tmp 디렉터리)에 마운트되었는지 확인합니다. 예를 들어 다음 명령을 실행합니다.

    Copy to Clipboard Toggle word wrap
    oc exec <pod-name> -- cat /tmp/input.txt
4.2.3.5. ConfigMap 또는 Secret 데이터 필터링

ConfigMap 또는 Secret을 생성할 때 둘 이상의 정보 소스를 지정할 수 있습니다. 예를 들어 다음 명령은 다음 두 소스에서 ConfigMap( my-cm-multi)을 생성합니다.

Copy to Clipboard Toggle word wrap
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 표기법을 사용하여 통합에서 검색하는 정보의 수량을 하나의 리소스로 제한할 수 있습니다.

사전 요구 사항

절차

  1. ConfigMap 또는 Secret의 리소스 중 하나에서 구성 값을 사용하는 통합을 생성합니다. 예를 들어 ResourceConfigmapKeyLocationRoute.java통합은 my-cm-multi ConfigMap을 참조합니다.

    Copy to Clipboard Toggle word wrap
    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}");
    
      }
    }
  2. 통합을 실행하고 @path 구문에 --resource 옵션을 사용하고 소스 콘텐츠(파일, ConfigMap 또는 Secret)를 마운트할 위치를 지정합니다.

    예를 들어 다음 명령은 ConfigMap 내에 포함된 소스(my-configmap-key-2@) 중 하나만 사용하고 /tmp/app/data 디렉터리를 사용하여 마운트하도록 지정합니다.

    Copy to Clipboard Toggle word wrap
    kamel run --resource configmap:my-cm-multi/my-configmap-key-2@/tmp/app/data ResourceConfigmapKeyLocationRoute.java --dev
  3. 통합 포드를 확인하여 하나의 파일(예: my-configmap-key-2)이 올바른 위치(예: /tmp/app/data 디렉터리)에 마운트되었는지 확인합니다. 예를 들어 다음 명령을 실행합니다.

    Copy to Clipboard Toggle word wrap
    oc exec <pod-name> -- cat /tmp/app/data/my-configmap-key-2

4.3. Camel 통합 구성 요소 구성

통합 코드에서 Camel 구성 요소를 프로그래밍 방식으로 구성하거나 런타임 시 명령줄에서 구성 속성을 사용하여 구성할 수 있습니다. 다음 구문을 사용하여 Camel 구성 요소를 구성할 수 있습니다.

Copy to Clipboard Toggle word wrap
camel.component.${scheme}.${property}=${value}

예를 들어 단계별 이벤트 중심 아키텍처의 Camel seda 구성 요소의 대기열 크기를 변경하려면 명령줄에서 다음 속성을 구성할 수 있습니다.

Copy to Clipboard Toggle word wrap
camel.component.seda.queueSize=10

사전 요구 사항

절차

  • kamel run 명령을 입력하고 --property 옵션을 사용하여 Camel 구성 요소 구성을 지정합니다. 예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    kamel run --property camel.component.seda.queueSize=10 examples/Integration.java

4.4. Camel K 통합 종속 항목 구성

Camel K는 통합 코드를 실행하는 데 필요한 광범위한 종속성을 자동으로 해결합니다. 그러나 kamel run --dependency 옵션을 사용하여 런타임에 명령줄에 종속 항목을 명시적으로 추가할 수 있습니다.

다음 예제 통합에서는 Camel K 자동 종속성 확인을 사용합니다.

Copy to Clipboard Toggle word wrap
...
  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 Toggle word wrap
    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 플래그를 사용하여 직접 추가할 수 있습니다.

Copy to Clipboard Toggle word wrap
kamel run -d camel:http Integration.java

이 경우 올바른 버전으로 종속성이 추가됩니다. Camel 종속성을 지정하는 표준 표기법은 camel:xxx 이지만 kamel 은 사용성을 위해 camel-xxx 도 허용합니다.

-d 플래그, mvn 접두사 및 maven 좌표를 사용하여 외부 종속성 을 추가할 수 있습니다.

Copy to Clipboard Toggle word wrap
kamel run -d mvn:com.google.guava:guava:26.0-jre Integration.java

종속 항목이 프라이빗 리포지토리에 속하는 경우 이 리포지토리를 정의해야 합니다. Configure maven 를 참조하십시오.

-d 플래그와 file:// 접두사를 사용하여 로컬 종속성 을 추가할 수 있습니다.

Copy to Clipboard Toggle word wrap
kamel run -d file://path/to/integration-dep.jar Integration.java

그런 다음 integration-dep.jar 의 내용은 사용할 수 있도록 통합에서 액세스할 수 있습니다.

실행 중인 컨테이너에 마운트할 데이터 파일을 지정할 수도 있습니다.

Copy to Clipboard Toggle word wrap
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 종속성을 제공할 수 있습니다.

Copy to Clipboard Toggle word wrap
kamel run -d github:apache/commons-csv/1.1 Integration.java

가장 중요한 공용 코드 리포지토리를 지원합니다.

Copy to Clipboard Toggle word wrap
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

Copy to Clipboard Toggle word wrap
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를 설정하려면 다음을 수행합니다.

  1. OpenShift 클러스터의 웹 콘솔에 로그인합니다.
  2. 통합을 만들려는 프로젝트를 만들거나 엽니다(예: my-camel-k-kafka ).
  3. 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
  4. AMQ 스트림 Operator를 설치합니다.

    1. 모든 프로젝트에서 Operators > OperatorHub 를 선택합니다.
    2. 키워드로 필터링 필드에 AMQ Streams 를 입력합니다.
    3. Red Hat Integration - AMQ Streams 카드를 클릭한 다음 설치를 클릭합니다.

      Operator 설치 페이지가 열립니다.

    4. 기본값을 승인한 다음 설치를 클릭합니다.
  5. Operators > 설치된 Operator 를 선택하여 Camel K 및 AMQ Streams Operator가 설치되었는지 확인합니다.
5.1.1.2. AMQ Streams를 사용하여 Kafka 주제 설정

Kafka 주제에서는 Kafka 인스턴스의 데이터 스토리지에 대한 대상을 제공합니다. 데이터를 보내기 전에 Kafka 주제를 설정해야 합니다.

사전 요구 사항

  • OpenShift 클러스터에 액세스할 수 있습니다.
  • Red Hat Integration - Camel KRed Hat Integration - AMQ Streams Operator를 OpenShift 클러스터 준비에 설명된 대로 설치했습니다.
  • OpenShift CLI(oc) 및 Camel K CLI(kamel)를 설치했습니다.

절차

AMQ Streams를 사용하여 Kafka 주제를 설정하려면 다음을 수행합니다.

  1. OpenShift 클러스터의 웹 콘솔에 로그인합니다.
  2. 프로젝트를 선택한 다음 Red Hat Integration - AMQ Streams Operator를 설치한 프로젝트를 클릭합니다. 예를 들어 my-camel-k-kafka 프로젝트를 클릭합니다.
  3. Operators > 설치된 Operators 를 선택한 다음 Red Hat Integration - AMQ Streams 를 클릭합니다.
  4. Kafka 클러스터를 생성합니다.

    1. Kafka 에서 인스턴스 생성을 클릭합니다.
    2. 클러스터 이름을 입력합니다(예: kafka-test ).
    3. 다른 기본값을 승인한 다음 만들기 를 클릭합니다.

      Kafka 인스턴스를 생성하는 프로세스는 완료하는 데 몇 분이 걸릴 수 있습니다.

      상태가 준비되면 다음 단계를 계속합니다.

  5. Kafka 주제를 생성합니다.

    1. Operators > 설치된 Operators 를 선택한 다음 Red Hat Integration - AMQ Streams 를 클릭합니다.
    2. Kafka 주제 에서 Kafka 주제 만들기 를 클릭합니다.
    3. 주제의 이름을 입력합니다(예: test-topic ).
    4. 다른 기본값을 승인한 다음 만들기 를 클릭합니다.

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)를 설치했습니다.

절차

  1. 클러스터 관리자 계정으로 OpenShift 웹 콘솔에 로그인합니다.
  2. Camel K 또는 Kamelets 애플리케이션에 대한 OpenShift 프로젝트를 생성합니다.

    1. > 프로젝트를 선택합니다.
    2. 프로젝트 만들기를 클릭합니다.
    3. 프로젝트 이름(예: my-camel-k-kafka )을 입력한 다음 생성을 클릭합니다.
  3. rhoas CLI 시작하기에 설명된 대로 RHOAS CLI를 다운로드하여 설치합니다.
  4. 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
  5. Red Hat Integration - Camel K operator가 설치되었는지 확인하려면 Operator > 설치된 Operator 를 클릭합니다.
5.1.2.2. RHOAS를 사용하여 Kafka 주제 설정

Kafka는 주제 와 관련된 메시지를 구성합니다. 각 항목에는 이름이 있습니다. 애플리케이션은 항목에 메시지를 보내고 주제에서 메시지를 검색합니다. Kafka 주제에서는 Kafka 인스턴스의 데이터 스토리지에 대한 대상을 제공합니다. 데이터를 보내기 전에 Kafka 주제를 설정해야 합니다.

사전 요구 사항

절차

Apache Kafka용 Red Hat OpenShift Streams를 사용하여 Kafka 주제를 설정하려면 다음을 수행합니다.

  1. 명령줄에서 OpenShift 클러스터에 로그인합니다.
  2. 프로젝트를 엽니다. 예를 들면 다음과 같습니다.

    oc 프로젝트 my-camel-k-kafka

  3. Camel K Operator가 프로젝트에 설치되어 있는지 확인합니다.

    oc get csv

    결과는 Red Hat Camel K operator를 나열하고 성공 단계에 있음을 나타냅니다.

  4. Kafka 인스턴스를 준비하고 RHOAS에 연결합니다.

    1. 다음 명령을 사용하여 RHOAS CLI에 로그인합니다.

      rhoas login

    2. kafka-test 와 같이 kafka 인스턴스를 생성합니다.

      rhoas kafka create kafka-test

      Kafka 인스턴스를 생성하는 프로세스는 완료하는 데 몇 분이 걸릴 수 있습니다.

  5. Kafka 인스턴스의 상태를 확인하려면 다음을 수행합니다.

    rhoas 상태

    웹 콘솔에서 상태를 볼 수도 있습니다.

    https://cloud.redhat.com/application-services/streams/kafkas/

    상태가 준비 되면 다음 단계를 계속합니다.

  6. 새 Kafka 주제를 생성합니다.

    rhoas kafka topic create --name test-topic

  7. Kafka 인스턴스(클러스터)를 Openshift Application Services 인스턴스와 연결합니다.

    rhoas 클러스터 연결

  8. 인증 정보 토큰을 가져오려면 스크립트 지침을 따르십시오.

    출력은 다음과 유사합니다.

    Copy to Clipboard Toggle word wrap
    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 주제를 생성했습니다.

절차

  1. Kafka 브로커 URL (Bootstrap URL)을 가져옵니다.

    rhoas 상태

    이 명령은 다음과 유사한 출력을 반환합니다.

    Copy to Clipboard Toggle word wrap
      Kafka
      ---------------------------------------------------------------
      ID:                     1ptdfZRHmLKwqW6A3YKM2MawgDh
      Name:                   my-kafka
      Status:                 ready
      Bootstrap URL:        my-kafka--ptdfzrhmlkwqw-a-ykm-mawgdh.kafka.devshift.org:443
  2. 사용자 이름과 암호를 가져오려면 다음 구문을 사용하여 서비스 계정을 생성합니다.

    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 파일에 저장됩니다.

  3. 서비스 계정 인증 정보를 확인하려면 credentials.json 파일을 확인합니다.

    cat credentials.json

    이 명령은 다음과 유사한 출력을 반환합니다.

    Copy to Clipboard Toggle word wrap
    {"clientID":"srvc-acct-eb575691-b94a-41f1-ab97-50ade0cd1094", "password":"facf3df1-3c8d-4253-aa87-8c95ca5e1225"}
  4. Kakfa 주제로 또는에게 메시지를 보내거나 받을 수 있는 권한을 부여합니다. 다음 명령을 사용합니다. 여기서 clientIDcredentials.json 파일에 제공된 값입니다(단계 3).

    Copy to Clipboard Toggle word wrap
    rhoas kafka acl grant-access --producer --consumer --service-account $CLIENT_ID --topic test-topic --group all

    예를 들면 다음과 같습니다.

    Copy to Clipboard Toggle word wrap
    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 및 서비스 계정 시크릿)를 사용하여 보안을 생성할 수 있습니다.

절차

  1. application.properties 파일을 편집하고 Kafka 자격 증명을 추가합니다.

    application.properties 파일

    Copy to Clipboard Toggle word wrap
    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>

  2. 다음 명령을 실행하여 application.properties 파일에 중요한 속성이 포함된 시크릿을 생성합니다.

    Copy to Clipboard Toggle word wrap
    oc create secret generic kafka-props --from-file application.properties

    Camel K 통합을 실행할 때 이 시크릿을 사용합니다.

예를 들면 다음과 같습니다.

Camel K Kafka 기본 빠른 시작

5.1.2.5. SASL/OAUTHBearer 인증 방법을 사용하여 시크릿 생성

가져온 인증 정보(Kafka 부트스트랩 URL, 서비스 계정 ID 및 서비스 계정 시크릿)를 사용하여 보안을 생성할 수 있습니다.

절차

  1. application-oauth.properties 파일을 편집하고 Kafka 자격 증명을 추가합니다.

    application-oauth.properties 파일

    Copy to Clipboard Toggle word wrap
    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>

  2. 다음 명령을 실행하여 application.properties 파일에 중요한 속성이 포함된 시크릿을 생성합니다.

    Copy to Clipboard Toggle word wrap
    oc create secret generic kafka-props --from-file application-oauth.properties

    Camel K 통합을 실행할 때 이 시크릿을 사용합니다.

예를 들면 다음과 같습니다.

Camel K Kafka 기본 빠른 시작

5.2. Kafka 통합 실행

생산자 통합 실행

  1. 샘플 생산자 통합을 생성합니다. 이렇게 하면 10초마다 메시지로 주제가 채워집니다.

    Sample SaslSSLKafkaProducer.java

    Copy to Clipboard Toggle word wrap
    // 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!");
      }
    }

  2. 그런 다음 통합 절차를 실행합니다.

    Copy to Clipboard Toggle word wrap
    kamel run --secret kafka-props SaslSSLKafkaProducer.java --dev

    생산자는 새 메시지를 생성하고 항목에 푸시하고 일부 정보를 기록합니다.

    Copy to Clipboard Toggle word wrap
    [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!

소비자 통합 실행

  1. 소비자 통합을 생성합니다.

    Sample SaslSSLKafkaProducer.java

    Copy to Clipboard Toggle word wrap
    // 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}");
      }
    }

  2. 다른 쉘을 열고 다음 명령을 사용하여 소비자 통합을 실행합니다.

    Copy to Clipboard Toggle word wrap
    kamel run --secret kafka-props SaslSSLKafkaConsumer.java --dev

    소비자는 주제에 있는 이벤트 로깅을 시작합니다.

    Copy to Clipboard Toggle word wrap
    [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에는 OpenShiftKnative 프로필이 포함되어 있습니다. Kubernetes 프로필에는 커뮤니티 전용 지원이 있습니다. 또한 통합을 위한 Java 및 YAML DSL 지원이 포함되어 있습니다. XML, Groovy, JavaScript와 같은 다른 언어에서는 커뮤니티 전용 지원이 있습니다.

이 장에는 다음 섹션이 포함되어 있습니다.

Camel K 기능 특성

Camel K 코어 플랫폼 특성

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 통합을 실행하는 대상 클라우드 플랫폼을 정의합니다. 지원되는 프로필은 OpenShiftKnative 프로필입니다.

참고

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 서비스 생성을 비활성화합니다.

Copy to Clipboard Toggle word wrap
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와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait knative.[key]=[value] --trait knative.[key2]=[value2] integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

knative.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

knative.configuration

string

를 사용하여 JSON 형식으로 Knative 전체 구성을 삽입할 수 있습니다.

knative.channel-sources

[]string

통합 경로 소스로 사용되는 채널 목록입니다. 간단한 채널 이름 또는 전체 Camel URI를 포함할 수 있습니다.

knative.channel-sinks

[]string

통합 경로 대상으로 사용되는 채널 목록입니다. 간단한 채널 이름 또는 전체 Camel URI를 포함할 수 있습니다.

knative.endpoint-sources

[]string

통합 경로 소스로 사용되는 채널 목록입니다.

knative.endpoint-sinks

[]string

통합 경로 대상으로 사용되는 끝점 목록입니다. 간단한 끝점 이름 또는 전체 Camel URI를 포함할 수 있습니다.

knative.event-sources

[]string

통합을 서브스크립션할 이벤트 유형 목록입니다. "기본"과 다른 특정 브로커를 사용하려면 간단한 이벤트 유형 또는 전체 Camel URI를 포함할 수 있습니다.

knative.event-sinks

[]string

통합을 생성할 이벤트 유형 목록입니다. 특정 브로커를 사용하기 위해 간단한 이벤트 유형 또는 전체 Camel URI를 포함할 수 있습니다.

knative.filter-source-channels

bool

헤더 "ce-knativehistory"에 따라 이벤트를 필터링할 수 있습니다. 이 헤더는 최신 버전의 Knative에서 제거되었으므로 필터링은 기본적으로 비활성화되어 있습니다.

knative.sink-binding

bool

Knative SinkBinding 리소스를 통해 싱크에 통합을 바인딩할 수 있습니다. 이는 통합에서 단일 싱크를 대상으로 할 때 사용할 수 있습니다. 통합에서 단일 싱크를 대상으로 할 때 기본적으로 활성화됩니다( Knative 소스에서 통합을 소유한 경우 제외).

knative.auto

bool

모든 특성 속성에 대한 자동 검색을 활성화합니다.

6.2.2. Knative 서비스 Trait

Knative 서비스 특성을 사용하면 표준 Kubernetes 배포 대신 Knative 서비스로 통합을 실행할 때 옵션을 구성할 수 있습니다.

Knative 서비스로 통합을 실행하면 자동 확장(및 스케일 0) 기능이 추가되지만 이러한 기능은 경로에서 HTTP 끝점 소비자를 사용하는 경우에만 의미가 있습니다.

이 특성은 다음 프로필에서 사용할 수 있습니다: Knative.

6.2.2.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait knative-service.[key]=[value] --trait knative-service.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

knative-service.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

knative-service.autoscaling-class

string

Knative 자동 스케일링 클래스 속성(예: hpa.autoscaling.knative.dev 또는 kpa.autoscaling.knative.dev 자동 스케일링 설정)을 구성합니다.

자세한 내용은 Knative 설명서를 참조하십시오.

knative-service.autoscaling-metric

string

Knative 자동 스케일링 메트릭 속성(예: 동시성 기반 또는 cpu 기반 자동 스케일링 설정)을 구성합니다.

자세한 내용은 Knative 설명서를 참조하십시오.

knative-service.autoscaling-target

int

각 Pod에 대해 허용되는 동시성 수준 또는 CPU 백분율(자동 스케일링 지표에 따라)을 설정합니다.

자세한 내용은 Knative 설명서를 참조하십시오.

knative-service.min-scale

int

통합을 위해 언제든지 실행해야 하는 최소 Pod 수입니다. 기본적으로 0입니다. 즉, 구성된 시간 동안 사용하지 않으면 통합이 0으로 축소됩니다.

자세한 내용은 Knative 설명서를 참조하십시오.

knative-service.max-scale

int

통합을 위해 병렬로 실행할 수 있는 Pod 수에 대한 상한입니다. Knative에는 설치에 따라 달라지는 자체 cap 값이 있습니다.

자세한 내용은 Knative 설명서를 참조하십시오.

knative-service.auto

bool

모든 조건이 충족되면 Knative 서비스로 통합을 자동으로 배포합니다.

  • 통합에서 Knative 프로필을 사용
  • 모든 경로는 HTTP 기반 소비자 또는 수동 소비자(예: 직접 는 수동 소비자임)에서 시작됩니다.

6.2.3. Prometheus Trait

Prometheus 특성은 Prometheus 호환 끝점을 구성합니다. 또한 Prometheus Operator를 사용하는 경우 끝점을 자동으로 스크랩할 수 있도록 PodMonitor 리소스를 생성합니다.

지표는 MicroProfile 메트릭을 사용하여 노출됩니다.

주의

PodMonitor 리소스를 생성하려면 Prometheus Operator 사용자 정의 리소스 정의가 설치되어 있어야 합니다. Prometheus Operator 없이 Prometheus 특성이 작동하려면 pod-monitorfalse 로 설정할 수 있습니다.

Prometheus 특성은 기본적으로 비활성화되어 있습니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

6.2.3.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait prometheus.[key]=[value] --trait prometheus.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

prometheus.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

prometheus.pod-monitor

bool

PodMonitor 리소스가 생성되었는지 여부(기본값: ).

prometheus.pod-monitor-labels

[]string

pod-monitortrue 인 경우 적용되는 PodMonitor 리소스 레이블입니다.

6.2.4. PDB Trait

PDB 특성을 사용하면 통합 Pod에 대해 PodDisruptionBudget 리소스를 구성할 수 있습니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

6.2.4.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait pdb.[key]=[value] --trait pdb.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

pdb.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

pdb.min-available

string

제거 후에도 사용할 수 있어야 하는 Integration의 pod 수입니다. 절대 숫자 또는 백분율일 수 있습니다. min-availablemax-unavailable 중 하나만 지정할 수 있습니다.

pdb.max-unavailable

string

제거 후 사용할 수 없는 통합의 Pod 수입니다. 절대 번호 또는 백분율( min-available 이 설정되지 않은 경우에도 기본값 1) 수 있습니다. max-unavailablemin-available 중 하나만 지정할 수 있습니다.

6.2.5. pull Secret Trait

Pull Secret 특성은 Kubernetes가 외부 레지스트리에서 컨테이너 이미지를 검색할 수 있도록 Pod에서 가져오기 보안을 설정합니다.

가져오기 시크릿은 수동으로 지정하거나 IntegrationPlatform 의 외부 컨테이너 레지스트리에 대한 인증을 구성한 경우 이미지를 가져오는 데 동일한 시크릿을 사용합니다.

외부 컨테이너 레지스트리에 대한 인증을 구성할 때마다 기본적으로 활성화되어 있으므로 외부 레지스트리가 프라이빗이라고 가정합니다.

레지스트리에 이미지 가져오기에 대한 인증이 필요하지 않은 경우 이 특성을 비활성화할 수 있습니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

6.2.5.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait pull-secret.[key]=[value] --trait pull-secret.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

pull-secret.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

pull-secret.secret-name

string

Pod에 설정할 풀 시크릿 이름입니다. 비워 두면 IntegrationPlatform 레지스트리 구성에서 자동으로 가져옵니다.

pull-secret.image-puller-delegation

bool

공유 플랫폼과 함께 글로벌 Operator를 사용하는 경우 Operator 네임스페이스에서 system:image-puller 클러스터 역할을 통합 서비스 계정으로 위임할 수 있습니다.

pull-secret.auto

bool

kubernetes.io/dockerconfigjson 유형의 경우 Pod에서 플랫폼 레지스트리 보안을 자동으로 구성합니다.

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와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait route.[key]=[value] --trait route.[key2]=[value2] integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

route.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

route.host

string

경로에서 노출되는 호스트를 구성하려면 다음을 수행합니다.

route.tls-termination

string

엣지,패스스루 또는 재암호화 와 같은 TLS 종료 유형입니다.

자세한 내용은 OpenShift 경로 설명서를 참조하십시오.

route.tls-certificate

string

TLS 인증서 콘텐츠입니다.

자세한 내용은 OpenShift 경로 설명서를 참조하십시오.

route.tls-certificate-secret

string

TLS 인증서에 대한 보안 이름 및 키 참조입니다. 형식은 "secret-name[/key-name]"이며, 시크릿에 키가 하나만 있는 경우 값은 시크릿 이름을 나타냅니다. 그렇지 않으면 "/"로 구분된 키 이름을 설정할 수 있습니다.

자세한 내용은 OpenShift 경로 설명서를 참조하십시오.

route.tls-key

string

TLS 인증서 키 콘텐츠입니다.

자세한 내용은 OpenShift 경로 설명서를 참조하십시오.

route.tls-key-secret

string

TLS 인증서 키에 대한 보안 이름 및 키 참조입니다. 형식은 "secret-name[/key-name]"이며, 시크릿에 키가 하나만 있는 경우 값은 시크릿 이름을 나타냅니다. 그렇지 않으면 "/"로 구분된 키 이름을 설정할 수 있습니다.

자세한 내용은 OpenShift 경로 설명서를 참조하십시오.

route.tls-ca-certificate

string

TLS CA 인증서 콘텐츠입니다.

자세한 내용은 OpenShift 경로 설명서를 참조하십시오.

route.tls-ca-certificate-secret

string

TLS CA 인증서에 대한 시크릿 이름 및 키 참조입니다. 형식은 "secret-name[/key-name]"이며, 시크릿에 키가 하나만 있는 경우 값은 시크릿 이름을 나타냅니다. 그렇지 않으면 "/"로 구분된 키 이름을 설정할 수 있습니다.

자세한 내용은 OpenShift 경로 설명서를 참조하십시오.

route.tls-destination-ca-certificate

string

대상 CA 인증서는 최종 대상의 ca 인증서 내용을 제공합니다. 재암호화 종료를 사용하는 경우 이 파일을 제공하여 라우터에서 보안 연결의 상태 점검에 사용해야 합니다. 이 필드를 지정하지 않으면 라우터에서 자체 대상 CA를 제공하고 단기 서비스 이름(service.namespace.svc)을 사용하여 호스트 이름(service.namespace.svc)을 사용하여 인프라 생성 인증서를 자동으로 확인할 수 있습니다.

자세한 내용은 OpenShift 경로 설명서를 참조하십시오.

route.tls-destination-ca-certificate-secret

string

대상 CA 인증서에 대한 보안 이름 및 키 참조입니다. 형식은 "secret-name[/key-name]"이며, 시크릿에 키가 하나만 있는 경우 값은 시크릿 이름을 나타냅니다. 그렇지 않으면 "/"로 구분된 키 이름을 설정할 수 있습니다.

자세한 내용은 OpenShift 경로 설명서를 참조하십시오.

route.tls-insecure-edge-termination-policy

string

비보안 트래픽을 처리하는 방법을 구성하려면 트래픽 허용,비활성화 또는 리디렉션 트래픽 허용.

자세한 내용은 OpenShift 경로 설명서를 참조하십시오.

6.2.6.2. 예

이 예제에서는 시크릿 을 사용하여 통합에 참조할 인증서와 키를 저장합니다. 경로에 대한 자세한 내용은 Openshift 경로 문서를 참조하십시오. PlatformHttpServer.java 는 통합 예제입니다.

이러한 예제를 실행하려면 키와 인증서가 있는 보안이 있어야 합니다.

6.2.6.2.1. 자체 서명된 인증서를 생성하고 보안을 생성합니다.
Copy to Clipboard Toggle word wrap
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 요청을 수행할 수 있습니다. 인라인 스크립트를 사용하여 이러한 인라인 스크립트를 지원하지 않는 쉘을 사용하는 경우 인라인 스크립트를 실제 네임스페이스 및 기본 도메인 값으로 교체해야 합니다.

Copy to Clipboard Toggle word wrap
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.keytls.crt 라는 두 개의 키가 포함된 my-combined-certs 라는 보안을 참조합니다.

    Copy to Clipboard Toggle word wrap
    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.keytls.crt 라는 두 개의 키가 포함된 my-combined-certs 라는 보안을 참조합니다.

    Copy to Clipboard Toggle word wrap
    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.keytls.crt 라는 두 개의 키가 포함된 my-combined-certs 라는 보안을 참조합니다.

    Copy to Clipboard Toggle word wrap
    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.keytls.crt 라는 두 개의 키가 포함된 my-combined-certs 라는 보안을 참조합니다.

    Copy to Clipboard Toggle word wrap
    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 Toggle word wrap
    oc annotate service platform-http-server service.beta.openshift.io/serving-cert-secret-name=cert-from-openshift
  • 로컬 파일 시스템에서 제공한 인증서 및 개인 키를 사용하여 엣지 경로를 추가하려면 다음을 수행합니다. 이 예제에서는 인라인 스크립트를 사용하여 인증서 및 개인 키 파일 내용을 읽은 다음 모든 새 줄 문자를 제거합니다(이는 인증서를 매개 변수 값으로 설정하는 데 필요합니다). 따라서 값이 한 줄에 있습니다.

    Copy to Clipboard Toggle word wrap
    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와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait service.[key]=[value] --trait service.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

service.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

service.auto

bool

서비스를 생성해야 하는 경우 코드에서 자동으로 감지합니다.

service.node-port

bool

Service가 NodePort(기본값: false)로 노출되도록 활성화합니다.

6.3. Camel K 플랫폼 특성

6.3.1. 빌더 Trait

빌더 특성은 내부적으로 IntegrationKits를 빌드하고 구성하기 위한 최상의 전략을 결정하는 데 사용됩니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

주의

빌더 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.

6.3.1.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait builder.[key]=[value] --trait builder.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

builder.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

builder.verbose

bool

이를 지원하는 빌드 구성 요소(예: OpenShift 빌드 Pod)에 대한 자세한 로깅을 활성화합니다. Kaniko 및 Buildah는 지원되지 않습니다.

builder.properties

[]string

빌드 작업에 제공할 속성 목록

6.3.2. 컨테이너 특성

컨테이너 특성을 사용하여 통합이 실행되는 컨테이너의 속성을 구성할 수 있습니다.

컨테이너와 관련된 서비스 구성도 제공합니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

주의

컨테이너 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.

6.3.2.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait container.[key]=[value] --trait container.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

container.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

container.auto

bool

 

container.request-cpu

string

필요한 최소 CPU 양입니다.

container.request-memory

string

필요한 최소 메모리 양입니다.

container.limit-cpu

string

필요한 최대 CPU 양입니다.

container.limit-memory

string

필요한 최대 메모리 양입니다.

container.expose

bool

kubernetes 서비스를 통해 노출을 활성화/비활성화하는 데 사용할 수 있습니다.

container.port

int

컨테이너에서 노출하는 다른 포트를 구성하려면 다음을 수행하십시오(기본 8080).

container.port-name

string

컨테이너에서 노출된 포트의 다른 포트 이름을 구성하려면 (기본값 http).

container.service-port

int

컨테이너 포트가 노출될 서비스 포트(기본값 80)를 구성하려면 다음을 수행합니다.

container.service-port-name

string

컨테이너 포트가 노출될 서비스 포트 이름(기본 http)을 구성하려면 다음을 수행하십시오.

container.name

string

기본 컨테이너 이름입니다. 기본적으로 integration 이라고 합니다.

container.image

string

기본 컨테이너 이미지

container.probes-enabled

bool

컨테이너에서 ProbesEnabled 프로브를 활성화/비활성화합니다(기본값 false).

container.liveness-initial-delay

int32

활성 상태 프로브가 시작되기 전에 컨테이너가 시작된 후의 시간(초)입니다.

container.liveness-timeout

int32

프로브가 시간 초과되는 시간(초)입니다. 활성 상태 프로브에 적용됩니다.

container.liveness-period

int32

프로브를 수행하는 빈도입니다. 활성 상태 프로브에 적용됩니다.

container.liveness-success-threshold

int32

실패 후 프로브가 성공한 것으로 간주되는 최소 연속 성공 사례입니다. 활성 상태 프로브에 적용됩니다.

container.liveness-failure-threshold

int32

성공한 후 프로브가 실패한 것으로 간주하기 위한 최소 연속 실패 횟수입니다. 활성 상태 프로브에 적용됩니다.

container.readiness-initial-delay

int32

준비 상태 프로브가 시작되기 전에 컨테이너가 시작된 후의 시간(초)입니다.

container.readiness-timeout

int32

프로브가 시간 초과되는 시간(초)입니다. 준비 상태 프로브에 적용됩니다.

container.readiness-period

int32

프로브를 수행하는 빈도입니다. 준비 상태 프로브에 적용됩니다.

container.readiness-success-threshold

int32

실패 후 프로브가 성공한 것으로 간주되는 최소 연속 성공 사례입니다. 준비 상태 프로브에 적용됩니다.

container.readiness-failure-threshold

int32

성공한 후 프로브가 실패한 것으로 간주하기 위한 최소 연속 실패 횟수입니다. 준비 상태 프로브에 적용됩니다.

6.3.3. Camel Trait

Camel 특성을 사용하여 Apache Camel K 런타임 및 관련 라이브러리 버전을 구성할 수 있으며 비활성화할 수 없습니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

주의

camel 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.

6.3.3.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait camel.[key]=[value] --trait camel.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

camel.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

6.3.4. 종속 항목 Trait

Dependencies 특성은 사용자가 실행하려는 통합을 기반으로 런타임 종속성을 자동으로 추가하는 데 내부적으로 사용됩니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

주의

종속 항목 특성은 플랫폼 특성입니다. 즉, 플랫폼 기능을 비활성화하면 플랫폼 기능이 손상될 수 있습니다.

6.3.4.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait dependencies.[key]=[value] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

dependencies.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

6.3.5. 배포자 Trait

배포자 특성을 사용하여 통합을 배포할 높은 수준의 리소스 유형을 명시적으로 선택할 수 있습니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

주의

배포자 특성은 플랫폼 특성입니다. 이를 비활성화하면 플랫폼 기능이 손상될 수 있습니다.

6.3.5.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait deployer.[key]=[value] --trait deployer.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

deployer.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

deployer.kind

string

통합을 실행하는 데 필요한 리소스를 생성할 때 배포 ,cron-job 또는 knative-service 간에 원하는 배포 유형을 명시적으로 선택할 수 있습니다.

6.3.6. 배포 평가

배포 특성은 클러스터에서 통합이 실행되는 Kubernetes 배포를 생성합니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

주의

배포 특성은 플랫폼 특성입니다. 즉, 플랫폼 기능을 비활성화하면 플랫폼 기능이 손상될 수 있습니다.

6.3.6.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait deployment.[key]=[value] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

deployment.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

6.3.7. 환경 Trait

환경 특성은 NAMESPACE,POD_NAME 등과 같은 통합 컨테이너에 표준 환경 변수를 삽입하는 데 내부적으로 사용됩니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

주의

환경 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.

6.3.7.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait environment.[key]=[value] --trait environment.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

environment.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

environment.container-meta

bool

NAMESPACEPOD_NAME 환경 변수 삽입 (기본값 true)

6.3.8. Error Handler Trait

error-handler는 Error Handler 소스를 통합 런타임에 삽입하는 데 사용되는 플랫폼 특성입니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

주의

error-handler 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.

6.3.8.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait error-handler.[key]=[value] --trait error-handler.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

error-handler.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

error-handler.ref

string

오류 처리기 참조 이름이 애플리케이션 속성에서 제공되거나 제공됨

6.3.9. JVM 트레이블

JVM 특성은 통합을 실행하는 JVM을 구성하는 데 사용됩니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

주의

jvm 특성은 플랫폼 특성입니다. 이를 비활성화하면 플랫폼 기능이 손상될 수 있습니다.

6.3.9.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait jvm.[key]=[value] --trait jvm.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

jvm.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

jvm.debug

bool

디버거를 JVM에 연결할 수 있도록 원격 디버깅을 활성화합니다(예: port-forwarding 사용).

jvm.debug-suspend

bool

기본 클래스가 로드되기 직전에 대상 JVM이 일시 중지됨

jvm.print-command

bool

컨테이너 로그에서 JVM 시작(기본값 true)을 사용하는 명령을 출력합니다.

jvm.debug-address

string

새로 시작된 JVM을 청취할 전송 주소(기본값 *:5005)

jvm.options

[]string

JVM 옵션 목록

jvm.classpath

string

추가 JVM 클래스 경로 ( Linux 클래스 경로 구분 사용)

6.3.9.2. 예
  • 통합에 추가 클래스 경로를 포함합니다.

    Copy to Clipboard Toggle word wrap
    $ 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와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait kamelets.[key]=[value] --trait kamelets.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

kamelets.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

kamelets.auto

bool

참조된 모든 Kamelets 및 기본 구성(기본적으로 사용)을 자동으로 삽입합니다.

kamelets.list

string

현재 통합으로 로드할 Kamelet 이름 쉼표로 구분된 목록입니다.

6.3.11. OpenAPI Trait

OpenAPI DSL 특성은 OpenAPI 사양에서 통합을 생성하는 데 내부적으로 사용됩니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

주의

openapi 특성은 플랫폼 특성입니다. 이를 비활성화하면 플랫폼 기능이 손상될 수 있습니다.

6.3.11.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait openapi.[key]=[value] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

openapi.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

6.3.12. 소유자 Trait

Owner 특성을 사용하면 생성된 모든 리소스가 통합에 속하고 이러한 소유 리소스에 대한 통합에 대한 주석과 레이블을 전송합니다.

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

주의

소유자 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.

6.3.12.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait owner.[key]=[value] --trait owner.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

owner.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

owner.target-annotations

[]string

전송할 주석 세트

owner.target-labels

[]string

전송할 라벨 세트

6.3.13. 플랫폼 트레이블

플랫폼 특성은 통합 플랫폼을 통합하는 데 사용되는 기본 특성입니다.

플랫폼이 없는 경우 해당 특성은 기본 플랫폼을 생성할 수 있습니다. 이 기능은 플랫폼에 대한 사용자 지정 구성을 제공할 필요가 없는 컨텍스트에서 유용합니다(예: OpenShift에서 기본 설정이 작동함).

이 특성은 Kubernetes, Knative, OpenShift 프로필에서 사용할 수 있습니다.

주의

플랫폼 특성은 플랫폼 특성입니다. 비활성화하면 플랫폼 기능이 손상될 수 있습니다.

6.3.13.1. 설정

CLI와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait platform.[key]=[value] --trait platform.[key2]=[value2] Integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

platform.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

platform.create-default

bool

플랫폼이 누락될 때 기본(비어 있음) 플랫폼을 생성하려면 다음을 수행합니다.

platform.global

bool

Global operator (default true)의 경우 플랫폼을 전역적으로 생성해야 하는지 여부를 나타냅니다.

platform.auto

bool

기본 플랫폼을 생성할 수 있는 경우 환경에서 자동으로 감지합니다(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와의 통합을 실행할 때 특성 속성을 지정할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ kamel run --trait quarkus.[key]=[value] --trait quarkus.[key2]=[value2] integration.java

다음 설정 옵션을 사용할 수 있습니다.

속성유형설명

quarkus.enabled

bool

특성을 활성화하거나 비활성화하는 데 사용할 수 있습니다. 모든 특성은 이 공통 속성을 공유합니다.

quarkus.package-type

[]github.com/apache/camel-k/pkg/trait.quarkusPackageType

Quarkus 패키지 유형(기본값: fast-jar 또는 native )(기본 fast-jar). fast-jar네이티브 가 모두 지정된 경우 두 개의 IntegrationKit 리소스가 생성되고 네이티브 키트가 한 번 준비된 fast-jar 보다 우선합니다. 주문은 통합을 위해 현재 키트의 해결에 영향을 미칩니다. 첫 번째 패키지 유형에 해당하는 키트는 통합과 일치하는 기존 키트가 없는 경우 통합에 할당됩니다.

6.3.14.2. 지원되는 Camel 구성 요소

Camel K는 Camel Quarkus Extensions로 제공되는 Camel 구성 요소만 지원합니다.

6.3.14.3. 예
6.3.14.3.1. 네이티브 통합에 대한 자동 롤아웃

네이티브 실행 파일로 컴파일하면 더 빠르게 시작하고 런타임 시 더 적은 메모리를 사용하는 통합이 생성되는 반면 빌드 프로세스는 리소스를 집약적이며 기존 Java 애플리케이션에 패키징하는 것보다 시간이 더 오래 걸립니다.

두 가지 장점을 모두 결합하기 위해 통합을 실행할 때 기존 빌드와 네이티브 빌드를 병렬로 실행하도록 Quarkus 특성을 구성할 수 있습니다.

Copy to Clipboard Toggle word wrap
$ 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설명

지원됨

지원되지 않거나 아직 지원되지 않음

표 7.1. Kamel 명령
이름지원됨설명예제

bind

통합 흐름에서 Kamelets와 같은 Kubernetes 리소스를 Knative 채널, Kafka 주제 또는 기타 엔드포인트에 바인딩합니다.

Kamel bind telegram-source -p "source.authorizationToken=the Token" channel:mychannel

완료

완료 스크립트를 생성합니다.

Kamel completion bash

debug

로컬 디버거를 사용하여 원격 통합을 디버깅합니다.

Kamel debug my-integration

삭제

OpenShift에 배포된 통합을 삭제합니다.

Kamel에서 my-integration 삭제

describe

Camel K 리소스에 대한 자세한 정보를 얻습니다. 여기에는 통합,키트 또는 플랫폼이 포함됩니다.

Kamel describe integration my-integration

get

OpenShift에 배포된 통합 상태를 가져옵니다.

kamel get

help

사용 가능한 명령 전체 목록을 가져옵니다. 자세한 내용은 각 명령에 --help 를 매개변수로 입력할 수 있습니다.

  • Kamel 도움말
  • kamel run --help

init

Java 또는 YAML에서 구현된 빈 Camel K 파일을 초기화합니다.

kamel init MyIntegration.java

설치

OpenShift 클러스터에 Camel K를 설치합니다.

참고: OpenShift Camel K Operator를 사용하여 Camel K를 설치 및 제거하는 것이 좋습니다.

Kamel 설치

kit

통합 키트 구성.

kamel kit create my-integration --secret

로컬

입력 통합 파일 집합이 제공된 로컬에서 통합 작업을 수행합니다.

Kamel local run

log

실행 중인 통합의 로그를 출력합니다.

Kamel 로그 my-integration

rebuild

다시 빌드되는 하나 이상의 통합 상태를 지웁니다.

Kamel rebuild my-integration

reset

현재 Camel K 설치를 재설정합니다.

Kamel reset

run

OpenShift에서 통합을 실행합니다.

kamel run MyIntegration.java

uninstall

OpenShift 클러스터에서 Camel K 설치 제거.

참고: OpenShift Camel K Operator를 사용하여 Camel K를 설치 및 제거하는 것이 좋습니다.

Kamel 설치 제거

버전

Camel-K 클라이언트 버전을 표시합니다.

Kamel 버전

추가 리소스

7.2. Camel K 모드 라인 옵션

Camel K modeline을 사용하여 런타임에 실행되는 Camel K 통합 소스 파일에 구성 옵션을 입력할 수 있습니다(예: kamel run My>-<.java ). 자세한 내용은 명령줄을 사용한 Camel K 통합 실행을 참조하십시오.

kamel run 명령에 사용할 수 있는 모든 옵션은 modeline 옵션으로 지정할 수 있습니다.

다음 표에서는 가장 일반적으로 사용되는 모드 줄 옵션 중 일부를 설명합니다.

표 7.2. Camel K 모드 라인 옵션
옵션설명

build-property

build-time 속성 또는 build-time 속성 파일을 추가합니다.

Syntax: [my-key=my-value|file:/path/to/my-conf.properties]

config

Configmap, Secret 또는 파일에서 런타임 구성 추가

구문: [configmap|secret|file]:name[/key]

- name 은 로컬 파일 경로 또는 ConfigMap/Secret 이름을 나타냅니다.

- key 는 선택적으로 필터링할 ConfigMap/Secret 키를 나타냅니다.

종속성

외부 라이브러리 포함(예: Maven 종속성)

예: dependency=mvn:org.my:app:1.0

env

통합 컨테이너에서 환경 변수를 설정합니다. 예를 들면 env=MY_ENV_VAR=my-value 입니다.

label

통합을 위해 레이블을 추가합니다. 예를 들면 label=my.company=hello 입니다.

name

통합 이름을 추가합니다. 예: name=my-integration.

open-api

OpenAPI v2 사양을 추가합니다. 예를 들면 open-api=path/to/my-hello-api.json 입니다.

profile

배포에 사용된 Camel K 특성 프로필을 설정합니다. 예: openshift

속성

런타임 속성 또는 런타임 속성 파일을 추가합니다.

Syntax: [my-key=my-value|file:/path/to/my-conf.properties])

resource

ConfigMap, Secret 또는 파일에서 런타임 리소스 추가

구문: [configmap|secret|file]:name[/key][@path]

- name 은 로컬 파일 경로 또는 ConfigMap/Secret 이름을 나타냅니다.

- key (선택 사항)는 필터링할 ConfigMap 또는 Secret 키를 나타냅니다 - 경로 (선택 사항)는 대상 경로를 나타냅니다.

trait

특성에서 Camel K 기능 또는 핵심 기능을 구성합니다. 예를 들면 trait=service.enabled=false 입니다.

법적 공지

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다. 최신 업데이트를 확인하세요.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

Theme

© 2025 Red Hat, Inc.