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


Red Hat build of Apache Camel K 1.10.5

Camel K에 대한 개발자 가이드

Red Hat build of Apache Camel K Documentation Team

초록

Red Hat build of Apache Camel K 애플리케이션을 개발, 구성 및 관리하는 데 있어서 필수 요소입니다.

머리말

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

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 용어를 교체하기 위해 최선을 다하고 있습니다. 먼저 마스터(master), 슬레이브(slave), 블랙리스트(blacklist), 화이트리스트(whitelist) 등 네 가지 용어를 교체하고 있습니다. 이러한 변경 작업은 작업 범위가 크므로 향후 여러 릴리스에 걸쳐 점차 구현할 예정입니다. 자세한 내용은 CTO Chris Wright의 메시지를 참조하십시오.

1장. Camel K 통합 관리

Camel K 명령줄 또는 개발 툴을 사용하여 Red Hat Integration - Camel K 통합을 관리할 수 있습니다. 이 장에서는 명령행에서 Camel K 통합을 관리하는 방법을 설명하고 VS Code 개발 툴 사용 방법을 설명하는 추가 리소스에 대한 링크를 제공합니다.

1.1. Camel K 통합 관리

Camel K는 명령줄에서 OpenShift 클러스터에서 Camel K 통합을 관리하기 위한 다양한 옵션을 제공합니다. 이 섹션에서는 다음 명령을 사용하는 간단한 예를 보여줍니다.

  • Kamel get
  • Kamel describe
  • Kamel 로그
  • Kamel delete

사전 요구 사항

프로세스

  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. 로그를 stdout 에 출력하려면 kamel log 명령을 입력합니다.

    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. OpenShift에 배포된 통합을 삭제하려면 kamel delete 를 입력합니다.

    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 Integration - 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을 생성합니다.

    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의 Metric 삽입 아래에 application_camel_context_uptime_seconds 를 입력하고 Run Queries 를 클릭합니다.
  4. 쿼리 추가 를 클릭하여 추가 지표를 확인합니다.

PROMETHEUS TRAIT에서 제공하는 기본 Camel 지표

일부 Camel 특정 메트릭은 즉시 사용할 수 있습니다.

이름유형설명

application_camel_message_history_processing

타이머

메시지 기록이 활성화된 경우 경로에서 각 노드의 성능 예

application_camel_route_count

게이지

추가 경로 수

application_camel_route_running_count

게이지

경로 실행 수

application_camel_[route or context]_exchanges_inflight_count

게이지

CamelContext 또는 경로에 대한 경로 진행 중 메시지

application_camel_[route 또는 context]_exchanges_total

카운터

CamelContext 또는 경로에 대해 처리되는 총 거래 수

application_camel_[route or context]_exchanges_completed_total

카운터

CamelContext 또는 경로에 대한 성공적으로 완료된 교환 수

application_camel_[route or context]_exchanges_failed_total

카운터

CamelContext 또는 경로에 대한 실패한 교환 수

application_camel_[route or context]_failuresHandled_total

카운터

CamelContext 또는 경로에 대해 처리되는 실패 수

application_camel_[route or context]_externalRedeliveries_total

카운터

CamelContext 또는 경로에 대한 외부 시작 재전송 수(예: JMS 브로커의 경우)

application_camel_context_status

게이지

Camel 컨텍스트의 상태

application_camel_context_uptime_seconds

게이지

Camel Context가 시작된 이후의 시간

application_camel_[route or exchange]처리[rate_per_second 또는 one_min_rate_per_second 또는 five_min_rate_per_second 또는 15_min_rate_per_second 또는 max_seconds 또는 mean_seconds 또는 mean_second 또는 stddev_seconds]

게이지

여러 옵션을 사용하여 메시지 또는 경로 처리 교환

application_camel_[route or exchange]_processing_seconds

summary

메시지 또는 경로 처리 메트릭 교환

2.3. 사용자 정의 Camel K 통합 메트릭 추가

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

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

사전 요구 사항

