Red Hat Camel K is deprecated
Red Hat Camel K is deprecated and the End of Life date for this product is June 30, 2025. For help migrating to the current go-to solution, Red Hat build of Apache Camel, see the Migration Guide.4.2. 指定运行时配置选项
您可以为 Camel K 集成指定在运行时配置信息,以便在其运行时配置信息:
- 您在命令行或 .properties 文件中提供的运行时属性。
- 集成启动时,您希望 Camel K 操作器处理并解析为运行时属性的配置值。您可以在本地文本文件、OpenShift ConfigMap 或 OpenShift secret 中提供配置值。
- 集成启动时没有解析为属性文件的资源信息。您可以在本地文本文件、二进制文件、OpenShift ConfigMap 或 OpenShift secret 中提供资源信息。
使用以下 kamel 运行
选项:
--property
使用
--property
选项可直接在命令行中指定运行时属性,或者引用 Java Swarmproperties
文件。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 operator 不会解析属性的资源,且不会将资源添加到 classpath 中。(如果您想要将资源添加到 classpath 中,您可以在集成中使用 JVM 特征)。
4.2.1. 提供运行时属性
您可以直接在命令行中指定运行时属性,或使用 kamel run
命令的 --property
选项引用 Java Swarm properties
文件。
当您运行与 --property
选项的集成时,Camel K operator 会将属性附加到正在运行的集成的 user.properties
文件中。
4.2.1.1. 在命令行中提供运行时属性
您可以在运行时在命令行中配置 Camel K 集成的属性。当使用属性占位符(如 {{my.message}}
)在集成中定义属性时,您可以在命令行中指定属性值,如 --property my.message=Hello
。您可以在单个命令中指定多个属性。
先决条件
流程
开发使用属性的 Camel 集成。以下简单示例包含
{{my.message}}
属性占位符:... - from: uri: "timer:tick" steps: - set-body: constant: "{{my.message}}" - to: "log:info" ...
使用以下语法运行集成,在运行时设置属性值:
kamel run --property <property>=<value> <integration>
另外,您可以使用
--p
缩写表示法(使用--property
的位置):kamel run --property <property>=<value> <integration>
例如:
kamel run --property my.message="Hola Mundo" HelloCamelK.java --dev
或者
kamel run --p my.message="Hola Mundo" HelloCamelK.java --dev
以下是示例结果:
... [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
。
前提条件
流程
创建集成属性文件。以下示例来自名为
my.properties
的文件:my.key.1=hello my.key.2=world
开发使用属性文件中定义的属性的 Camel 集成。以下示例
Routing.java
集成使用{{my.key.1}}
和{{my.key.2=world}}
属性占位符: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}}"); } }
使用以下语法运行集成来引用属性文件:
kamel run --property file:<my-file.properties> <integration>
另外,您可以使用
--p
缩写表示法(使用--property
的位置):kamel run --p file:<my-file.properties> <integration>
例如:
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 会对其进行处理,并将其添加到类路径中,以便您可以引用集成代码中的配置值,而无需提供准确的位置。
4.2.2.1. 指定文本文件
如果您有一个包含配置值的 UTF-8 文本文件,您可以使用 --config file:/path/to/file
选项使该文件可用(具有相同文件名)在运行的集成的 classpath 上。
先决条件
- 设置 Camel K 开发环境
您有一个或多个包含配置值的文本文件。
例如,创建一个名为
resources-data.txt
的文件,其中包含以下行:the file body
流程
创建一个 Camel K 集成来引用包含配置值的文本文件。
例如,以下集成(
ConfigFileRoute.java
)预期在 classpath 在运行时提供resources-data.txt
文件:import org.apache.camel.builder.RouteBuilder; public class ConfigFileRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:config-file") .setBody() .simple("resource:classpath:resources-data.txt") .log("resource file content is: ${body}"); } }
运行集成并使用
--config
选项指定文本文件,使其可用于正在运行的集成。例如:kamel run --config file:resources-data.txt ConfigFileRoute.java --dev
另外,您可以通过重复添加
--config
选项来提供多个文件,例如: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:
oc create configmap my-cm --from-literal=my-configmap-key="configmap content"
流程
创建引用 ConfigMap 的 Camel K 集成。
例如,以下集成(名为
ConfigConfigmapRoute.java
)在名为my-cm
的 ConfigMap 中引用名为my-configmap-key
的配置值。import org.apache.camel.builder.RouteBuilder; public class ConfigConfigmapRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:configmap") .setBody() .simple("resource:classpath:my-configmap-key") .log("configmap content is: ${body}"); } }
运行集成并使用
--config
选项来定义 ConfigMap 文件,使其可用于正在运行的集成。例如:kamel run --config configmap:my-cm ConfigConfigmapRoute.java --dev
当集成启动时,Camel K operator 会使用 ConfigMap 的内容挂载 OpenShift 卷。
注: 如果您指定了集群中还不可用的 ConfigMap,则集成会在 ConfigMap 变为可用后等待并启动。
4.2.2.3. 指定 secret
您可以使用 OpenShift Secret 安全地包含配置信息。要对 secret 进行编码,以便可供 Camel K 集成使用,您可以使用 --config secret
语法。
先决条件
- 设置 Camel K 开发环境
在 OpenShift 集群中存储了一个或多个 Secret。
例如,您可以使用以下命令创建 Secret:
oc create secret generic my-sec --from-literal=my-secret-key="very top secret"
流程
创建引用 ConfigMap 的 Camel K 集成。
例如,以下集成(名为
ConfigSecretRoute.java
)引用位于名为my-sec
的 Secret 中的my-secret
属性:import org.apache.camel.builder.RouteBuilder; public class ConfigSecretRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:secret") .setBody() .simple("resource:classpath:my-secret") .log("secret content is: ${body}"); } }
运行集成并使用
--config
选项定义 Secret,使其可用于正在运行的集成。例如: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 解析为运行时属性文件。在集成中,您可以在引用任何其他运行时属性时引用属性。
前提条件
流程
创建包含属性的文本文件。
例如,创建一个名为
my.properties
的文件,其中包含以下属性:my.key.1=hello my.key.2=world
根据属性文件创建 ConfigMap 或 Secret。
例如,使用以下命令从 my.properties 文件创建 secret:
oc create secret generic my-sec --from-file my.properties
在集成中,请参阅 Secret 中定义的属性。
例如,以下集成(名为
ConfigSecretPropertyRoute.java
)引用my.key.1
和my.key.2
属性:import org.apache.camel.builder.RouteBuilder; public class ConfigSecretPropertyRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:secret") .routeId("secret") .log("{{my.key.1}} {{my.key.2}}"); } }
运行集成并使用
--config
选项指定包含my.key.1
和my.key.2
属性的 Secret。例如:
kamel run --config secret:my-sec ConfigSecretPropertyRoute.java --dev
4.2.2.5. 过滤从 ConfigMap 或 Secret 获取的配置值
ConfigMap 和 Secret 可以保存多个源。例如,以下命令从两个源创建一个 secret (my-sec-multi
):
oc create secret generic my-sec-multi --from-literal=my-secret-key="very top secret" --from-literal=my-secret-key-2="even more secret"
您可以使用 --config configmap
或 --config secret
选项后使用 /key
表示法来限制集成检索到一个源的信息数量。
先决条件
- 设置 Camel K 开发环境
- 您有一个包含多个源的 ConfigMap 或 Secret。
流程
创建一个集成,使用来自 ConfigMap 或 Secret 中的一个源的配置值。
例如,以下集成(
ConfigSecretKeyRoute.java
)仅使用来自my-sec-multi
secret 中的一个源的属性。import org.apache.camel.builder.RouteBuilder; public class ConfigSecretKeyRoute extends RouteBuilder { @Override public void configure() throws Exception { from("timer:secret") .setBody() .simple("resource:classpath:my-secret-key-2") .log("secret content is: ${body}"); } }
使用
--config secret
选项和/key
表示法运行集成。例如:
kamel run --config secret:my-sec-multi/my-secret-key-2 ConfigSecretKeyRoute.java --dev
检查集成 pod,以验证是否只挂载指定的源(如
my-secret-key-
2)。例如,运行以下命令来列出 pod 的所有卷:
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 operator 将材料化文件复制到 /etc/camel/resources/
目录中。另外,您可以指定不同的目标目录,如 为资源指定目标路径 中所述。
先决条件
- 设置 Camel K 开发环境
- 您有一个或多个包含配置属性的文本文件。
流程
创建一个 Camel K 集成,它会读取您提供的文件内容。
例如,以下集成(
ResourceFileBinaryRoute.java
)解压缩并读取resources-data.zip
文件:import org.apache.camel.builder.RouteBuilder; public class ResourceFileBinaryRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/etc/camel/resources/?fileName=resources-data.zip&noop=true&idempotent=false") .unmarshal().zipFile() .log("resource file unzipped content is: ${body}"); } }
运行集成并使用
--resource
选项将文件复制到默认目标目录(/etc/camel/resources/
)。例如:kamel run --resource file:resources-data.zip ResourceFileBinaryRoute.java -d camel-zipfile --dev
注: 如果您指定二进制文件,则会在集成中创建并解码文件内容的二进制表示。
另外,您可以通过重复添加
--resource
选项来提供多个资源,例如: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&
gt; 选项。
先决条件
- 设置 Camel K 开发环境
在 OpenShift 集群中存储了一个或多个 ConfigMap 文件。例如,您可以使用以下命令创建 ConfigMap:
oc create configmap my-cm --from-literal=my-configmap-key="configmap content"
流程
创建 Camel K 集成来引用 OpenShift 集群上存储的 ConfigMap。
例如,以下集成(名为
ResourceConfigmapRoute.java
)引用名为my-cm
的 ConfigMap,其中包含my-configmap-key
。import org.apache.camel.builder.RouteBuilder; public class ResourceConfigmapRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/etc/camel/resources/my-cm/?fileName=my-configmap-key&noop=true&idempotent=false") .log("resource file content is: ${body}"); } }
运行集成并使用
--resource
选项以对默认/etc/camel/resources/
目录中的 ConfigMap 文件进行解析,使其可用于正在运行的集成。例如:
kamel run --resource configmap:my-cm ResourceConfigmapRoute.java --dev
当集成启动时,Camel K operator 会使用 ConfigMap 的内容(如
my-configmap-key
)挂载卷。
注: 如果您指定了集群中还不可用的 ConfigMap,则集成会在 ConfigMap 变为可用后等待并启动。
4.2.3.3. 将 Secret 指定为资源
如果您有一个包含配置信息的 OpenShift Secret,并且您需要将它化为一个或多个集成的资源,请使用 --resource <secret>
; 语法。
先决条件
- 设置 Camel K 开发环境
在 OpenShift 集群中存储了一个或多个 Secret 文件。例如,您可以使用以下命令创建 Secret:
oc create secret generic my-sec --from-literal=my-secret-key="very top secret"
流程
创建一个 Camel K 集成来引用存储在 OpenShift 集群上的 Secret。
例如,以下集成(名为
ResourceSecretRoute.java
)引用my-sec
Secret:import org.apache.camel.builder.RouteBuilder; public class ResourceSecretRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/etc/camel/resources/my-sec/?fileName=my-secret-key&noop=true&idempotent=false") .log("resource file content is: ${body}"); } }
运行集成并使用
--resource
选项,在默认/etc/camel/resources/
目录中对 Secret 进行材料化,使其可用于正在运行的集成。例如:
kamel run --resource secret:my-sec ResourceSecretRoute.java --dev
当集成启动时,Camel K operator 会使用 Secret 的内容(如
my-sec
)挂载卷。
注: 如果您指定了集群中还不可用的 Secret,则集成会在 Secret 变为可用后等待并启动。
4.2.3.4. 为资源指定目标路径
/etc/camel/resources/
目录是挂载使用 --resource
选项指定的资源的默认位置。如果您需要指定要在其上挂载资源的不同目录,请使用 --resource @path
语法。
先决条件
- 设置 Camel K 开发环境
- 您有一个包含一个或多个配置属性的文件、ConfigMap 或 Secret。
流程
创建一个 Camel K 集成来引用包含配置属性的文件、ConfigMap 或 Secret。例如,以下集成(名为
ResourceFileLocationRoute.java
)引用myprops
文件:import org.apache.camel.builder.RouteBuilder; public class ResourceFileLocationRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/tmp/?fileName=input.txt&noop=true&idempotent=false") .log("resource file content is: ${body}"); } }
运行集成并使用带
@path
语法的--resource
选项,并指定挂载资源内容的位置(文件、ConfigMap 或 Secret):例如,以下命令使用
/tmp
目录挂载input.txt
文件:kamel run --resource file:resources-data.txt@/tmp/input.txt ResourceFileLocationRoute.java --dev
检查集成的 pod,以验证文件(如
input.txt
)是否已挂载到正确的位置(例如,在tmp
目录中)。例如,运行以下命令:oc exec <pod-name> -- cat /tmp/input.txt
4.2.3.5. 过滤 ConfigMap 或 Secret 数据
创建 ConfigMap 或 Secret 时,您可以指定多个信息源。例如,以下命令会从两个源创建一个 ConfigMap (名为 my-cm-multi
):
oc create configmap my-cm-multi --from-literal=my-configmap-key="configmap content" --from-literal=my-configmap-key-2="another content"
当您运行与 --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 表示法来限制集成检索到一个资源的信息数量。
先决条件
- 设置 Camel K 开发环境
- 您有一个 ConfigMap 或包含来自多个源的值的 Secret。
流程
创建使用 ConfigMap 或 Secret 中的一个资源的配置值的集成。例如,以下集成(名为
ResourceConfigmapKeyLocationRoute.java
)引用my-cm-multi
ConfigMap:import org.apache.camel.builder.RouteBuilder; public class ResourceConfigmapKeyLocationRoute extends RouteBuilder { @Override public void configure() throws Exception { from("file:/tmp/app/data/?fileName=my-configmap-key-2&noop=true&idempotent=false") .log("resource file content is: ${body} consumed from ${header.CamelFileName}"); } }
运行集成并使用带
@path
语法的--resource
选项,并指定挂载源内容的位置(文件、ConfigMap 或 Secret):例如,以下命令指定只使用 ConfigMap 中包含的源(
my-configmap-key-2@
)之一,并使用/tmp/app/data
目录挂载它:kamel run --resource configmap:my-cm-multi/my-configmap-key-2@/tmp/app/data ResourceConfigmapKeyLocationRoute.java --dev
检查集成的 pod,以验证只有一个文件(如
my-configmap-key-2
)是否已挂载到正确的位置(例如,在/tmp/app/data
目录中)。例如,运行以下命令:oc exec <pod-name> -- cat /tmp/app/data/my-configmap-key-2