gpt4 book ai didi

go - K8s更改配置映射并更新应用程序日志级别

转载 作者:行者123 更新时间:2023-12-02 23:35:57 26 4
gpt4 key购买 nike

我想更改在 K8S 上运行的 Golang 应用程序的日志配置,我在本地尝试了以下代码,它按预期工作我正在使用 viper 来监视配置文件更改

这是带有日志配置的配置图

apiVersion: v1
kind: ConfigMap
data:
config.yaml: 'log.level: error'
metadata:
name: app-config
namespace: logger

在部署 yaml 中,我添加了以下内容

...
spec:
containers:
- name: gowebapp
image: mvd/myapp:0.0.3
ports:
- containerPort: 80
envFrom:
- configMapRef:
name: app-config

这是代码

package configuration

import (
"fmt"
"os"
"strings"

"github.com/fsnotify/fsnotify"
"github.com/sirupsen/logrus"
"github.com/spf13/viper"
)

const (
varLogLevel = "log.level
"
varPathToConfig = "config.file"
)

type Configuration struct {
v *viper.Viper
}

func New() *Configuration {
c := Configuration{
v: viper.New(),
}

c.v.SetDefault(varPathToConfig, "./config.yaml")
c.v.SetDefault(varLogLevel, "info")
c.v.AutomaticEnv()
c.v.SetConfigFile(c.GetPathToConfig())
err := c.v.ReadInConfig() // Find and read the config file
logrus.WithField("path", c.GetPathToConfig()).Warn("loading config")
if _, ok := err.(*os.PathError); ok {
logrus.Warnf("no config file '%s' not found. Using default values", c.GetPathToConfig())
} else if err != nil { // Handle other errors that occurred while reading the config file
panic(fmt.Errorf("fatal error while reading the config file: %s", err))
}
setLogLevel(c.GetLogLevel())
c.v.WatchConfig()
c.v.OnConfigChange(func(e fsnotify.Event) {
logrus.WithField("file", e.Name).Warn("Config file changed")
setLogLevel(c.GetLogLevel())
})
return &c
}

// GetLogLevel returns the log level
func (c *Configuration) GetLogLevel() string {
s := c.v.GetString(varLogLevel)
return s
}

// GetPathToConfig returns the path to the config file
func (c *Configuration) GetPathToConfig() string {
return c.v.GetString(varPathToConfig)
}

func setLogLevel(logLevel string) {
logrus.WithField("level", logLevel).Warn("setting log level")
level, err := logrus.ParseLevel(logLevel)
if err != nil {
logrus.WithField("level", logLevel).Fatalf("failed to start: %s", err.Error())
}
logrus.SetLevel(level)
}

现在,当我再次应用 yaml 文件并将值从 error 更改为 warndebug 等时一切都没有改变……知道我想念这里什么吗?

我在 K8S 仪表板中看到配置映射分配给应用程序,当我更改值时,我看到环境已更改...

更新

在本地运行时,我使用以下配置仅用于测试但是当使用配置映射时,我根据配置映射的规范使用了 data 条目...

apiVersion: v1
kind: ConfigMap
log.level: 'warn'
#data:
# config.yaml: 'log.level: error'
metadata:
name: app-config

这是配置环境在 k8s 仪表板中的外观

enter image description here

最佳答案

envFrom 从配置映射创建环境变量。没有任何文件发生变化。如果您执行到容器中,您可能会看到一个名为 config.yaml 或 CONFIG.YAML 或类似的环境变量(不知道它是否适用于点)。

如果将 config.yaml 作为文件挂载到 pod 中,效果可能会更好,如下所示 Add ConfigMap data to a Volume

关于go - K8s更改配置映射并更新应用程序日志级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57936885/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com