프로세스

  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 모드 라인을 사용하여 Prometheus 특성 및 Maven 종속성을 자동으로 구성
    2
    Error: 처리되지 않은 이벤트 수에 해당하는 오류 수를 측정
    3
    생성됨: 처리할 이벤트 수에 대한 메트릭
    4
    attempt: 들어오는 이벤트를 처리하기 위해 서비스 빈에 대한 호출 수를 측정
    5
    Redelivery: 이벤트를 처리하기 위한 재시도 횟수에 대한 지표
    6
    성공: 성공적으로 처리된 이벤트 수를 측정
  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 모드를 사용하여 Prometheus 및 Service.java 에 필요한 Maven 종속성을 자동으로 구성합니다.

3장. Camel K Operator 모니터링

Red Hat Integration - 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:conciled |Errored|Requeued,tag:""|PlatformError|UserError

camel_k_build_duration_seconds

HistogramVec

빌드 기간

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

결과:성공|오류

camel_k_build_recovery_attempts

히스토그램

빌드 복구 시도

0, 1, 2, 3, 4, 5

결과:성공|오류

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. Prometheus 서버가 Operator에서 노출하는 메트릭을 스크랩할 수 있도록 Operator 지표 끝점을 대상으로 하는 PodMonitor 리소스를 생성합니다.

    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분 이상 5분 이상 대기되었습니다.

경고에 대한 자세한 내용은 OpenShift 문서에서 경고 규칙 생성 을 참조하십시오.

4장. Camel K 통합 구성

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

  • 빌드 시간 - Camel Quarkus가 Camel K 통합을 빌드할 때 빌드 시간 속성을 사용합니다.
  • Runtime - Camel K 통합이 실행 중인 경우 통합은 로컬 파일, OpenShift ConfigMap 또는 Secrets의 런타임 속성 또는 구성 정보를 사용합니다.

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

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

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

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

사전 요구 사항

프로세스

  • 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
  • 두 개 이상의 build-time 속성을 제공하려면 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.banner.enabled 속성은 통합이 시작될 때 Quarkus 배너를 표시하도록 지정합니다.

    Camel 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진을 참조하십시오.

4.2. 런타임 구성 옵션 지정

실행 시 사용할 Camel K 통합에 대해 다음 런타임 구성 정보를 지정할 수 있습니다.

  • 명령줄 또는 .properties 파일에서 제공하는 런타임 속성입니다.
  • Camel K Operator가 통합을 시작할 때 런타임 속성으로 처리 및 구문 분석할 구성 값입니다. 로컬 텍스트 파일, OpenShift ConfigMap 또는 OpenShift 시크릿에 구성 값을 제공할 수 있습니다.
  • 통합이 시작될 때 속성 파일로 구문 분석되지 않는 리소스 정보입니다. 로컬 텍스트 파일, 바이너리 파일, OpenShift ConfigMap 또는 OpenShift 시크릿에 리소스 정보를 제공할 수 있습니다.

다음 kamel 실행 옵션을 사용합니다.

  • --property

    --property 옵션을 사용하여 명령줄에서 직접 런타임 속성을 지정하거나 Java *.properties 파일을 참조하여 지정합니다. Camel K Operator는 속성 파일의 내용을 실행 중인 통합 user.properties 파일에 추가합니다.

  • --config

    통합이 시작될 때 Camel K Operator가 런타임 속성으로 처리하고 구문 분석할 구성 값을 --config 옵션을 사용하여 제공합니다.

    로컬 텍스트 파일(1MiB 최대 파일 크기), ConfigMap(3MB) 또는 시크릿(3MB)을 제공할 수 있습니다. 파일은 UTF-8 리소스여야 합니다. 구체화된 파일(제공하는 파일에서 통합 시작 시 생성됨)은 정확한 위치를 제공하지 않고도 통합 코드에서 참조할 수 있도록 클래스 경로 수준에서 사용할 수 있습니다.

    참고: UTF-8이 아닌 리소스(예: 바이너리 파일)를 제공해야 하는 경우 --resource 옵션을 사용합니다.

  • --resource

    --resource 옵션을 사용하여 실행 중일 때 통합에 액세스할 리소스를 제공합니다. 로컬 텍스트 또는 바이너리 파일(1MiB 파일 크기), ConfigMap(3MB 최대값) 또는 시크릿(3MB 최대값)을 제공할 수 있습니다. 선택적으로 리소스에 대해 구체화된 파일의 대상을 지정할 수 있습니다. 예를 들어 HTTPS 연결을 설정하려면 --resource 옵션을 사용하여 지정된 위치에서 예상되는 SSL 인증서( 바이너리 파일)를 제공합니다.

    Camel K Operator는 속성에 대한 리소스를 구문 분석하지 않으며 classpath에 리소스를 추가하지 않습니다. (클래스 경로에 리소스를 추가하려면 통합에서 JVM 특성을 사용할 수 있습니다).

