mirror of
https://github.com/prometheus-operator/prometheus-operator.git
synced 2025-04-15 16:56:24 +00:00
prometheus-config-reloader: rename from prometheus-watcher
This commit is contained in:
parent
8f9b4c8bc0
commit
2a14d2aefe
13 changed files with 55 additions and 57 deletions
|
@ -48,8 +48,8 @@ func init() {
|
|||
flagset.StringVar(&cfg.KubeletObject, "kubelet-object", "", "Endpoints object to write kubelets into in format \"namespace/name\"")
|
||||
flagset.BoolVar(&cfg.TLSInsecure, "tls-insecure", false, "- NOT RECOMMENDED FOR PRODUCTION - Don't verify API server's CA certificate.")
|
||||
flagset.BoolVar(&analyticsEnabled, "analytics", true, "Send analytical event (Cluster Created/Deleted etc.) to Google Analytics")
|
||||
flagset.StringVar(&cfg.PrometheusWatcherImage, "prometheus-watcher-image", "quay.io/coreos/prometheus-watcher:v0.0.1", "Config and rule reload image")
|
||||
flagset.StringVar(&cfg.ConfigReloaderImage, "config-reloader-image", "jimmidyson/configmap-reload:latest", "Reload Image")
|
||||
flagset.StringVar(&cfg.PrometheusConfigReloader, "prometheus-config-reloader", "quay.io/coreos/prometheus-config-reloader:v0.0.1", "Config and rule reload image")
|
||||
flagset.StringVar(&cfg.ConfigReloaderImage, "config-reloader-image", "quay.io/coreos/configmap-reload:v0.0.1", "Reload Image")
|
||||
|
||||
flagset.Parse(os.Args[1:])
|
||||
}
|
||||
|
|
1
contrib/prometheus-config-reloader/.gitignore
vendored
Normal file
1
contrib/prometheus-config-reloader/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
prometheus-config-reloader
|
5
contrib/prometheus-config-reloader/Dockerfile
Normal file
5
contrib/prometheus-config-reloader/Dockerfile
Normal file
|
@ -0,0 +1,5 @@
|
|||
FROM quay.io/prometheus/busybox:latest
|
||||
|
||||
ADD prometheus-config-reloader /bin/prometheus-config-reloader
|
||||
|
||||
ENTRYPOINT ["/bin/prometheus-config-reloader"]
|
|
@ -2,7 +2,7 @@ all: build
|
|||
|
||||
FLAGS =
|
||||
ENVVAR = GOOS=linux GOARCH=amd64 CGO_ENABLED=0
|
||||
NAME = prometheus-watcher
|
||||
NAME = prometheus-config-reloader
|
||||
REPO = quay.io/coreos/$(NAME)
|
||||
TAG = v0.0.1
|
||||
IMAGE = $(REPO):$(TAG)
|
|
@ -1,26 +1,26 @@
|
|||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: prometheus-watcher-example
|
||||
name: prometheus-config-reloader-example
|
||||
data:
|
||||
---
|
||||
apiVersion: extensions/v1beta1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: prometheus-watcher
|
||||
name: prometheus-config-reloader
|
||||
spec:
|
||||
replicas: 1
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: prometheus-watcher
|
||||
app: prometheus-config-reloader
|
||||
spec:
|
||||
volumes:
|
||||
- name: rules
|
||||
emptyDir: {}
|
||||
- name: config
|
||||
configMap:
|
||||
name: prometheus-watcher-example
|
||||
name: prometheus-config-reloader-example
|
||||
containers:
|
||||
- name: ubuntu
|
||||
image: ubuntu
|
||||
|
@ -29,8 +29,8 @@ spec:
|
|||
- name: rules
|
||||
mountPath: /etc/prometheus/rules
|
||||
readOnly: true
|
||||
- name: prometheus-watcher
|
||||
image: quay.io/coreos/prometheus-watcher:v0.0.1
|
||||
- name: prometheus-config-reloader
|
||||
image: quay.io/coreos/prometheus-config-reloader:v0.0.1
|
||||
args:
|
||||
- '-config-volume-dir=/etc/prometheus/config'
|
||||
- '-rule-volume-dir=/etc/prometheus/rules'
|
|
@ -1,19 +1,19 @@
|
|||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: prometheus-watcher-example
|
||||
name: prometheus-config-reloader-example
|
||||
data:
|
||||
configmaps.json: |+
|
||||
{
|
||||
"items": [
|
||||
{
|
||||
"name": "default/test0"
|
||||
"key": "default/test0"
|
||||
},
|
||||
{
|
||||
"name": "default/test1"
|
||||
"key": "default/test1"
|
||||
},
|
||||
{
|
||||
"name": "default/test2"
|
||||
"key": "default/test2"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -51,12 +51,12 @@ func newVolumeWatcher(client *k8s.Client, cfg config, logger log.Logger) *volume
|
|||
}
|
||||
}
|
||||
|
||||
type ConfigMap struct {
|
||||
type ConfigMapReference struct {
|
||||
Key string `json:"key"`
|
||||
}
|
||||
|
||||
type ConfigMapList struct {
|
||||
Items []*ConfigMap `json:"items"`
|
||||
type ConfigMapReferenceList struct {
|
||||
Items []*ConfigMapReference `json:"items"`
|
||||
}
|
||||
|
||||
func (w *volumeWatcher) UpdateRuleFiles() error {
|
||||
|
@ -66,7 +66,7 @@ func (w *volumeWatcher) UpdateRuleFiles() error {
|
|||
}
|
||||
defer file.Close()
|
||||
|
||||
configMaps := ConfigMapList{}
|
||||
configMaps := ConfigMapReferenceList{}
|
||||
err = json.NewDecoder(file).Decode(&configMaps)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -224,23 +224,6 @@ func (w *volumeWatcher) Run() {
|
|||
}
|
||||
defer watcher.Close()
|
||||
|
||||
done := make(chan bool)
|
||||
go func() {
|
||||
for {
|
||||
select {
|
||||
case event := <-watcher.Events:
|
||||
if event.Op&fsnotify.Create == fsnotify.Create {
|
||||
if filepath.Base(event.Name) == "..data" {
|
||||
w.logger.Log("msg", "ConfigMap modified.")
|
||||
w.Refresh()
|
||||
}
|
||||
}
|
||||
case err := <-watcher.Errors:
|
||||
w.logger.Log("err", err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
w.logger.Log("msg", "Starting...")
|
||||
w.Refresh()
|
||||
err = watcher.Add(w.cfg.configVolumeDir)
|
||||
|
@ -249,7 +232,19 @@ func (w *volumeWatcher) Run() {
|
|||
os.Exit(1)
|
||||
}
|
||||
|
||||
<-done
|
||||
for {
|
||||
select {
|
||||
case event := <-watcher.Events:
|
||||
if event.Op&fsnotify.Create == fsnotify.Create {
|
||||
if filepath.Base(event.Name) == "..data" {
|
||||
w.logger.Log("msg", "ConfigMap modified.")
|
||||
w.Refresh()
|
||||
}
|
||||
}
|
||||
case err := <-watcher.Errors:
|
||||
w.logger.Log("err", err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
|
@ -257,7 +252,7 @@ func main() {
|
|||
With("ts", log.DefaultTimestampUTC, "caller", log.DefaultCaller)
|
||||
|
||||
cfg := config{}
|
||||
flags := flag.NewFlagSet("prometheus-watcher", flag.ExitOnError)
|
||||
flags := flag.NewFlagSet("prometheus-config-reloader", flag.ExitOnError)
|
||||
flags.StringVar(&cfg.configVolumeDir, "config-volume-dir", "", "The directory to watch for changes to reload Prometheus.")
|
||||
flags.StringVar(&cfg.ruleVolumeDir, "rule-volume-dir", "", "The directory to write rule files to.")
|
||||
flags.StringVar(&cfg.reloadUrl, "reload-url", "", "The URL to call when intending to reload Prometheus.")
|
1
contrib/prometheus-watcher/.gitignore
vendored
1
contrib/prometheus-watcher/.gitignore
vendored
|
@ -1 +0,0 @@
|
|||
prometheus-watcher
|
|
@ -1,5 +0,0 @@
|
|||
FROM quay.io/prometheus/busybox:latest
|
||||
|
||||
ADD prometheus-watcher /bin/prometheus-watcher
|
||||
|
||||
ENTRYPOINT ["/bin/prometheus-watcher"]
|
3
hack/show-rules.sh
Executable file
3
hack/show-rules.sh
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/bash
|
||||
|
||||
kubectl -n prometheus-operator-e2e-tests exec -it prometheus-test-0 -c prometheus '/bin/sh -c "cat /etc/prometheus/rules/rules-0/test.rules"'
|
|
@ -74,12 +74,12 @@ type Operator struct {
|
|||
|
||||
// Config defines configuration parameters for the Operator.
|
||||
type Config struct {
|
||||
Host string
|
||||
KubeletObject string
|
||||
TLSInsecure bool
|
||||
TLSConfig rest.TLSClientConfig
|
||||
ConfigReloaderImage string
|
||||
PrometheusWatcherImage string
|
||||
Host string
|
||||
KubeletObject string
|
||||
TLSInsecure bool
|
||||
TLSConfig rest.TLSClientConfig
|
||||
ConfigReloaderImage string
|
||||
PrometheusConfigReloader string
|
||||
}
|
||||
|
||||
// New creates a new controller.
|
||||
|
|
|
@ -122,30 +122,30 @@ func makeEmptyConfig(name string, configMaps []*v1.ConfigMap) (*v1.Secret, error
|
|||
return s, nil
|
||||
}
|
||||
|
||||
type ConfigMap struct {
|
||||
type ConfigMapReference struct {
|
||||
Key string `json:"key"`
|
||||
Checksum string `json:"checksum"`
|
||||
}
|
||||
|
||||
type ConfigMapList struct {
|
||||
Items []*ConfigMap `json:"items"`
|
||||
type ConfigMapReferenceList struct {
|
||||
Items []*ConfigMapReference `json:"items"`
|
||||
}
|
||||
|
||||
func makeRuleConfigMap(cm *v1.ConfigMap) (*ConfigMap, error) {
|
||||
func makeRuleConfigMap(cm *v1.ConfigMap) (*ConfigMapReference, error) {
|
||||
hash := sha256.New()
|
||||
err := json.NewEncoder(hash).Encode(cm)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &ConfigMap{
|
||||
return &ConfigMapReference{
|
||||
Key: cm.Namespace + "/" + cm.Name,
|
||||
Checksum: fmt.Sprintf("%x", hash.Sum(nil)),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func makeRuleConfigMapListFile(configMaps []*v1.ConfigMap) ([]byte, error) {
|
||||
cml := &ConfigMapList{}
|
||||
cml := &ConfigMapReferenceList{}
|
||||
|
||||
for _, cm := range configMaps {
|
||||
configmap, err := makeRuleConfigMap(cm)
|
||||
|
@ -341,8 +341,8 @@ func makeStatefulSetSpec(p v1alpha1.Prometheus, c *Config, ruleConfigMaps []*v1.
|
|||
},
|
||||
Resources: p.Spec.Resources,
|
||||
}, {
|
||||
Name: "prometheus-watcher",
|
||||
Image: c.PrometheusWatcherImage,
|
||||
Name: "prometheus-config-reloader",
|
||||
Image: c.PrometheusConfigReloader,
|
||||
Args: configReloadArgs,
|
||||
VolumeMounts: configReloadVolumeMounts,
|
||||
Resources: v1.ResourceRequirements{
|
||||
|
|
|
@ -233,7 +233,7 @@ func TestPrometheusReloadRules(t *testing.T) {
|
|||
|
||||
// remounting a ConfigMap can take some time
|
||||
err = framework.Poll(time.Minute*5, time.Second, func() (bool, error) {
|
||||
logs, err := framework.GetLogs(fmt.Sprintf("prometheus-%s-0", name), "prometheus-watcher")
|
||||
logs, err := framework.GetLogs(fmt.Sprintf("prometheus-%s-0", name), "prometheus-config-reloader")
|
||||
if err != nil {
|
||||
return false, err
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue