使用配置對映
瞭解如何在 Code Engine中使用 configmap。 在 Code Engine中,您可以將資訊儲存為配置對映中的鍵值組,以供應用程式、工作或函數工作量使用環境變數。
何謂 configmap 以及我使用它們的原因?
在 Code Engine中,密鑰和 configmap 都是鍵值組。 當對映至環境變數時,會設定 NAME=VALUE 關係,以便環境變數的名稱對應於那些對映中每一個項目的「索引鍵」,且環境變數的值是該索引鍵的「值」。
configmap 提供將非機密資料資訊併入部署的方法。 透過將 configmap 中的值作為環境變數進行參照,您可以將特定資訊與部署取消連結,並保持應用程式、工作或功能可攜。 configmap 包含鍵值組中的資訊。
因為密鑰及 configmap 是類似的實體 (除了密鑰會更安全地儲存),所以您與密鑰及 configmap 互動及使用的方式也會類似。 若要進一步瞭解密鑰,請參閱 使用密鑰。
我看到我未建立的配置對映。 我可以刪除它們嗎?
否。Code Engine 會自動在名稱空間中建立 istio-ca-root 和 kube-root-ca configmap。Code Engine 在內部使用這些 configmap。 如果您刪除這些 configmap,Code Engine 會自動重建它們。
建立配置對映
使用 Code Engine建立配置對映。
從主控台建立配置對映
使用 Code Engine 主控台建立 configmap。
開始之前,請 建立專案。
- 在專案處於 作用中 狀態之後,請在 Code Engine「專案」頁面上按一下專案的名稱。
- 從「概觀」頁面中,按一下 密鑰及配置對映。
- 從「密鑰及配置對映」頁面中,按一下 建立 以建立配置對映。
- 從「建立密鑰或 configmap」頁面中,完成下列步驟:
- 按一下 Configmap,然後按 下一步。
- 提供名稱; 例如
myconfigmap。 - 按一下 新增鍵值組。 指定此 configmap 的一或多個鍵值組。 例如,將一個索引鍵指定為
key1,值為value1,並將另一個索引鍵指定為key2,值為value2。 請注意,您可以在一或多行上指定值。 您為金鑰選擇的名稱不需要與環境變數的名稱相同。 - 按一下 建立 以建立 configmap。
既然已從主控台建立您的 configmap,請移至「密鑰及 configmap」頁面,以檢視已定義密鑰及 configmap 的清單。 您可以套用過濾器來自訂清單以符合您的需求。
使用 CLI 建立配置對映
使用 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 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,則必須重新啟動工作負載,新資料才會生效。
- 應用程式-從應用程式的頁面中,按一下 新建修訂,然後按一下 儲存並部署。 或者,您可以等待應用程式調整為零,當應用程式擴增時,應用程式會使用更新的 configmap。
- 工作-從工作的頁面中,按一下 提交工作 以執行工作,或者您可以重新執行工作。 這項新的工作執行會使用已更新的 configmap。
- 功能-當再次呼叫您的功能時,會重新啟動您的功能。 您可以從功能頁面按一下 測試功能 來測試您的功能。
使用 CLI 更新配置對映
您可以使用 CLI 來更新現有的 configmap 及其鍵值組。
-
若要變更 configmap 中鍵值組的值,請使用
configmap update指令。 讓我們更新myliteralconfigmapconfigmap,以將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 中的個別索引鍵。 例如,讓我們從
myapp應用程式完整參照myconfigmapconfigmap。 當您完整參照 configmap (或密鑰) 時,可以選擇性地指定prefix。 透過使用字首 (例如myconfigmap_),每一個金鑰都會以myconfigmap_作為字首。 -
建立環境變數之後,您必須重新啟動應用程式、工作或函數工作負載,變更才會生效。 若為應用程式,請儲存並部署應用程式,以您定義的環境變數來更新應用程式。 對於工作及函數,下次以您定義的環境變數呼叫工作量時,即會更新工作量。
-
應用程式狀態變更為 備妥之後,您可以測試應用程式。 按一下 測試應用程式,然後在「測試應用程式」窗格中按一下 傳送要求。 若要在網頁中開啟應用程式,請按一下 應用程式 URL。 在此
myapp範例中,因為我們為完整參照的myconfigmapconfigmap 指定了字首,所以會將此 configmap 的所有索引鍵作為環境變數進行參照,並以myconfigmap_作為字首。 例如,這些環境變數會顯示為myconfigmap_key1=value1和myconfigmap_key2=value2。
若要更新參照 configmap 的環境變數,請參閱 更新環境變數 及 更新環境變數的考量。
若要移除參照 configmap 的環境變數,請參閱 刪除環境變數。
使用 CLI 參照配置對映
若要搭配使用 configmap 與應用程式、工作或函數工作負載,您可以設定環境變數,以使用 CLI 完全參照 configmap 或參照 configmap 中的個別索引鍵。
使用 CLI 參照現有配置對映
若要使用 CLI 搭配使用 configmap 與應用程式、工作或函數工作負載,請在下列指令上指定 --env-from-configmap 選項。
下列範例說明如何使用 CLI 來參照具有應用程式的現有 configmap。
-
針對此實務範例,使用
configmap create指令來建立下列兩個 configmap。ibmcloud ce configmap create --name myliteralconfigmap --from-literal TARGET=Sunshineibmcloud ce configmap create --name myliteralconfigmap2 --from-literal TARGET=Stranger -
部署應用程式 並參照
myliteralconfigmapconfigmap。 在此範例中,建立使用hello映像檔的應用程式。 當要求傳送至此範例應用程式時,應用程式會讀取環境變數TARGET並列印Hello ${TARGET}。 如果此環境變數是空的,則會傳回Hello World。 參照myliteralconfigmapconfigmap。 如需用於此範例之程式碼的相關資訊,請參閱hello。ibmcloud ce app create --name myhelloapp --image icr.io/codeengine/hello --env-from-configmap myliteralconfigmap -
呼叫應用程式。 應用程式會傳回
Hello Sunshine,這是myliteralconfigmapconfigmap 中所指定TARGET索引鍵的值。curl https://myhelloapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud輸出範例
Hello Sunshine -
再次更新應用程式以使用
myliteralconfigmap2configmap。當您使用完全參照 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 -
請重新呼叫應用程式。 此時,應用程式會傳回
Hello Stranger,這是myliteralconfigmap2configmap 中指定的值。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,這是myliteralconfigmap2configmap 中指定的值。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。
-
建立應用程式 並參照未定義的
myliteralconfigmap3configmap。 在此範例中,建立使用icr.io/codeengine/hello映像檔的 Code Engine 應用程式。 當要求傳送至此範例應用程式時,應用程式會讀取環境變數TARGET並列印Hello ${TARGET}。 如果此環境變數是空的,則會傳回Hello World。 參照myliteralconfigmap3configmap。 如需用於此範例之程式碼的相關資訊,請參閱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,這是myliteralconfigmap3configmap 中指定的值。curl https://myapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud輸出範例
Hello Everyone -
更新應用程式以參照現有的
myliteralconfigmap2configmap。myliteralconfigmap2定義值為TARGET=Stranger。 更新應用程式會重新啟動應用程式,讓新資料生效。當您使用完全參照 configmap (或密鑰) 的環境變數來更新應用程式或工作,以完全參照不同的 configmap (或密鑰) 時,完整參照會依其設定順序置換其他完整參照 (最後一個參照集會置換第一個集)。
ibmcloud ce app update --name myapp --env-from-configmap myliteralconfigmap2 -
請重新呼叫應用程式。 此時,應用程式會傳回
Hello Stranger,這是myliteralconfigmap2configmap 中指定的值。curl https://myapp.d484a5d6-d10d.us-south.codeengine.appdomain.cloud輸出範例
Hello Stranger
如需在 CLI 中參照完整密鑰及 configmap 作為環境變數、置換參照及移除參照的更詳細實務範例,請參閱 參照密鑰及 configmap。
刪除配置對映
當您不再需要 configmap 時,可以刪除它。
從主控台刪除配置對映
- 若要從主控台刪除配置對映,請執行下列動作:
- 從 Code Engine 專案頁面移至「密鑰及配置對映」頁面。
- 按一下您要刪除的 configmap 以開啟其頁面。
- 從特定 configmap 的頁面中,按一下 動作> 刪除 configmap。
- 若要從主控台刪除特定 ConfigMap 的鍵值組,請執行下列動作:
- 從 Code Engine 專案頁面移至「密鑰及配置對映」頁面。
- 按一下您要變更的配置對映,以開啟其頁面。
- 從特定 configmap 的頁面中,刪除您要移除的鍵值組。
您也可以刪除參照密鑰及 configmap 的已定義環境變數。 若要刪除已定義的環境變數,請從應用程式、工作或函數的 環境變數 標籤中,並刪除您要刪除的環境變數。 刪除已定義的環境變數之後,請務必按一下 儲存,以儲存對應用程式、工作或函數所做的變更。 如需相關資訊,請參閱 刪除環境變數。
使用 CLI 刪除配置對映
-
若要使用 CLI 來刪除 configmap,請使用
configmap delete指令; 例如:ibmcloud ce configmap delete --name myliteralconfigmap -f輸出範例
Deleting configmap 'myliteralconfigmap'... OK
您也可以從 CLI 刪除環境變數,這些環境變數會參照密鑰及 configmap。