4.2. 指定运行时配置选项


您可以为 Camel K 集成指定以下运行时配置信息,以便在它运行时使用:

  • 您在命令行或 .properties 文件中提供的运行时属性。
  • 集成启动时您希望 Camel K 操作器处理并作为运行时属性解析的配置值。您可以在本地文本文件、OpenShift ConfigMap 或 OpenShift secret 中提供配置值。
  • 集成启动时没有作为属性文件解析的资源信息。您可以在本地文本文件、二进制文件、OpenShift ConfigMap 或 OpenShift secret 中提供资源信息。

使用以下 kamel run 选项:

  • --property

    使用 --property 选项直接在命令行中指定运行时属性,或者引用 Java If properties 文件。Camel K operator 将属性文件的内容附加到正在运行的集成的 user.properties 文件中。

  • --config

    使用 --config 选项提供您希望 Camel K 操作器在集成启动时处理并作为运行时属性的配置值。

    您可以提供一个本地文本文件(1 MiB 最大文件大小)、ConfigMap (3MB)或 Secret (3MB)。该文件必须是 UTF-8 资源。材料化文件(在您从您提供的文件集成启动时生成的)在类路径级别上提供,以便您可在集成代码中引用它,而无需提供精确的位置。

    注: 如果您需要提供非 UTF-8 资源(例如,二进制文件),请使用 --resource 选项。

  • --resource

    使用 --resource 选项为集成提供在运行时访问的资源。您可以提供本地文本或二进制文件(1 MiB 最大文件大小)、ConfigMap (最大 3MB)或 Secret (最大 3MB)。另外,您可以指定为资源分类的文件目的地。例如,如果要设置 HTTPS 连接,请使用 --resource 选项提供指定位置中预期的 SSL 证书(二进制文件)。

    Camel K 操作器不会解析属性的资源,且不会将资源添加到 classpath 中。(如果您想要将资源添加到 classpath 中,您可以在集成中使用 JVM 特征 )。

4.2.1. 提供运行时属性

您可以在命令行中直接指定运行时属性,或使用 kamel run 命令的 --property 选项直接指定 Java If 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 secret 中提供配置值。

运行集成时,Camel K operator 会对提供的文件进行分类,并将其添加到 classpath 中,以便您可以引用集成代码中的配置值,而无需提供准确的位置。

4.2.2.1. 指定文本文件

如果您有包含配置值的 UTF-8 文本文件,您可以使用 --config file:/path/to/file 选项使文件在运行的集成类路径上可用(具有相同文件名)。

先决条件

  • 设置 Camel K 开发环境
  • 您有一个或者多个(非二进制)文本文件,其中包含配置值。

    例如,创建一个名为 resources-data.txt 的文件,其中包含以下行:

    Copy to Clipboard Toggle word wrap
    the file body

流程

  1. 创建一个 Camel K 集成来引用包含配置值的文本文件。

    例如,以下集成(ConfigFileRoute.java)要求 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,且您需要对 ConfigMap 进行组织,以便 Camel K 集成可用,请使用 --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. 指定 Secret

您可以使用 OpenShift Secret 来安全地包含配置信息。要对 secret 进行资料化,使其可用于 Camel K 集成,您可以使用 --config secret 语法。

先决条件

  • 设置 Camel K 开发环境
  • 您已在 OpenShift 集群中存储了一个或多个 Secret。

    例如,您可以使用以下命令创建 Secret:

    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 的 Secret 中的 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 选项来定位 Secret,使其可用于正在运行的集成。例如:

    Copy to Clipboard Toggle word wrap
    kamel run --config secret:my-sec ConfigSecretRoute.java --dev

    集成启动时,Camel K operator 会使用 Secret 的内容挂载 OpenShift 卷。

4.2.2.4. 引用 ConfigMap 或 Secret 中包含的属性

当您运行集成并使用 --config 选项指定 ConfigMap 或 Secret 时,Camel K operator 会解析 ConfigMap 或 Secret 作为运行时属性文件。在集成中,您可以在引用任何其他运行时属性时引用属性。

