diff --git a/cmd/operator/main.go b/cmd/operator/main.go index ca59006aa..b798eb0eb 100644 --- a/cmd/operator/main.go +++ b/cmd/operator/main.go @@ -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:]) } diff --git a/contrib/prometheus-config-reloader/.gitignore b/contrib/prometheus-config-reloader/.gitignore new file mode 100644 index 000000000..0bae95193 --- /dev/null +++ b/contrib/prometheus-config-reloader/.gitignore @@ -0,0 +1 @@ +prometheus-config-reloader diff --git a/contrib/prometheus-config-reloader/Dockerfile b/contrib/prometheus-config-reloader/Dockerfile new file mode 100644 index 000000000..5c851fd03 --- /dev/null +++ b/contrib/prometheus-config-reloader/Dockerfile @@ -0,0 +1,5 @@ +FROM quay.io/prometheus/busybox:latest + +ADD prometheus-config-reloader /bin/prometheus-config-reloader + +ENTRYPOINT ["/bin/prometheus-config-reloader"] diff --git a/contrib/prometheus-watcher/Makefile b/contrib/prometheus-config-reloader/Makefile similarity index 90% rename from contrib/prometheus-watcher/Makefile rename to contrib/prometheus-config-reloader/Makefile index b7602d0b7..1971fdd39 100644 --- a/contrib/prometheus-watcher/Makefile +++ b/contrib/prometheus-config-reloader/Makefile @@ -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) diff --git a/contrib/prometheus-watcher/examples/prometheus-watcher.yaml b/contrib/prometheus-config-reloader/examples/prometheus-config-reloader.yaml similarity index 78% rename from contrib/prometheus-watcher/examples/prometheus-watcher.yaml rename to contrib/prometheus-config-reloader/examples/prometheus-config-reloader.yaml index 2cc906cae..055cfd0c6 100644 --- a/contrib/prometheus-watcher/examples/prometheus-watcher.yaml +++ b/contrib/prometheus-config-reloader/examples/prometheus-config-reloader.yaml @@ -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' diff --git a/contrib/prometheus-watcher/examples/updated-configmap.yaml b/contrib/prometheus-config-reloader/examples/updated-configmap.yaml similarity index 75% rename from contrib/prometheus-watcher/examples/updated-configmap.yaml rename to contrib/prometheus-config-reloader/examples/updated-configmap.yaml index e614f8890..1a43a80b8 100644 --- a/contrib/prometheus-watcher/examples/updated-configmap.yaml +++ b/contrib/prometheus-config-reloader/examples/updated-configmap.yaml @@ -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" } ] } diff --git a/contrib/prometheus-watcher/main.go b/contrib/prometheus-config-reloader/main.go similarity index 92% rename from contrib/prometheus-watcher/main.go rename to contrib/prometheus-config-reloader/main.go index 98a594692..bd2a051fa 100644 --- a/contrib/prometheus-watcher/main.go +++ b/contrib/prometheus-config-reloader/main.go @@ -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.") diff --git a/contrib/prometheus-watcher/.gitignore b/contrib/prometheus-watcher/.gitignore deleted file mode 100644 index 5dc3b75de..000000000 --- a/contrib/prometheus-watcher/.gitignore +++ /dev/null @@ -1 +0,0 @@ -prometheus-watcher diff --git a/contrib/prometheus-watcher/Dockerfile b/contrib/prometheus-watcher/Dockerfile deleted file mode 100644 index 9d9c7f13e..000000000 --- a/contrib/prometheus-watcher/Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM quay.io/prometheus/busybox:latest - -ADD prometheus-watcher /bin/prometheus-watcher - -ENTRYPOINT ["/bin/prometheus-watcher"] diff --git a/hack/show-rules.sh b/hack/show-rules.sh new file mode 100755 index 000000000..f1ee4ad58 --- /dev/null +++ b/hack/show-rules.sh @@ -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"' diff --git a/pkg/prometheus/operator.go b/pkg/prometheus/operator.go index 9c8380586..9d105bff2 100644 --- a/pkg/prometheus/operator.go +++ b/pkg/prometheus/operator.go @@ -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. diff --git a/pkg/prometheus/statefulset.go b/pkg/prometheus/statefulset.go index 78d50a5f2..013c8262b 100644 --- a/pkg/prometheus/statefulset.go +++ b/pkg/prometheus/statefulset.go @@ -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{ diff --git a/test/e2e/prometheus_e2e_test.go b/test/e2e/prometheus_e2e_test.go index a63c9236f..2075bf007 100644 --- a/test/e2e/prometheus_e2e_test.go +++ b/test/e2e/prometheus_e2e_test.go @@ -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 }