4.2.1. 런타임 속성 제공

명령줄에서 직접 런타임 속성을 지정하거나 kamel run 명령의 --property 옵션을 사용하여 Java *.properties 파일을 참조하여 지정할 수 있습니다.

--property 옵션과의 통합을 실행하면 Camel K Operator에서 실행 중인 통합 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 파일 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 운영자가 런타임 속성으로 처리하고 구문 분석할 구성 값을 제공할 수 있습니다. 로컬 텍스트(UTF-8) 파일, OpenShift ConfigMap 또는 OpenShift 시크릿에 구성 값을 제공할 수 있습니다.

통합을 실행할 때 Camel K Operator는 제공된 파일을 구체화하고 클래스 경로에 추가하여 정확한 위치를 제공하지 않고도 통합 코드의 구성 값을 참조할 수 있도록 합니다.

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을 지정하면 Integration이 대기하고 ConfigMap을 사용할 수 있게 된 후에만 시작됩니다.

4.2.2.3. 시크릿 지정

OpenShift 보안을 사용하여 구성 정보를 안전하게 포함할 수 있습니다. Camel K 통합에 사용할 수 있도록 시크릿을 구체화하려면 --config secret 구문을 사용할 수 있습니다.

사전 요구 사항

  • 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 또는 보안을 지정하면 Camel K Operator에서 ConfigMap 또는 Secret을 런타임 속성 파일로 구문 분석합니다. 통합 내에서 다른 런타임 속성을 참조할 때 속성을 참조할 수 있습니다.

사전 요구 사항

