第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

更改容器運(yùn)行時(shí)的日志級(jí)別

更改容器運(yùn)行時(shí)的日志級(jí)別

Go
慕妹3146593 2023-07-04 19:11:08
我用于logrus記錄在 K8S 上運(yùn)行的應(yīng)用程序,我們有 env 變量,我們可以設(shè)置log-level它并在重新啟動(dòng)應(yīng)用程序時(shí)更改它我們的應(yīng)用程序在 k8s 上使用 docker 容器運(yùn)行現(xiàn)在我們想要更改運(yùn)行時(shí)的日志級(jí)別,即不要重新啟動(dòng)容器并在運(yùn)行時(shí)更改它,這樣我們就可以將其從 更改error為debug,我認(rèn)為這是合法的請(qǐng)求,但沒有找到任何參考或任何這樣做的開源代碼,有什么想法嗎?package logsimport (? ? "fmt"? ? "os"? ? "github.com/sirupsen/logrus")const (? ? AppLogLevel = “APP_LOG_LEVEL"? ? DefLvl = "info")var Logger *logrus.Loggerfunc NewLogger() *logrus.Logger {? ? var level logrus.Level? ? lvl := getLogLevel()? ? // In case level doesn't set will not print any message? ? level = logLevel(lvl)? ? logger := &logrus.Logger{? ? ? ? Out:? ?os.Stdout,? ? ? ? Level: level,? ? }? ? Logger = logger? ? return Logger}// use from envfunc getLogLevel() string {? ? lvl, _ := os.LookupEnv(AppLogLevel)? ? if lvl != "" {? ? ? ? return lvl? ? }? ? return DefLvl}func logLevel(lvl string) logrus.Level {? ? switch lvl {? ? case "debug":? ? ? ? // Used for tracing? ? ? ? return logrus.DebugLevel? ? case "info":? ? ? ? return logrus.InfoLevel? ? case "error":? ? ? ? return logrus.ErrorLevel? ? case "fatal":? ? ? ? return logrus.FatalLevel? ? default:? ? ? ? panic(fmt.Sprintf("the specified %s log level is not supported", lvl))? ? }}我知道如何更改日志級(jí)別,但我需要一種方法來影響記錄器更改級(jí)別
查看完整描述

3 回答

?
炎炎設(shè)計(jì)

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 -fkubectl 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)。


查看完整回答
反對(duì) 回復(fù) 2023-07-04
?
泛舟湖上清波郎朗

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=debugexport LOG_LEVEL=error在容器內(nèi)來完成。



查看完整回答
反對(duì) 回復(fù) 2023-07-04
?
拉風(fēng)的咖菲貓

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í)別。


查看完整回答
反對(duì) 回復(fù) 2023-07-04
  • 3 回答
  • 0 關(guān)注
  • 273 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)