1
0
Fork 0
mirror of https://github.com/prometheus-operator/prometheus-operator.git synced 2025-04-16 01:06:27 +00:00

prometheus-config-reloader: rename from prometheus-watcher

This commit is contained in:
Frederic Branczyk 2017-03-17 08:05:57 +01:00
parent 8f9b4c8bc0
commit 2a14d2aefe
No known key found for this signature in database
GPG key ID: CA14788B1E48B256
13 changed files with 55 additions and 57 deletions

View file

@ -48,8 +48,8 @@ func init() {
flagset.StringVar(&cfg.KubeletObject, "kubelet-object", "", "Endpoints object to write kubelets into in format \"namespace/name\"") 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(&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.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.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", "jimmidyson/configmap-reload:latest", "Reload Image") flagset.StringVar(&cfg.ConfigReloaderImage, "config-reloader-image", "quay.io/coreos/configmap-reload:v0.0.1", "Reload Image")
flagset.Parse(os.Args[1:]) flagset.Parse(os.Args[1:])
} }

View file

@ -0,0 +1 @@
prometheus-config-reloader

View file

@ -0,0 +1,5 @@
FROM quay.io/prometheus/busybox:latest
ADD prometheus-config-reloader /bin/prometheus-config-reloader
ENTRYPOINT ["/bin/prometheus-config-reloader"]

View file

@ -2,7 +2,7 @@ all: build
FLAGS = FLAGS =
ENVVAR = GOOS=linux GOARCH=amd64 CGO_ENABLED=0 ENVVAR = GOOS=linux GOARCH=amd64 CGO_ENABLED=0
NAME = prometheus-watcher NAME = prometheus-config-reloader
REPO = quay.io/coreos/$(NAME) REPO = quay.io/coreos/$(NAME)
TAG = v0.0.1 TAG = v0.0.1
IMAGE = $(REPO):$(TAG) IMAGE = $(REPO):$(TAG)

View file

@ -1,26 +1,26 @@
apiVersion: v1 apiVersion: v1
kind: ConfigMap kind: ConfigMap
metadata: metadata:
name: prometheus-watcher-example name: prometheus-config-reloader-example
data: data:
--- ---
apiVersion: extensions/v1beta1 apiVersion: extensions/v1beta1
kind: Deployment kind: Deployment
metadata: metadata:
name: prometheus-watcher name: prometheus-config-reloader
spec: spec:
replicas: 1 replicas: 1
template: template:
metadata: metadata:
labels: labels:
app: prometheus-watcher app: prometheus-config-reloader
spec: spec:
volumes: volumes:
- name: rules - name: rules
emptyDir: {} emptyDir: {}
- name: config - name: config
configMap: configMap:
name: prometheus-watcher-example name: prometheus-config-reloader-example
containers: containers:
- name: ubuntu - name: ubuntu
image: ubuntu image: ubuntu
@ -29,8 +29,8 @@ spec:
- name: rules - name: rules
mountPath: /etc/prometheus/rules mountPath: /etc/prometheus/rules
readOnly: true readOnly: true
- name: prometheus-watcher - name: prometheus-config-reloader
image: quay.io/coreos/prometheus-watcher:v0.0.1 image: quay.io/coreos/prometheus-config-reloader:v0.0.1
args: args:
- '-config-volume-dir=/etc/prometheus/config' - '-config-volume-dir=/etc/prometheus/config'
- '-rule-volume-dir=/etc/prometheus/rules' - '-rule-volume-dir=/etc/prometheus/rules'

View file

@ -1,19 +1,19 @@
apiVersion: v1 apiVersion: v1
kind: ConfigMap kind: ConfigMap
metadata: metadata:
name: prometheus-watcher-example name: prometheus-config-reloader-example
data: data:
configmaps.json: |+ configmaps.json: |+
{ {
"items": [ "items": [
{ {
"name": "default/test0" "key": "default/test0"
}, },
{ {
"name": "default/test1" "key": "default/test1"
}, },
{ {
"name": "default/test2" "key": "default/test2"
} }
] ]
} }

View file