프로세스

  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 옵션을 지정하여 실행 중일 때 통합할 리소스를 제공할 수 있습니다. 로컬 텍스트 파일(1MiB 최대 파일 크기), ConfigMap(3MB) 또는 시크릿(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을 지정하면 Integration이 대기하고 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 보안을 참조합니다.

    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 또는 Secret을 참조하는 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. 통합의 pod를 확인하여 파일(예: input.txt)이 올바른 위치(예: tmp 디렉터리 )에 마운트되었는지 확인합니다. 예를 들어 다음 명령을 실행합니다.

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

ConfigMap 또는 보안을 생성할 때 두 개 이상의 정보 소스를 지정할 수 있습니다. 예를 들어 다음 명령은 두 소스의 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 또는 시크릿 이름 뒤에 --resource 옵션의 /key 표기법을 지정할 수 있습니다. 예를 들어 --resource configmap:my-cm/my-key 또는 --resource secret:my-secret/my-key.

--resource 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. 통합의 pod를 확인하여 하나의 파일(예: 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

종속성이 프라이빗 리포지토리에 속하는 경우 이 리포지토리를 정의해야 합니다. 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를 동적으로 생성하는 경우 -d 매개변수를 사용하여 로드할 구성 요소를 Camel K에 지시해야 합니다. 다음 코드 조각은 이를 보여줍니다.

DynamicURI.java

Copy to Clipboard Toggle word wrap
String myTopic = "purchases"
from("kafka:" + myTopic + "? ... ")
    .to(...)
...

여기에서 from URI는 런타임 시 해석되는 일부 변수에 의해 동적으로 생성됩니다. 이와 같은 경우 통합에 로드할 구성 요소와 관련 종속성을 지정해야 합니다.

5장. Kafka에 대한 Camel K 인증

Apache Kafka에 대해 Camel K를 인증할 수 있습니다.

다음 예제에서는 Kafka 항목을 설정하고 간단한 Producer/Consumer 패턴 통합에서 사용하는 방법을 보여줍니다.

5.1. Kafka 설정

Kafka를 설정하려면 다음을 수행해야 합니다.

  1. 필요한 OpenShift Operator 설치
  2. Kafka 인스턴스 생성
  3. Kafka 주제 생성

아래에 언급된 Red Hat 제품을 사용하여 Kafka를 설정합니다.

  • Red Hat AMQP(Advanced Message Queuing) 스트림 - 자체 관리형 Apache Kafka 서비스입니다. AMQ Streams는 오픈 소스 Strimzi 를 기반으로 하며 Red Hat Integration 의 일부로 포함되어 있습니다. AMQ Streams는 게시/서브스크립션 메시징 브로커를 포함하는 Apache Kafka를 기반으로 하는 분산되고 확장 가능한 스트리밍 플랫폼입니다. Kafka Connect는 Kafka 기반 시스템을 외부 시스템과 통합하는 프레임워크를 제공합니다. Kafka Connect를 사용하여 외부 시스템에서 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 - Openshift 클러스터와 Apache Kafka 인스턴스용 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 클러스터와 상호 작용할 수 있도록 OpenShift CLI 툴(oc)이 설치되어 있어야 합니다.

프로세스

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

  1. OpenShift 클러스터의 웹 콘솔에 로그인합니다.
  2. 통합을 생성할 프로젝트를 만들거나 엽니다(예: my-camel-k-kafka ).
  3. Camel K 설치에 설명된 대로 Camel K operator 및 Camel K CLI를 설치합니다.
  4. AMQ 스트림 Operator를 설치합니다.

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

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

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

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

사전 요구 사항

프로세스

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

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

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

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

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

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

    1. Operators > Installed Operators 를 선택한 다음 Red Hat Integration - AMQ Streams 를 클릭합니다.
    2. Kafka 주제 에서 Kafka 주제 생성을 클릭합니다.
    3. 주제의 이름을 입력합니다(예: test-topic ).
    4. 다른 기본값을 수락한 다음 생성을 클릭합니다.

5.1.2. OpenShift 스트림을 사용하여 Kafka 설정

Apache Kafka에 OpenShift Streams를 사용하려면 Red Hat 계정에 로그인해야 합니다.

5.1.2.1. OpenShift 스트림용 OpenShift 클러스터 준비

관리형 클라우드 서비스를 사용하려면 다음 운영자와 툴을 설치해야 합니다.

  • RHOAS(OpenShift Application Services) CLI - 터미널에서 애플리케이션 서비스를 관리할 수 있습니다.
  • Red Hat Integration - Camel K operator 설치 및 관리 Camel K - OpenShift에서 기본적으로 클라우드에서 실행되는 경량 통합 프레임워크입니다.
  • Camel K CLI 툴 - 모든 Camel K 기능에 액세스할 수 있습니다.

사전 요구 사항

  • Apache Kafka 개념에 대해 잘 알고 있습니다.
  • 올바른 액세스 수준, 프로젝트를 생성하고 운영자를 설치하는 기능, 로컬 시스템에 OpenShift 및 Apache Camel K CLI를 설치하는 기능을 사용하여 OpenShift 4.6 이상 클러스터에 액세스할 수 있습니다.
  • 명령줄에서 OpenShift 클러스터와 상호 작용할 수 있도록 OpenShift CLI 툴(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 operator 및 Camel K CLI를 설치합니다.
  5. Red Hat Integration - Camel K Operator가 설치되었는지 확인하려면 Operator > 설치된 Operator 를 클릭합니다.
5.1.2.2. RHOAS를 사용하여 Kafka 주제 설정

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

사전 요구 사항

프로세스

Kafka 주제를 설정하려면 다음을 수행합니다.

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

    oc project my-camel-k-kafka

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

    oc get csv

    그 결과 Red Hat Camel K Operator가 나열되고 성공 단계에 있음을 나타냅니다.

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

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

      rhoas 로그인

    2. kafka 인스턴스를 만듭니다(예: kafka-test ):

      rhoas kafka create kafka-test

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

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

    rhoas 상태

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

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

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

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

    rhoas kafka 주제 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

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

    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 및 Cryostat와 같은 기타 언어에는 커뮤니티 전용 지원이 있습니다.

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

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. KnativeTrackit

Knative 특성은 Knative 리소스의 주소를 자동으로 검색하고 실행 중인 통합에 삽입합니다.

전체 Knative 구성은 CAMEL_KNATIVE_CONFIGURATION에 JSON 형식으로 삽입됩니다. 그러면 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

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

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 서비스 bzipit

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

Knative Services로 통합을 실행하면 자동 확장(및 축소) 기능이 추가되지만 해당 기능은 경로가 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.annotations

map[string]string

주석이 경로에 추가됩니다. 이는 knative 서비스 관련 주석을 설정하는 데 사용할 수 있습니다. 자세한 내용은 Route Specific Annotations 를 참조하십시오.

CLI 사용 예: -t "knative-service.annotations.'haproxy.router.openshift.io/balance'=roundrobin"

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 trilit

Prometheus 특성은 Prometheus 호환 엔드포인트를 구성합니다. Prometheus Operator를 사용할 때 끝점을 자동으로 스크랩할 수 있도록 PodMonitor 리소스도 생성합니다.

메트릭은 MicroProfile Metrics를 사용하여 노출됩니다.

주의

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 리소스가 생성되었는지 여부(기본값 true).

prometheus.pod-monitor-labels

[]string

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

6.2.4. PDB traditionalit

PDB 특성을 사용하면 Integration 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

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

pdb.max-unavailable

string

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

6.2.5. 풀 시크릿 추적

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를 사용하는 경우 운영자 네임스페이스에서 system:image-puller 클러스터 역할을 통합 서비스 계정에 위임할 수 있습니다.

pull-secret.auto

bool

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

6.2.6. 라우팅 중추적

경로 특성을 사용하여 통합을 위한 OpenShift 경로 생성을 구성할 수 있습니다.

인증서 및 키 콘텐츠는 로컬 파일 시스템 또는 Openshift 시크릿 오브젝트에서 소싱될 수 있습니다. 사용자는 -secret 으로 끝나는 매개변수(예: tls-certificate- secret )를 사용하여 보안에 저장된 인증서를 참조할 수 있습니다. 시크릿으로 끝나는 매개변수는 더 높은 우선순위가 있으며 동일한 경로 매개변수가 설정된 경우 (예: tls-key -secret tls-key ) 다음 tls-key-secret 이 사용됩니다. 키와 인증서를 설정하는 권장 방법은 시크릿을 사용하여 콘텐츠를 저장하고 다음 매개변수를 사용하여 참조하는 것입니다. tls-certificate-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.annotations

map[string]string

주석이 경로에 추가됩니다. 이는 경로 특정 주석을 설정하는 데 사용할 수 있습니다. 주석 옵션은 경로별 주석 을 참조하십시오. CLI 사용 예: -t "route.annotations.'haproxy.router.openshift.io/balance'=roundrobin

route.host

string

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

route.tls-termination

string

엣지,passthrough 또는 재암호화 와 같은 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)을 사용하여 호스트 이름 검증을 수행할 수 있으므로 인프라 생성 인증서가 자동으로 확인할 수 있습니다.

자세한 내용은 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 요청을 수행할 수 있습니다. 인라인 스크립트를 사용하여 openshift 네임스페이스 및 클러스터 기본 도메인을 검색합니다. 이러한 인라인 스크립트를 지원하지 않는 쉘을 사용하는 경우 인라인 스크립트를 실제 네임스페이스 및 기본 도메인의 값으로 교체해야 합니다.

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 으로 끝나는 매개변수를 사용하여 인증서가 포함된 보안 이름을 설정합니다. 이 경로 예제 특성은 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에 TLS가 설정되고, 키와 인증서는 실행 중인 통합 Pod에 표시되어야 합니다. 이를 위해 --resource kamel 매개변수를 사용하여 통합 Pod에서 시크릿을 마운트한 다음, 실행 중인 Pod에서 이러한 인증서 파일을 참조하기 위해 일부 camel quarkus 매개변수를 사용하여 -p quarkus.http.ssl 로 시작합니다. 이 경로 예제 특성은 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는 통합 포드에 설정되고, 키와 인증서는 실행 중인 통합 포드에 표시되어야 합니다. 이를 위해 --resource kamel 매개변수를 사용하여 통합 Pod에서 시크릿을 마운트한 다음, 실행 중인 Pod에서 이러한 인증서 파일을 참조하기 위해 일부 camel quarkus 매개변수를 사용하여 -p quarkus.http.ssl 로 시작합니다. 이 경로 예제 특성은 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에 보안을 마운트한 다음 일부 camel quarkus 매개변수를 사용하여 실행 중인 Pod에서 이러한 인증서 파일을 참조합니다. 이 매개변수는 -p quarkus.ssl.certificate 로 시작합니다. 이 경로 예제 특성은 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 traditionalit

서비스 특성은 동일한 네임스페이스의 다른 애플리케이션(또는 통합)에서 액세스할 수 있도록 Service 리소스와의 통합을 노출합니다.

통합이 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

서비스를 NodePort(기본 false)로 노출할 수 있습니다.

6.3. Camel K 플랫폼 특성

6.3.1. builder trit

빌더 특성은 내부적으로 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 빌드 포드)에 대한 자세한 로깅을 활성화합니다. 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

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

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. Cameleekit

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

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

주의

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

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. 종속 항목 추적

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. 배포자 traceit

배포자 특성은 통합을 배포할 고급 리소스 유형을 명시적으로 선택하는 데 사용할 수 있습니다.

이 특성은 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. 배포 트립트

Deployment 특성은 클러스터에서 통합이 실행되도록 하는 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. 환경 추적

환경 특성은 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 trit

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 trit

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에 연결할 수 있도록 원격 디버깅을 활성화합니다.

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 classpath 사용)

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 traditionalit

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. nodeAffinityAffinityAffinityit

