使用配置對映

瞭解如何在 Code Engine中使用 configmap。 在 Code Engine中,您可以將資訊儲存為配置對映中的鍵值組,以供應用程式、工作或函數工作量使用環境變數。

何謂 configmap 以及我使用它們的原因?

在 Code Engine中,密鑰和 configmap 都是鍵值組。 當對映至環境變數時,會設定 NAME=VALUE 關係,以便環境變數的名稱對應於那些對映中每一個項目的「索引鍵」,且環境變數的值是該索引鍵的「值」。

configmap 提供將非機密資料資訊併入部署的方法。 透過將 configmap 中的值作為環境變數進行參照,您可以將特定資訊與部署取消連結,並保持應用程式、工作或功能可攜。 configmap 包含鍵值組中的資訊。

因為密鑰及 configmap 是類似的實體 (除了密鑰會更安全地儲存),所以您與密鑰及 configmap 互動及使用的方式也會類似。 若要進一步瞭解密鑰,請參閱 使用密鑰

我看到我未建立的配置對映。 我可以刪除它們嗎?

否。Code Engine 會自動在名稱空間中建立 istio-ca-rootkube-root-ca configmap。Code Engine 在內部使用這些 configmap。 如果您刪除這些 configmap,Code Engine 會自動重建它們。

建立配置對映

使用 Code Engine建立配置對映。

從主控台建立配置對映

使用 Code Engine 主控台建立 configmap。

開始之前,請 建立專案

  1. 在專案處於 作用中 狀態之後,請在 Code Engine「專案」頁面上按一下專案的名稱。
  2. 從「概觀」頁面中,按一下 密鑰及配置對映
  3. 從「密鑰及配置對映」頁面中,按一下 建立 以建立配置對映。
  4. 從「建立密鑰或 configmap」頁面中,完成下列步驟:
    1. 按一下 Configmap,然後按 下一步
    2. 提供名稱; 例如 myconfigmap
    3. 按一下 新增鍵值組。 指定此 configmap 的一或多個鍵值組。 例如,將一個索引鍵指定為 key1,值為 value1,並將另一個索引鍵指定為 key2,值為 value2。 請注意,您可以在一或多行上指定值。 您為金鑰選擇的名稱不需要與環境變數的名稱相同。
    4. 按一下 建立 以建立 configmap。

既然已從主控台建立您的 configmap,請移至「密鑰及 configmap」頁面,以檢視已定義密鑰及 configmap 的清單。 您可以套用過濾器來自訂清單以符合您的需求。

使用 CLI 建立配置對映

使用 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 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. 按一下 編輯,並進行 configmap 的更新。

  3. 按一下 儲存,以儲存對 configmap 所做的變更。

如果應用程式、工作或功能工作負載參照更新的 configmap,則必須重新啟動工作負載,新資料才會生效。

  • 應用程式-從應用程式的頁面中,按一下 新建修訂,然後按一下 儲存並部署。 或者,您可以等待應用程式調整為零,當應用程式擴增時,應用程式會使用更新的 configmap。
  • 工作-從工作的頁面中,按一下 提交工作 以執行工作,或者您可以重新執行工作。 這項新的工作執行會使用已更新的 configmap。
  • 功能-當再次呼叫您的功能時,會重新啟動您的功能。 您可以從功能頁面按一下 測試功能 來測試您的功能。

使用 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 的一個個別索引鍵。 如果您需要參照配置對映的多個索引鍵,請重複步驟來定義另一個參照不同索引鍵的環境變數。

  1. 若要從應用程式、工作或函數工作負載參照已定義的 configmap,請 建立環境變數。 環境變數可以完全參照現有的 configmap,或參照現有 configmap 中的個別索引鍵。 例如,讓我們從 myapp 應用程式完整參照 myconfigmap configmap。 當您完整參照 configmap (或密鑰) 時,可以選擇性地指定 prefix。 透過使用字首 (例如 myconfigmap_),每一個金鑰都會以 myconfigmap_ 作為字首。

  2. 建立環境變數之後,您必須重新啟動應用程式、工作或函數工作負載,變更才會生效。 若為應用程式,請儲存並部署應用程式,以您定義的環境變數來更新應用程式。 對於工作及函數,下次以您定義的環境變數呼叫工作量時,即會更新工作量。

  3. 應用程式狀態變更為 備妥之後,您可以測試應用程式。 按一下 測試應用程式,然後在「測試應用程式」窗格中按一下 傳送要求。 若要在網頁中開啟應用程式,請按一下 應用程式 URL。 在此 myapp 範例中,因為我們為完整參照的 myconfigmap configmap 指定了字首,所以會將此 configmap 的所有索引鍵作為環境變數進行參照,並以 myconfigmap_ 作為字首。 例如,這些環境變數會顯示為 myconfigmap_key1=value1myconfigmap_key2=value2

若要更新參照 configmap 的環境變數,請參閱 更新環境變數更新環境變數的考量

若要移除參照 configmap 的環境變數,請參閱 刪除環境變數

使用 CLI 參照配置對映

若要搭配使用 configmap 與應用程式、工作或函數工作負載,您可以設定環境變數,以使用 CLI 完全參照 configmap 或參照 configmap 中的個別索引鍵。

使用 CLI 參照現有配置對映

若要使用 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 (或密鑰) 的環境變數來更新應用程式、工作或函數,以完全參照不同的 configmap (或密鑰) 時,完整參照會以其設定順序置換其他完整參照 (最後一個參照集置換第一個集)。

    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 存在之前,應用程式、工作或工作負載將無法順利執行。 如果您除了在指令中新增 --force 選項之外,還新增 --no-wait 選項,則系統會完成動作,且不會等待工作量順利執行。

下列範例說明如何使用 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
    

如需在 CLI 中參照完整密鑰及 configmap 作為環境變數、置換參照及移除參照的更詳細實務範例,請參閱 參照密鑰及 configmap

刪除配置對映

當您不再需要 configmap 時,可以刪除它。

從主控台刪除配置對映

  1. 若要從主控台刪除配置對映,請執行下列動作:
    1. Code Engine 專案頁面移至「密鑰及配置對映」頁面。
    2. 按一下您要刪除的 configmap 以開啟其頁面。
    3. 從特定 configmap 的頁面中,按一下 動作> 刪除 configmap
  2. 若要從主控台刪除特定 ConfigMap 的鍵值組,請執行下列動作:
    1. Code Engine 專案頁面移至「密鑰及配置對映」頁面。
    2. 按一下您要變更的配置對映,以開啟其頁面。
    3. 從特定 configmap 的頁面中,刪除您要移除的鍵值組。

您也可以刪除參照密鑰及 configmap 的已定義環境變數。 若要刪除已定義的環境變數,請從應用程式、工作或函數的 環境變數 標籤中,並刪除您要刪除的環境變數。 刪除已定義的環境變數之後,請務必按一下 儲存,以儲存對應用程式、工作或函數所做的變更。 如需相關資訊,請參閱 刪除環境變數

使用 CLI 刪除配置對映

  • 若要使用 CLI 來刪除 configmap,請使用 configmap delete 指令; 例如:

    ibmcloud ce configmap delete --name myliteralconfigmap -f
    

    輸出範例

    Deleting configmap 'myliteralconfigmap'...
    OK
    

您也可以從 CLI 刪除環境變數,這些環境變數會參照密鑰及 configmap。