流程

  1. 创建包含属性的文本文件。

    例如,创建一个名为 my.properties 的文件,其中包含以下属性:

    Copy to Clipboard Toggle word wrap
    my.key.1=hello
    my.key.2=world
  2. 根据属性文件创建 ConfigMap 或 Secret。

    例如,使用以下命令从 my.properties 文件创建 secret:

    Copy to Clipboard Toggle word wrap
    oc create secret generic my-sec --from-file my.properties
  3. 在集成中,请参阅 Secret 中定义的属性。

    例如,以下集成(名为 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 获取的配置值

ConfigMap 和 Secret 可以保存多个源。例如,以下命令从两个源创建一个 secret (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 secret 选项中使用 /key 标记来限制集成检索的信息数量。

先决条件

流程

  1. 创建一个集成,它只使用来自 ConfigMap 或 Secret 中的一个源的配置值。

    例如,以下集成(ConfigSecretKeyRoute.java)仅使用来自 my-sec-multi secret 中的一个源的属性。

    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 选项,为集成提供资源。您可以指定一个本地文本文件(1 MiB 最大文件大小)、ConfigMap (3MB)或 Secret (3MB)。您可以选择指定资源分类的文件目的地。例如,如果要设置 HTTPS 连接,您可以使用 --resource 选项,因为您必须提供一个 SSL 证书,它是已知位置中预期的二进制文件。

当您使用 --resource 选项时,Camel K operator 不会解析查找运行时属性的资源,且不会将资源添加到 classpath 中。(如果您想要将资源添加到 classpath 中,您可以使用 JVM 特征

4.2.3.1. 将文本或二进制文件指定为资源

如果您有包含配置值的文本或二进制文件,您可以使用 --resource file:/path/to/file 选项来定位该文件。默认情况下,Camel K 操作器将材料化文件复制到 /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. 创建一个 Camel K 集成来引用存储在 OpenShift 集群上的 ConfigMap。

    例如,以下集成(名为 ResourceConfigmapRoute.java)引用名为 my-cm 的 ConfigMap,其中包含 my-configmap-key

    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 选项将 ConfigMap 文件整理到默认的 /etc/camel/resources/ 目录中,以便其可用于正在运行的集成。

    例如:

    Copy to Clipboard Toggle word wrap
    kamel run --resource configmap:my-cm ResourceConfigmapRoute.java --dev

    集成启动时,Camel K 操作器使用 ConfigMap 的内容挂载卷(如 my-configmap-key)。

注: 如果您指定了集群中还没有可用的 ConfigMap,则 Integration 只会在 ConfigMap 可用后等待并启动。

4.2.3.3. 将 Secret 指定为资源

如果您有包含配置信息的 OpenShift Secret,并且您需要将它作为可用于一个或多个集成的资源进行定位,请使用 --resource <secret&gt; 语法。

先决条件

  • 设置 Camel K 开发环境
  • 在 OpenShift 集群中存储了一个或多个 Secret 文件。例如,您可以使用以下命令创建 Secret:

    Copy to Clipboard Toggle word wrap
    oc create secret generic my-sec --from-literal=my-secret-key="very top secret"

流程

  1. 创建一个 Camel K 集成来引用存储在 OpenShift 集群中的 Secret。

    例如,以下集成(名为 ResourceSecretRoute.java)引用了 my-sec Secret:

    Copy to Clipboard Toggle word wrap
    import org.apache.camel.builder.RouteBuilder;
    
    public class ResourceSecretRoute extends RouteBuilder {
      @Override
      public void configure() throws Exception {
    
          from("file:/etc/camel/resources/my-sec/?fileName=my-secret-key&noop=true&idempotent=false")
              .log("resource file content is: ${body}");
    
      }
    }
  2. 运行集成并使用 --resource 选项将 Secret 整理到默认的 /etc/camel/resources/ 目录中,使其可用于正在运行的集成。

    例如:

    Copy to Clipboard Toggle word wrap
    kamel run --resource secret:my-sec ResourceSecretRoute.java --dev

    当集成启动时,Camel K operator 会挂载带有 Secret 内容的卷(如 my-sec)。

注: 如果您指定了集群中还没有可用的 Secret,则 Integration 只会在 Secret 可用时等待并启动。

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 或 Secret 时,您可以指定多个信息源。例如,以下命令从两个源创建一个 ConfigMap (名为 my-cm-multi):

Copy to Clipboard Toggle word wrap
oc create configmap my-cm-multi --from-literal=my-configmap-key="configmap content" --from-literal=my-configmap-key-2="another content"

当您运行与 --resource 选项集成时,会使用多个源创建的 ConfigMap 或 Secret,默认是两个源。

如果要限制从 ConfigMap 或 Secret 恢复的信息数量,您可以在 ConfigMap 或 Secret 名称后指定 --resource 选项的 /key 标记。例如,-- resource configmap:my-cm/my-key--resource secret:my-secret/my-key

您可以在 --resource configmap--resource secret 选项后使用 /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
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat, Inc.