NodeAffinity 특성을 사용하면 다음 경로를 통해 통합 Pod를 예약할 수 있는 노드를 제한할 수 있습니다.

  • 노드의 라벨 또는 Pod 간 유사성 및 유사성 방지를 사용합니다.
  • 노드에서 이미 실행 중인 Pod의 레이블을 기반으로 합니다.

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

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

6.3.11.1. 설정

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

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

다음 구성 옵션을 사용할 수 있습니다.

속성유형설명

affinity.enabled

bool

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

affinity.pod-affinity

bool

항상 동일한 노드에 통합의 여러 복제본을 공동 배치합니다(기본값 false).

affinity.pod-anti-affinity

bool

동일한 노드에 통합의 여러 복제본을 공동 배치하지 마십시오(기본값 false).

affinity.node-affinity-labels

[]string

노드의 라벨에 따라 통합 Pod를 예약할 수 있는 노드 세트를 정의합니다.

affinity.pod-affinity-labels

[]string

통합 Pod를 함께 배치해야 하는 Pod 세트(즉, 지정된 네임스페이스와 관련하여 라벨 선택기와 일치하는 항목)를 정의합니다.

affinity.pod-anti-affinity-labels

[]string

통합 Pod를 함께 배치해서는 안 되는 Pod 집합(즉, 지정된 네임스페이스와 상대적인 라벨 선택기와 일치)을 정의합니다.

