IBM Cloud Docs
使用配置映射

使用配置映射

了解如何在 Code Engine中使用 configmap。 在 Code Engine中,可以使用环境变量将信息作为键/值对存储在可供应用程序,作业或函数工作负载使用的配置映射中。

什么是 configmap,为什么我要使用它们?

在 Code Engine中,私钥和 configmap 都是键/值对。 当映射到环境变量时,将设置 NAME=VALUE 关系,以使环境变量的名称对应于这些映射中每个条目的“键”,并且环境变量的值是该键的“值”。

configmap 提供了一种方法,用于将非敏感数据信息包含到部署中。 通过将 configmap 中的值作为环境变量进行引用,可以将特定信息与部署分离,并使应用程序,作业或功能可移植。 configmap 包含键/值对中的信息。

由于私钥和配置映射是类似的实体 (除了私钥更安全地存储),因此您与私钥和配置映射进行交互和使用的方式也类似。 要了解有关私钥的更多信息,请参阅 使用私钥

我看到了我没有创建的配置映射。 我可以删除它们吗?

否。Code Engine 会自动在名称空间中创建 istio-ca-rootkube-root-ca 配置映射。Code Engine 在内部使用这些 configmap。 如果删除这些配置映射,那么 Code Engine 会自动重新创建这些配置映射。

创建 ConfigMap

使用 Code Engine创建 configmap。

从控制台创建 configmap

使用 Code Engine 控制台创建 configmap。

开始之前,请 创建项目

  1. 在项目处于 活动 状态后,在 Code Engine "项目" 页面上单击项目的名称。
  2. 在“概述”页面中,单击 密钥和配置映射
  3. 在“私钥和配置映射”页面中,单击 创建 以创建配置映射。
  4. 从“创建私钥或配置映射”页面,完成以下步骤:
    1. 单击 Configmap,然后单击 下一步
    2. 提供名称; 例如,myconfigmap
    3. 单击 添加键/值对。 为此配置映射指定一个或多个“键/值”对。 例如,将一个键指定为值为 value1key1,并将另一个键指定为值为 value2key2。 请注意,您可以在一行或多行上指定值。 您为密钥选择的名称不需要与环境变量的名称相同。
    4. 单击 创建 以创建 configmap。

现在,您的 configmap 是从控制台创建的,请转至 Secrets and configmaps 页面以查看已定义的私钥和 configmap 的列表。 您可以应用过滤器来定制列表以满足您的需求。

使用 CLI 创建 configmap

使用 Code Engine CLI 创建 configmap。

您可以通过多种方式填充配置映射。 您可以通过直接在命令行上指定“键/值”对来填充该文件,也可以指向文件。

准备工作

从文件创建 (或更新) 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=yellowcolor2=orangecolor3=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 及其键/值对。

  1. 您可以通过下列其中一种方法从控制台更新已定义的配置映射的“键/值”对。

    • 转至项目的“私钥和配置映射”页面,并找到要更新的配置映射。 单击要更新的 configmap 的名称以将其打开。
    • 如果应用程序,作业或函数工作负载引用了 configmap,请使用工作负载的 环境变量 选项卡上环境变量表中的链接。 这些链接可将您直接转至 configmap。
  2. 单击 编辑 并对配置映射进行更新。

  3. 单击 保存 以保存对配置映射所作的更改。

如果更新后的 configmap 由应用程序,作业或函数工作负载引用,那么必须重新启动工作负载才能使新数据生效。

  • 应用程序-从应用程序的页面中,单击 新建修订版,然后单击 保存并部署。 或者,您可以等待应用程序缩放到零,当应用程序向上扩展时,应用程序将使用更新后的 configmap。
  • 作业-从作业的页面中,单击 提交作业 以运行作业,或者可以重新运行作业。 此新作业运行使用更新后的 configmap。
  • Function-再次调用函数时,将重新启动该函数。 您可以通过从函数页面单击 测试函数 来测试函数。

使用 CLI 更新配置映射

您可以使用 CLI 更新现有 configmap 及其键/值对。

  1. 要更改 configmap 中键/值对的值,请使用 configmap update 命令。 让我们更新 myliteralconfigmap configmap 以将 TARGET 键的值从 Sunshine 更改为 Stranger

    ibmcloud ce configmap update --name myliteralconfigmap --from-literal "TARGET=Stranger"
    
  2. 现在,您的 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 的多个键,请重复步骤以定义另一个引用另一个键的环境变量。

  1. 要从应用程序,作业或函数工作负载引用已定义的 configmap,请 创建环境变量。 环境变量可以完全引用现有 configmap 或引用现有 configmap 中的单个键。 例如,让我们从 myapp 应用程序中完全引用 myconfigmap configmap。 当您完全引用 configmap (或私钥) 时,可以选择指定 prefix。 通过使用前缀 (例如 myconfigmap_),每个键都以 myconfigmap_ 作为前缀。

  2. 创建环境变量后,必须重新启动应用程序,作业或功能工作负载才能使更改生效。 对于应用程序,保存并部署应用程序以使用您定义的环境变量更新应用程序。 对于作业和函数,下次使用您定义的环境变量调用工作负载时,将更新该工作负载。

  3. 在应用程序状态更改为 Ready 后,可以测试应用程序。 单击 测试应用程序,然后在“测试应用程序”窗格中单击 发送请求。 要在 Web 页面中打开应用程序,请单击 应用程序 URL。 在此 myapp 示例中,由于为完全引用的 myconfigmap configmap 指定了前缀,因此此 configmap 的所有键都被引用为环境变量并以 myconfigmap_ 作为前缀。 例如,这些环境变量显示为 myconfigmap_key1=value1myconfigmap_key2=value2