@ -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"` Key string `json:"key"`
} }
type ConfigMapList struct { type ConfigMapReferenceList struct {
Items []*ConfigMap `json:"items"` Items []*ConfigMapReference `json:"items"`
} }
func (w *volumeWatcher) UpdateRuleFiles() error { func (w *volumeWatcher) UpdateRuleFiles() error {
@ -66,7 +66,7 @@ func (w *volumeWatcher) UpdateRuleFiles() error {
} }
defer file.Close() defer file.Close()
configMaps := ConfigMapList{} configMaps := ConfigMapReferenceList{}
err = json.NewDecoder(file).Decode(&configMaps) err = json.NewDecoder(file).Decode(&configMaps)
if err != nil { if err != nil {
return err return err
@ -224,23 +224,6 @@ func (w *volumeWatcher) Run() {
} }
defer watcher.Close() 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.logger.Log("msg", "Starting...")
w.Refresh() w.Refresh()
err = watcher.Add(w.cfg.configVolumeDir) err = watcher.Add(w.cfg.configVolumeDir)
@ -249,7 +232,19 @@ func (w *volumeWatcher) Run() {
os.Exit(1) 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() { func main() {
@ -257,7 +252,7 @@ func main() {
With("ts", log.DefaultTimestampUTC, "caller", log.DefaultCaller) With("ts", log.DefaultTimestampUTC, "caller", log.DefaultCaller)
cfg := config{} 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.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.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.") flags.StringVar(&cfg.reloadUrl, "reload-url", "", "The URL to call when intending to reload Prometheus.")

View file

@ -1 +0,0 @@
prometheus-watcher

View file

@ -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
View 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"'

View file

@ -74,12 +74,12 @@ type Operator struct {
// Config defines configuration parameters for the Operator. // Config defines configuration parameters for the Operator.
type Config struct { type Config struct {
Host string Host string
KubeletObject string KubeletObject string
TLSInsecure bool TLSInsecure bool
TLSConfig rest.TLSClientConfig TLSConfig rest.TLSClientConfig
ConfigReloaderImage string ConfigReloaderImage string
PrometheusWatcherImage string PrometheusConfigReloader string
} }
// New creates a new controller. // New creates a new controller.

View file

@ -122,30 +122,30 @@ func makeEmptyConfig(name string, configMaps []*v1.ConfigMap) (*v1.Secret, error
return s, nil return s, nil
} }
type ConfigMap struct { type ConfigMapReference struct {
Key string `json:"key"` Key string `json:"key"`
Checksum string `json:"checksum"` Checksum string `json:"checksum"`
} }
type ConfigMapList struct { type ConfigMapReferenceList struct {
Items []*ConfigMap `json:"items"` Items []*ConfigMapReference `json:"items"`
} }
func makeRuleConfigMap(cm *v1.ConfigMap) (*ConfigMap, error) { func makeRuleConfigMap(cm *v1.ConfigMap) (*ConfigMapReference, error) {
hash := sha256.New() hash := sha256.New()
err := json.NewEncoder(hash).Encode(cm) err := json.NewEncoder(hash).Encode(cm)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &ConfigMap{ return &ConfigMapReference{
Key: cm.Namespace + "/" + cm.Name, Key: cm.Namespace + "/" + cm.Name,
Checksum: fmt.Sprintf("%x", hash.Sum(nil)), Checksum: fmt.Sprintf("%x", hash.Sum(nil)),
}, nil }, nil
} }
func makeRuleConfigMapListFile(configMaps []*v1.ConfigMap) ([]byte, error) { func makeRuleConfigMapListFile(configMaps []*v1.ConfigMap) ([]byte, error) {
cml := &ConfigMapList{} cml := &ConfigMapReferenceList{}
for _, cm := range configMaps { for _, cm := range configMaps {
configmap, err := makeRuleConfigMap(cm) configmap, err := makeRuleConfigMap(cm)
@ -341,8 +341,8 @@ func makeStatefulSetSpec(p v1alpha1.Prometheus, c *Config, ruleConfigMaps []*v1.
}, },
Resources: p.Spec.Resources, Resources: p.Spec.Resources,
}, { }, {
Name: "prometheus-watcher", Name: "prometheus-config-reloader",
Image: c.PrometheusWatcherImage, Image: c.PrometheusConfigReloader,
Args: configReloadArgs, Args: configReloadArgs,
VolumeMounts: configReloadVolumeMounts, VolumeMounts: configReloadVolumeMounts,
Resources: v1.ResourceRequirements{ Resources: v1.ResourceRequirements{

View file

@ -233,7 +233,7 @@ func TestPrometheusReloadRules(t *testing.T) {
// remounting a ConfigMap can take some time // remounting a ConfigMap can take some time
err = framework.Poll(time.Minute*5, time.Second, func() (bool, error) { 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 { if err != nil {
return false, err return false, err
} }