6.3.11.2. 예
  • 기본 제공 노드 레이블 kubernetes.io/hostname 을 사용하여 특정 노드에서 통합 Pod를 예약하려면 다음을 수행합니다.

    Copy to Clipboard Toggle word wrap
    $ kamel run -t affinity.node-affinity-labels="kubernetes.io/hostname in(node-66-50.hosted.k8s.tld)" ...
  • 노드당 단일 통합 Pod를 예약하려면( Exists Operator 사용)

    Copy to Clipboard Toggle word wrap
    $ kamel run -t affinity.pod-anti-affinity-labels="camel.apache.org/integration" ...
  • 통합 Pod를 다른 통합 Pod와 공동 배치하려면 다음을 수행합니다.

    Copy to Clipboard Toggle word wrap
    $ kamel run -t affinity.pod-affinity-labels="camel.apache.org/integration in(it1, it2)" ...

*-labels 옵션은 라벨 선택기 의 요구 사항을 따릅니다. 다중 평가를 받을 수 있습니다. 그런 다음 요구 사항 목록은 ANDed(예: 노드당 단일 통합 Pod를 예약하고 Camel K 운영자 Pod와 함께 배치되지 않음)가 됩니다.

Copy to Clipboard Toggle word wrap
$ kamel run -t affinity.pod-anti-affinity-labels="camel.apache.org/integration" -t affinity.pod-anti-affinity-labels="camel.apache.org/component=operator" ...

자세한 내용은 노드에 Pod 할당에 대한 공식 Kubernetes 설명서에서 확인할 수 있습니다.

6.3.12. OpenAPI functionalit

OpenAPI DSL 특성은 내부적으로 OpenAPI 사양에서 통합을 생성할 수 있도록 사용됩니다.

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

주의

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

6.3.12.1. 설정

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

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

다음 구성 옵션을 사용할 수 있습니다.

속성유형설명

openAPI.enabled

bool

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

6.3.13. 소유자 트래킷