要更新引用 configmap 的环境变量,请参阅 更新环境变量更新环境变量的注意事项

要除去引用 configmap 的环境变量,请参阅 删除环境变量

使用 CLI 引用配置映射

要将 configmap 与应用程序,作业或功能工作负载配合使用,可以使用 CLI 设置环境变量以完全引用 configmap 或引用 configmap 中的各个键。

使用 CLI 引用现有配置映射

要将 configmap 与应用程序,作业或功能工作负载配合使用,请在以下命令中指定 --env-from-configmap 选项。

以下示例描述了如何使用 CLI 通过应用程序来引用现有 configmap。

  1. 使用 configmap create 命令为此方案创建以下两个 configmap。

    ibmcloud ce configmap create --name myliteralconfigmap --from-literal TARGET=Sunshine
    
    ibmcloud ce configmap create --name myliteralconfigmap2 --from-literal TARGET=Stranger
    
  2. 部署应用程序 并引用 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
    
  3. 调用应用程序。 应用程序返回 Hello Sunshine,这是 myliteralconfigmap configmap 中指定的 TARGET 键的值。

    curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud
    

    示例输出

    Hello Sunshine
    
  4. 再次更新应用程序以使用 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
    
  5. 再次调用应用程序。 此时间,应用程序将返回 Hello Stranger,这是 myliteralconfigmap2 configmap 中指定的值。

    curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    示例输出

    Hello Stranger
    
  6. 更新 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
    
  7. 重新启动应用程序以使新数据生效。

    ibmcloud ce app update --name myhelloapp
    
  8. 再次调用应用程序。 此时间,应用程序将返回 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。

  1. 创建应用程序 并引用未定义的 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
    
  2. 使用 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
    
  3. 创建 ConfigMap。

    ibmcloud ce configmap create --name myliteralconfigmap3 --from-literal TARGET=Everyone
    
  4. 重新启动应用程序以使新数据生效。

    ibmcloud ce app update --name myapp
    
  5. 调用应用程序。 应用程序返回 Hello Everyone,这是 myliteralconfigmap3 configmap 中指定的值。

    curl https://myapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    示例输出

    Hello Everyone
    
  6. 更新应用程序以引用现有 myliteralconfigmap2 configmap。 myliteralconfigmap2 是使用值 TARGET=Stranger 定义的。 更新应用程序将重新启动应用程序以使新数据生效。

    使用完全引用 configmap (或私钥) 的环境变量更新应用程序或作业以完全引用其他 configmap (或私钥) 时,完全引用将按设置顺序覆盖其他完全引用 (最后引用的集合将覆盖第一个集合)。

    ibmcloud ce app update --name myapp --env-from-configmap myliteralconfigmap2
    
  7. 再次调用应用程序。 此时间,应用程序将返回 Hello Stranger,这是 myliteralconfigmap2 configmap 中指定的值。

    curl https://myapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud  
    

    示例输出

    Hello Stranger
    

有关将完整私钥和 configmap 作为环境变量引用,覆盖引用以及在 CLI 中除去引用的更多详细方案,请参阅 引用私钥和 configmap

删除配置映射

当您不再需要 configmap 时,可以将其删除。

从控制台中删除配置映射

  1. 要从控制台中删除 configmap,
    1. Code Engine "项目" 页面转至“私钥和配置映射”页面。
    2. 单击要删除的 configmap 以打开其页面。
    3. 从特定 configmap 的页面中,单击 操作> 删除 configmap
  2. 要从控制台中删除特定 configmap 的键/值对,
    1. Code Engine "项目" 页面转至“私钥和配置映射”页面。
    2. 单击要更改的 configmap 以打开其页面。
    3. 从特定 configmap 的页面中,删除要除去的键/值对。

您还可以删除引用私钥和 ConfigMap 的已定义环境变量。 要从应用程序,作业或函数的 环境变量 选项卡中删除定义的环境变量,请删除要删除的环境变量。 删除定义的环境变量后,请确保单击 保存 以保存对应用程序,作业或功能所作的更改。 有关更多信息,请参阅 删除环境变量

使用 CLI 删除配置映射

  • 要使用 CLI 删除 configmap,请使用 configmap delete 命令; 例如,

    ibmcloud ce configmap delete --name myliteralconfigmap -f
    

    示例输出

    Deleting configmap 'myliteralconfigmap'...
    OK
    

您还可以从 CLI 删除引用私钥和 configmap 的环境变量