使用配置映射
了解如何在 Code Engine中使用 configmap。 在 Code Engine中,可以使用环境变量将信息作为键/值对存储在可供应用程序,作业或函数工作负载使用的配置映射中。
什么是 configmap,为什么我要使用它们?
在 Code Engine中,私钥和 configmap 都是键/值对。 当映射到环境变量时,将设置 NAME=VALUE
关系,以使环境变量的名称对应于这些映射中每个条目的“键”,并且环境变量的值是该键的“值”。
configmap 提供了一种方法,用于将非敏感数据信息包含到部署中。 通过将 configmap 中的值作为环境变量进行引用,可以将特定信息与部署分离,并使应用程序,作业或功能可移植。 configmap 包含键/值对中的信息。
由于私钥和配置映射是类似的实体 (除了私钥更安全地存储),因此您与私钥和配置映射进行交互和使用的方式也类似。 要了解有关私钥的更多信息,请参阅 使用私钥。
我看到了我没有创建的配置映射。 我可以删除它们吗?
否。Code Engine 会自动在名称空间中创建 istio-ca-root
和 kube-root-ca
配置映射。Code Engine 在内部使用这些 configmap。 如果删除这些配置映射,那么 Code Engine 会自动重新创建这些配置映射。
创建 ConfigMap
使用 Code Engine创建 configmap。
从控制台创建 configmap
使用 Code Engine 控制台创建 configmap。
开始之前,请 创建项目。
- 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
- 在“概述”页面中,单击 密钥和配置映射。
- 在“私钥和配置映射”页面中,单击 创建 以创建配置映射。
- 从“创建私钥或配置映射”页面,完成以下步骤:
- 单击 Configmap,然后单击 下一步。
- 提供名称; 例如,
myconfigmap
。 - 单击 添加键/值对。 为此配置映射指定一个或多个“键/值”对。 例如,将一个键指定为值为
value1
的key1
,并将另一个键指定为值为value2
的key2
。 请注意,您可以在一行或多行上指定值。 您为密钥选择的名称不需要与环境变量的名称相同。 - 单击 创建 以创建 configmap。
现在,您的 configmap 是从控制台创建的,请转至 Secrets and configmaps 页面以查看已定义的私钥和 configmap 的列表。 您可以应用过滤器来定制列表以满足您的需求。
使用 CLI 创建 configmap
使用 Code Engine CLI 创建 configmap。
您可以通过多种方式填充配置映射。 您可以通过直接在命令行上指定“键/值”对来填充该文件,也可以指向文件。
准备工作
- 设置 Code Engine CLI 环境。
- 创建和使用项目。
从文件创建 (或更新) configmap 时,格式必须为 --from-file FILE
或 --from-file KEY=FILE
。 在 Code Engine中,使用文件指定 configmap 值时,文件中的 所有 内容将成为键/值对的值。 使用选项格式 --from-file KEY=FILE
时,KEY
是应用程序,作业或函数工作负载已知的环境变量的名称。
使用选项格式 --from-file FILE
时,FILE
是作业,应用程序或函数已知的环境变量的名称。 如果文件包含一个或多个“键/值”对,请使用 --from-env-file
选项为指定文件中的每个“键/值”对添加环境变量。 将忽略指定文件中的任何空行或以 #
开头的行。
使用 CLI 创建 configmap
通过下列其中一种方法使用 configmap create
命令创建 configmap,
-
使用
KEY=VALUE
格式的--from-literal
选项直接在命令行上创建 configmap。 例如ibmcloud ce configmap create --name myliteralconfigmap --from-literal TARGET=Sunshine
-
使用
--from-file
选项来创建 configmap 以指向文件。 通过使用此选项,文件的所有内容都将成为键/值对的值。 对于此示例,请使用名为colors.txt
的文件,其中包含文本blue, green, red
。-
以下示例将
--from-file KEY=FILE
格式与configmap create
命令配合使用:ibmcloud ce configmap create --name mycolorconfigmap --from-file TARGET=colors.txt
-
以下示例命令将
--from-file FILE
格式与configmap create
命令配合使用。 在此示例中,TARGET
(无扩展名) 是文件的名称,与示例myjob
作业已知的环境变量的名称相同。ibmcloud ce configmap create --name mycolorconfigmap2 --from-file TARGET
-
-
通过使用
--from-env-file
选项来创建 configmap,以指向包含与格式KEY=VALUE
匹配的一行或多行的文件。 指定文件中的每行都将添加为键/值对。 将忽略指定文件中的任何空行或以#
开头的行。 对于此示例,请使用名为colors_multi.txt
的文件,其中包含键/值对:color1=yellow
,color2=orange
和color3=purple
。ibmcloud ce configmap create --name mycolorconfigmapmulti --from-env-file colors_multi.txt
使用 CLI 列出配置映射
既然已创建 configmap,请使用 configmap list
命令列出项目中的所有 configmap,或者使用 configmap get
命令显示有关特定 configmap 的详细信息。 例如
ibmcloud ce configmap get --name mycolorconfigmap
示例输出
Getting configmap 'mycolorconfigmap'...
OK
Name: mycolorconfigmap
ID: abcdefgh-abcd-abcd-abcd-1a2b3c4d5e6f
Project Name: myproject
Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111
Age: 11s
Created: 2020-10-14 14:10:57 -0400 EDT
Data:
---
TARGET: blue, green, red
更新配置映射
您可以更改现有配置映射的“键/值”对。
从控制台更新配置映射
您可以从控制台更新现有 configmap 及其键/值对。
-
您可以通过下列其中一种方法从控制台更新已定义的配置映射的“键/值”对。
- 转至项目的“私钥和配置映射”页面,并找到要更新的配置映射。 单击要更新的 configmap 的名称以将其打开。
- 如果应用程序,作业或函数工作负载引用了 configmap,请使用工作负载的 环境变量 选项卡上环境变量表中的链接。 这些链接可将您直接转至 configmap。
-
单击 编辑 并对配置映射进行更新。
-
单击 保存 以保存对配置映射所作的更改。
如果更新后的 configmap 由应用程序,作业或函数工作负载引用,那么必须重新启动工作负载才能使新数据生效。
- 应用程序-从应用程序的页面中,单击 新建修订版,然后单击 保存并部署。 或者,您可以等待应用程序缩放到零,当应用程序向上扩展时,应用程序将使用更新后的 configmap。
- 作业-从作业的页面中,单击 提交作业 以运行作业,或者可以重新运行作业。 此新作业运行使用更新后的 configmap。
- Function-再次调用函数时,将重新启动该函数。 您可以通过从函数页面单击 测试函数 来测试函数。
使用 CLI 更新配置映射
您可以使用 CLI 更新现有 configmap 及其键/值对。
-
要更改 configmap 中键/值对的值,请使用
configmap update
命令。 让我们更新myliteralconfigmap
configmap 以将TARGET
键的值从Sunshine
更改为Stranger
。ibmcloud ce configmap update --name myliteralconfigmap --from-literal "TARGET=Stranger"
-
现在,您的 configmap 已更新,请使用
configmap get
命令来显示有关特定 configmap 的详细信息。 例如ibmcloud ce configmap get --name myliteralconfigmap
示例输出
Getting configmap 'myliteralconfigmap'... OK Name: myliteralconfigmap ID: abcdefgh-abcd-abcd-abcd-c88e2775388e Project Name: myproject Project ID: 01234567-abcd-abcd-abcd-abcdabcd1111 Age: 21m Created: 2021-05-14T07:57:11-04:00 Data: --- TARGET: Stranger
引用配置映射
应用程序,作业或函数工作负载可以使用环境变量来使用存储在 configmap 中的信息。
从控制台引用配置映射
您可以使用控制台为应用程序,作业或功能工作负载创建环境变量,这些环境变量完全引用 configmap 或引用 configmap 中的各个键。
在可以引用 configmap 之前,它必须存在。 请参阅 创建 configmap。
在控制台中,每个环境变量只能引用已定义的 configmap 的一个单独键。 如果需要引用 configmap 的多个键,请重复步骤以定义另一个引用另一个键的环境变量。
-
要从应用程序,作业或函数工作负载引用已定义的 configmap,请 创建环境变量。 环境变量可以完全引用现有 configmap 或引用现有 configmap 中的单个键。 例如,让我们从
myapp
应用程序中完全引用myconfigmap
configmap。 当您完全引用 configmap (或私钥) 时,可以选择指定prefix
。 通过使用前缀 (例如myconfigmap_
),每个键都以myconfigmap_
作为前缀。 -
创建环境变量后,必须重新启动应用程序,作业或功能工作负载才能使更改生效。 对于应用程序,保存并部署应用程序以使用您定义的环境变量更新应用程序。 对于作业和函数,下次使用您定义的环境变量调用工作负载时,将更新该工作负载。
-
在应用程序状态更改为 Ready 后,可以测试应用程序。 单击 测试应用程序,然后在“测试应用程序”窗格中单击 发送请求。 要在 Web 页面中打开应用程序,请单击 应用程序 URL。 在此
myapp
示例中,由于为完全引用的myconfigmap
configmap 指定了前缀,因此此 configmap 的所有键都被引用为环境变量并以myconfigmap_
作为前缀。 例如,这些环境变量显示为myconfigmap_key1=value1
和myconfigmap_key2=value2
。
要更新引用 configmap 的环境变量,请参阅 更新环境变量 和 更新环境变量的注意事项。
要除去引用 configmap 的环境变量,请参阅 删除环境变量。
使用 CLI 引用配置映射
要将 configmap 与应用程序,作业或功能工作负载配合使用,可以使用 CLI 设置环境变量以完全引用 configmap 或引用 configmap 中的各个键。
使用 CLI 引用现有配置映射
要将 configmap 与应用程序,作业或功能工作负载配合使用,请在以下命令中指定 --env-from-configmap
选项。
以下示例描述了如何使用 CLI 通过应用程序来引用现有 configmap。
-
使用
configmap create
命令为此方案创建以下两个 configmap。ibmcloud ce configmap create --name myliteralconfigmap --from-literal TARGET=Sunshine
ibmcloud ce configmap create --name myliteralconfigmap2 --from-literal TARGET=Stranger
-
部署应用程序 并引用
myliteralconfigmap
configmap。 对于此示例,请创建使用hello
映像的应用程序。 向此样本应用程序发送请求时,应用程序将读取环境变量TARGET
并打印Hello ${TARGET}
。 如果此环境变量为空,那么将返回Hello World
。 引用myliteralconfigmap
configmap。 有关用于此示例的代码的更多信息,请参阅hello
。ibmcloud ce app create --name myhelloapp --image icr.io/codeengine/hello --env-from-configmap myliteralconfigmap
-
调用应用程序。 应用程序返回
Hello Sunshine
,这是myliteralconfigmap
configmap 中指定的TARGET
键的值。curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
示例输出
Hello Sunshine
-
再次更新应用程序以使用
myliteralconfigmap2
configmap。使用完全引用 configmap (或 secret) 的环境变量更新应用程序,作业或函数以完全引用其他 configmap (或 secret) 时,完全引用将按设置顺序覆盖其他完全引用 (最后引用的集合将覆盖第一个集合)。
ibmcloud ce app update --name myhelloapp --env-from-configmap myliteralconfigmap2
示例输出
Updating application 'myhelloapp' to latest revision. [...] Run 'ibmcloud ce application get -n myhelloapp' to check the application status. OK https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
-
再次调用应用程序。 此时间,应用程序将返回
Hello Stranger
,这是myliteralconfigmap2
configmap 中指定的值。curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
示例输出
Hello Stranger
-
更新
myliteralconfigmap2
以更改键/值对。ibmcloud ce configmap update --name myliteralconfigmap2 --from-literal "TARGET=Happy day"
运行
ibmcloud ce configmap get -n myliteralconfigmap2
命令以显示 configmap 的详细信息。示例输出
Name: myliteralconfigmap2 [...] Data: --- TARGET: Happy day
-
重新启动应用程序以使新数据生效。
ibmcloud ce app update --name myhelloapp
-
再次调用应用程序。 此时间,应用程序将返回
Hello Happy day
,这是myliteralconfigmap2
configmap 中指定的值。curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
示例输出
Hello Happy day
引用尚未使用 CLI 定义的配置映射
如果 configmap 在被引用之前不存在,那么在创建所引用的 configmap 之前,应用程序,作业或函数工作负载不会成功部署,并且作业或函数不会成功运行。
如果您正在使用应用程序,作业或函数工作负载,并且尚未定义所引用的 configmap,那么可以使用 --force
选项来避免验证所引用的 configmap 是否存在。 --force
选项可以与以下命令配合使用。
将 --force
选项与这些命令配合使用时,用于创建,更新或运行工作负载的操作将完成; 但是,在引用的 configmap 存在之前,应用程序,作业或工作负载将不会成功运行。 如果将 --no-wait
选项以及 --force
选项添加到命令中,那么系统将完成操作,并且不会等待工作负载成功运行。
以下示例描述了如何使用 CLI 来引用尚未使用应用程序定义的 configmap。
-
创建应用程序 并引用未定义的
myliteralconfigmap3
configmap。 对于此示例,创建使用icr.io/codeengine/hello
映像的 Code Engine 应用程序。 向此样本应用程序发送请求时,应用程序将读取环境变量TARGET
并打印Hello ${TARGET}
。 如果此环境变量为空,那么将返回Hello World
。 引用myliteralconfigmap3
configmap。 有关用于此示例的代码的更多信息,请参阅hello
。通过将
--no-wait
选项与app create
命令配合使用,将创建应用程序,并且不会等待应用程序就绪。ibmcloud ce app create --name myapp --image icr.io/codeengine/hello --env-from-configmap myliteralconfigmap3 --force --no-wait
-
使用
app get
命令可显示作业运行的详细信息,包括环境变量信息。 请注意,应用程序已创建,但尚未完全部署。ibmcloud ce app get --name myapp
示例输出
Name: myapp [...] Status Summary: Application is deploying Environment Variables: Type Name Value ConfigMap full reference myliteralconfigmap3 Image: icr.io/codeengine/hello Resource Allocation: CPU: 1 Ephemeral Storage: 400M Memory: 4G Runtime: Concurrency: 100 Maximum Scale: 10 Minimum Scale: 0 Timeout: 300 Conditions: Type OK Age Reason ConfigurationsReady false 10s Ready false 10s RevisionMissing : Configuration "myapp" is waiting for a Revision to become ready. RoutesReady false 10s RevisionMissing : Configuration "myapp" is waiting for a Revision to become ready. Events: Type Reason Age Source Messages Normal Created 12s service-controller Created Configuration "myapp" Normal Created 12s service-controller Created Route "myapp" Instances: Name Revision Running Status Restarts Age myapp-00001-deployment-566d5c79b9-wttqs myapp-00001 0/2 Pending 0 11s
-
创建 ConfigMap。
ibmcloud ce configmap create --name myliteralconfigmap3 --from-literal TARGET=Everyone
-
重新启动应用程序以使新数据生效。
ibmcloud ce app update --name myapp
-
调用应用程序。 应用程序返回
Hello Everyone
,这是myliteralconfigmap3
configmap 中指定的值。curl https://myapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
示例输出
Hello Everyone
-
更新应用程序以引用现有
myliteralconfigmap2
configmap。myliteralconfigmap2
是使用值TARGET=Stranger
定义的。 更新应用程序将重新启动应用程序以使新数据生效。使用完全引用 configmap (或私钥) 的环境变量更新应用程序或作业以完全引用其他 configmap (或私钥) 时,完全引用将按设置顺序覆盖其他完全引用 (最后引用的集合将覆盖第一个集合)。
ibmcloud ce app update --name myapp --env-from-configmap myliteralconfigmap2
-
再次调用应用程序。 此时间,应用程序将返回
Hello Stranger
,这是myliteralconfigmap2
configmap 中指定的值。curl https://myapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
示例输出
Hello Stranger
有关将完整私钥和 configmap 作为环境变量引用,覆盖引用以及在 CLI 中除去引用的更多详细方案,请参阅 引用私钥和 configmap。
删除配置映射
当您不再需要 configmap 时,可以将其删除。
从控制台中删除配置映射
- 要从控制台中删除 configmap,
- 从 Code Engine "项目" 页面转至“私钥和配置映射”页面。
- 单击要删除的 configmap 以打开其页面。
- 从特定 configmap 的页面中,单击 操作> 删除 configmap。
- 要从控制台中删除特定 configmap 的键/值对,
- 从 Code Engine "项目" 页面转至“私钥和配置映射”页面。
- 单击要更改的 configmap 以打开其页面。
- 从特定 configmap 的页面中,删除要除去的键/值对。
您还可以删除引用私钥和 ConfigMap 的已定义环境变量。 要从应用程序,作业或函数的 环境变量 选项卡中删除定义的环境变量,请删除要删除的环境变量。 删除定义的环境变量后,请确保单击 保存 以保存对应用程序,作业或功能所作的更改。 有关更多信息,请参阅 删除环境变量。
使用 CLI 删除配置映射
-
要使用 CLI 删除 configmap,请使用
configmap delete
命令; 例如,ibmcloud ce configmap delete --name myliteralconfigmap -f
示例输出
Deleting configmap 'myliteralconfigmap'... OK
您还可以从 CLI 删除引用私钥和 configmap 的环境变量。