소유자 특성은 생성된 모든 리소스가 통합에 속하고 이러한 소유 리소스에 대한 통합에서 주석 및 레이블을 전송합니다.

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

주의

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

6.3.13.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.14. 플랫폼trait

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

플랫폼이 누락된 경우 기본 플랫폼을 생성할 수 있습니다. 이 기능은 플랫폼에 대한 사용자 지정 구성을 제공할 필요가 없는 상황에서 특히 유용합니다(예: 포함된 컨테이너 이미지 레지스트리가 있으므로 OpenShift에서 기본 설정이 작동합니다).

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

주의

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

6.3.14.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

글로벌 연산자(기본값 true)의 경우 플랫폼을 전역적으로 생성해야 하는지 여부를 나타냅니다.

platform.auto

bool

기본 플랫폼을 생성할 수 있는 경우 환경에서 자동으로 감지합니다(OpenShift에서만 생성됨).

6.3.15. Quarkuseekit

Quarkus 특성은 Quarkus 런타임을 활성화합니다.

기본적으로 활성화되어 있습니다.

참고

네이티브 실행 파일(예: package-type=native )로 컴파일하는 것은 YAML 통합뿐만 아니라 kamelets에만 지원됩니다. 또한 최소 4GiB의 메모리가 필요하므로, Operator Pod 또는 (플랫폼에 구성된 빌드 전략에 따라) 기본 빌드를 실행하는 Pod에 사용 가능한 메모리가 충분해야 합니다.

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

주의

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

6.3.15.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 또는 네이티브 (기본 fast-jar)입니다. fast-jar native 가 모두 지정된 경우, 기본 키트가 준비한 fast-jar 보다 우선하여 두 개의 IntegrationKit 리소스가 생성됩니다. 이 순서는 통합을 위한 현재 키트의 해결에 영향을 미칩니다. 첫 번째 패키지 유형에 해당하는 키트는 통합과 일치하는 기존 키트가 없는 경우 통합에 할당됩니다.

6.3.15.2. 지원되는 Camel 구성 요소

Camel K는 Camel Quarkus Extensions로 즉시 사용할 수 있는 Camel 구성 요소만 지원합니다.

6.3.15.3. 예
6.3.15.3.1. 네이티브 통합에 자동 롤아웃 배포

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

두 세계의 최고를 결합하기 위해 통합을 실행할 때 기존 빌드와 네이티브 빌드를 동시에 실행하도록 Quarkus 특성을 구성할 수 있습니다. 예를 들면 다음과 같습니다.

Copy to Clipboard Toggle word wrap
$ kamel run -t quarkus.package-type=fast-jar -t quarkus.package-type=native ...

통합 Pod는 fast-jar 빌드가 완료되면 즉시 실행되며 네이티브 이미지에 대한 롤아웃 배포는 네이티브 빌드가 완료되면 서비스 중단 없이 트리거됩니다.

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. 지원되는 명령

다음 키를 확인합니다.

기호설명

지원됨

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

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

bind

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

kamel bind telegram-source -p "source.authorizationToken=The Token" channel:mychannel

완료

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

Kamel 완료 bash

debug

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

Kamel debug my-integration

삭제

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

Kamel delete my-integration

describe

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

Kamel은 통합 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 로컬 실행

log

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

Kamel 로그 my-integration

승격

한 네임스페이스에서 다른 네임스페이스로 통합을 이동할 수 있습니다.

Kamel promote

다시 빌드

하나 이상의 통합 상태를 지워 다시 빌드할 수 있습니다.

Kamel rebuild my-integration

reset

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

Kamel reset

run

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

kamel run MyIntegration.java

설치 제거

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

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

Kamel uninstall

version

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

Kamel 버전

추가 리소스

7.2. Camel K 모드 옵션

Camel K 모드를 사용하여 런타임에 실행되는 Camel K 통합 소스 파일에서 구성 옵션을 입력할 수 있습니다(예: kamel run MyIntegration.java ). 자세한 내용은 Modeline을 사용하여 Camel K 통합 실행을 참조하십시오.

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

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

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

build-property

빌드 시간 속성 또는 빌드 시간 속성 파일을 추가합니다.

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

config

구성 맵, 시크릿 또는 파일에서 런타임 구성 추가

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

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

- (선택 사항)는 필터링할 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 trait 프로필을 설정합니다. 예: openshift

속성

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

구문: [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 © 2024 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.