3 回答

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
作為一般的 Un*x 語句,您無法在進(jìn)程啟動(dòng)后更改進(jìn)程中的環(huán)境變量。(你可以setenv?(3)你自己的環(huán)境,并且你可以在execve?(2)它時(shí)指定一個(gè)新進(jìn)程的環(huán)境,但是一旦啟動(dòng),你就不能再改變它。)
此限制適用于更高級(jí)別。如果您有docker run
一個(gè)容器,那么它-e
設(shè)置環(huán)境變量的選項(xiàng)是您必須刪除并重新創(chuàng)建容器才能更改的內(nèi)容之一。這env:
是 Kubernetes Pod 規(guī)范的眾多不可變部分之一;如果不刪除并重新創(chuàng)建 Pod,您也無法更改它。
如果您已通過 Deployment 部署了 pod(您確實(shí)應(yīng)該這樣做),則可以更改 Deployment 規(guī)范中的環(huán)境變量設(shè)置(在源代碼管理中編輯 YAML 文件及其,或直接編輯kubectl apply -f
)kubectl edit
。這將導(dǎo)致 Kubernetes 使用新的日志值啟動(dòng)新的 pod,并按順序關(guān)閉舊的 pod,從而進(jìn)行零停機(jī)更新。?像這樣刪除和重新創(chuàng)建 Pod 是完全正常的,并且每當(dāng)您想要更改部署內(nèi)的映像以獲得今天的構(gòu)建時(shí)都會(huì)發(fā)生。
如果您的應(yīng)用程序能夠注意到其加載的配置文件的更改(并且必須對(duì)其進(jìn)行專門編碼才能做到這一點(diǎn)),那么另一種適合您的路徑是將 ConfigMap 掛載到容器中;如果更改 ConfigMap 內(nèi)容,容器看到的文件將會(huì)更改,但不會(huì)重新啟動(dòng)。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以運(yùn)行該命令kubectl exec -it <container_name> bash
并使用容器內(nèi)的命令行來更改環(huán)境變量。您可以通過運(yùn)行命令export LOG_LEVEL=debug
或export LOG_LEVEL=error
在容器內(nèi)來完成。

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
首先,了解這應(yīng)該發(fā)生在應(yīng)用程序級(jí)別。也就是說,這不是 Kubernetes 應(yīng)該為你做的事情。
話雖這么說,您可以讓應(yīng)用程序檢查環(huán)境變量的值(您已經(jīng)在這樣做),并且根據(jù)該值是什么,它可以設(shè)置應(yīng)用程序的日志級(jí)別。換句話說,讓應(yīng)用程序代碼輪詢環(huán)境變量以查看它是否已更改。
您可以像 Shahaf 建議的那樣注入環(huán)境變量,但這需要您exec
進(jìn)入 pod,這可能并不總是可行或良好的做法。
我建議你跑kubectl set env rs [REPLICASET_NAME] SOME_ENVIRONMENT_VAR=1
。
話雖如此,您需要考慮為什么這很重要。Kubernetes 的構(gòu)建原則是“ Pod 應(yīng)該像牛一樣對(duì)待,而不是寵物”。這意味著當(dāng)一個(gè) Pod 不再有用或不同步時(shí),它應(yīng)該被終止,并且應(yīng)該啟動(dòng)一個(gè)代表代碼當(dāng)前狀態(tài)的新 Pod 來代替它。
不管你如何去做你需要做的事情,你真的不應(yīng)該在生產(chǎn)中這樣做,甚至不應(yīng)該在登臺(tái)中這樣做。
相反,讓您的應(yīng)用程序的基礎(chǔ)環(huán)境變量設(shè)置適合該環(huán)境的日志級(jí)別。
- 3 回答
- 0 關(guān)注
- 273 瀏覽
添加回答
舉報(bào)