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:
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.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:])
|
||||||
}
|
}
|
||||||
|
|
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 =
|
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)
|
|
@ -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'
|
|
@ -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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -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.")
|
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.
|
// 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.
|
||||||
|
|
|
@ -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{
|
||||||
|
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue