Skip to content

Commit cbf501f

Browse files
authoredJul 8, 2024··
Merge branch 'master' into master
2 parents 2260d72 + 9f5211b commit cbf501f

19 files changed

+459
-90
lines changed
 

‎.github/workflows/pull_request.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ env:
2323

2424
jobs:
2525
qa:
26-
uses: stakater/.github/.github/workflows/pull_request_doc_qa.yaml@v0.0.79
26+
uses: stakater/.github/.github/workflows/pull_request_doc_qa.yaml@v0.0.82
2727
with:
2828
MD_CONFIG: .github/md_config.json
2929
DOC_SRC: README.md

‎.github/workflows/pull_request_docs.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ on:
1515

1616
jobs:
1717
qa:
18-
uses: stakater/.github/.github/workflows/pull_request_doc_qa.yaml@v0.0.79
18+
uses: stakater/.github/.github/workflows/pull_request_doc_qa.yaml@v0.0.82
1919
with:
2020
MD_CONFIG: .github/md_config.json
2121
DOC_SRC: docs
2222
MD_LINT_CONFIG: .markdownlint.yaml
2323
build:
24-
uses: stakater/.github/.github/workflows/pull_request_container_build.yaml@v0.0.79
24+
uses: stakater/.github/.github/workflows/pull_request_container_build.yaml@v0.0.82
2525
with:
2626
DOCKER_FILE_PATH: Dockerfile-docs
2727
secrets:

‎.github/workflows/push.yaml

+6-1
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,12 @@ jobs:
211211

212212
- name: Helm Template
213213
run: |
214-
helm template reloader deployments/kubernetes/chart/reloader/ > deployments/kubernetes/reloader.yaml
214+
helm template reloader deployments/kubernetes/chart/reloader/ \
215+
--set reloader.deployment.resources.limits.cpu=150m \
216+
--set reloader.deployment.resources.limits.memory=512Mi \
217+
--set reloader.deployment.resources.requests.cpu=10m \
218+
--set reloader.deployment.resources.requests.memory=128Mi > deployments/kubernetes/reloader.yaml
219+
215220
helm template reloader deployments/kubernetes/chart/reloader/ --output-dir deployments/kubernetes/manifests && mv deployments/kubernetes/manifests/reloader/templates/* deployments/kubernetes/manifests/ && rm -r deployments/kubernetes/manifests/reloader
216221
217222
- name: Remove labels and annotations from manifests

‎.github/workflows/push_docs.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ on:
1616

1717
jobs:
1818
push:
19-
uses: stakater/.github/.github/workflows/push_container.yaml@v0.0.79
19+
uses: stakater/.github/.github/workflows/push_container.yaml@v0.0.82
2020
with:
2121
DOCKER_FILE_PATH: Dockerfile-docs
2222
RELEASE_BRANCH: master

‎.vale.ini

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
StylesPath = styles
22
MinAlertLevel = warning
33

4-
Packages = https://github.com/stakater/vale-package/releases/download/v0.0.25/Stakater.zip
4+
Packages = https://github.com/stakater/vale-package/releases/download/v0.0.27/Stakater.zip
55
Vocab = Stakater
66

77
# Only check MarkDown files

‎README.md

+12-1
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,17 @@ You can apply vanilla manifests by changing `RELEASE-NAME` placeholder provided
190190
kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml
191191
```
192192

193-
By default, Reloader gets deployed in `default` namespace and watches changes `secrets` and `configmaps` in all namespaces.
193+
By default, Reloader gets deployed in `default` namespace and watches changes `secrets` and `configmaps` in all namespaces.Additionally, in the default Reloader deployment, the following resource limits and requests are set:
194+
195+
```yaml
196+
resources:
197+
limits:
198+
cpu: 150m
199+
memory: 512Mi
200+
requests:
201+
cpu: 10m
202+
memory: 128Mi
203+
```
194204

195205
Reloader can be configured to ignore the resources `secrets` and `configmaps` by passing the following arguments (`spec.template.spec.containers.args`) to its container :
196206

@@ -329,6 +339,7 @@ helm uninstall {{RELEASE_NAME}} -n {{NAMESPACE}}
329339
| `reloader.readOnlyRootFileSystem` | Enforce readOnlyRootFilesystem | boolean | `false` |
330340
| `reloader.legacy.rbac` | | boolean | `false` |
331341
| `reloader.matchLabels` | Pod labels to match | map | `{}` |
342+
| `reloader.enableMetricsByNamespace` | Expose an additional Prometheus counter of reloads by namespace (this metric may have high cardinality in clusters with many namespaces) | boolean | `false` |
332343

333344
#### Deployment Reloader Parameters
334345

‎deployments/kubernetes/chart/reloader/Chart.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
apiVersion: v1
44
name: reloader
55
description: Reloader chart that runs on kubernetes
6-
version: 1.0.107
7-
appVersion: v1.0.107
6+
version: 1.0.115
7+
appVersion: v1.0.115
88
keywords:
99
- Reloader
1010
- kubernetes

‎deployments/kubernetes/chart/reloader/templates/_helpers.tpl

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ We truncate at 63 chars because some Kubernetes name fields are limited to this
2222

2323
{{- define "reloader-labels.chart" -}}
2424
app: {{ template "reloader-fullname" . }}
25-
chart: "{{ .Chart.Name }}-{{ .Chart.Version }}"
25+
chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
2626
release: {{ .Release.Name | quote }}
2727
heritage: {{ .Release.Service | quote }}
2828
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}

‎deployments/kubernetes/chart/reloader/templates/deployment.yaml

+5-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ spec:
7676
- image: "{{ .Values.reloader.deployment.image.name }}:{{ .Values.reloader.deployment.image.tag }}"
7777
imagePullPolicy: {{ .Values.reloader.deployment.image.pullPolicy }}
7878
name: {{ template "reloader-fullname" . }}
79-
{{- if or (.Values.reloader.deployment.env.open) (.Values.reloader.deployment.env.secret) (.Values.reloader.deployment.env.field) (.Values.reloader.deployment.env.existing) (eq .Values.reloader.watchGlobally false) (.Values.reloader.enableHA)}}
79+
{{- if or (.Values.reloader.deployment.env.open) (.Values.reloader.deployment.env.secret) (.Values.reloader.deployment.env.field) (.Values.reloader.deployment.env.existing) (eq .Values.reloader.watchGlobally false) (.Values.reloader.enableHA) (.Values.reloader.enableMetricsByNamespace)}}
8080
env:
8181
{{- range $name, $value := .Values.reloader.deployment.env.open }}
8282
{{- if not (empty $value) }}
@@ -129,6 +129,10 @@ spec:
129129
fieldRef:
130130
fieldPath: metadata.namespace
131131
{{- end }}
132+
{{- if .Values.reloader.enableMetricsByNamespace }}
133+
- name: METRICS_COUNT_BY_NAMESPACE
134+
value: enabled
135+
{{- end }}
132136
{{- end }}
133137

134138
ports:

‎deployments/kubernetes/chart/reloader/values.yaml

+4-2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ reloader:
3333
legacy:
3434
rbac: false
3535
matchLabels: {}
36+
# Set to true to expose a prometheus counter of reloads by namespace (this metric may have high cardinality in clusters with many namespaces)
37+
enableMetricsByNamespace: false
3638
deployment:
3739
# If you wish to run multiple replicas set reloader.enableHA = true
3840
replicas: 1
@@ -90,10 +92,10 @@ reloader:
9092
labels:
9193
provider: stakater
9294
group: com.stakater.platform
93-
version: v1.0.107
95+
version: v1.0.115
9496
image:
9597
name: ghcr.io/stakater/reloader
96-
tag: v1.0.107
98+
tag: v1.0.115
9799
pullPolicy: IfNotPresent
98100
# Support for extra environment variables.
99101
env:

‎deployments/kubernetes/manifests/deployment.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ spec:
1717
app: reloader-reloader
1818
spec:
1919
containers:
20-
- image: "ghcr.io/stakater/reloader:v1.0.107"
20+
- image: "ghcr.io/stakater/reloader:v1.0.115"
2121
imagePullPolicy: IfNotPresent
2222
name: reloader-reloader
2323
ports:

‎deployments/kubernetes/reloader.yaml

+15-8
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ metadata:
88
meta.helm.sh/release-name: "reloader"
99
labels:
1010
app: reloader-reloader
11-
chart: "reloader-1.0.107"
11+
chart: "reloader-1.0.115"
1212
release: "reloader"
1313
heritage: "Helm"
1414
app.kubernetes.io/managed-by: "Helm"
@@ -25,7 +25,7 @@ metadata:
2525
meta.helm.sh/release-name: "reloader"
2626
labels:
2727
app: reloader-reloader
28-
chart: "reloader-1.0.107"
28+
chart: "reloader-1.0.115"
2929
release: "reloader"
3030
heritage: "Helm"
3131
app.kubernetes.io/managed-by: "Helm"
@@ -92,7 +92,7 @@ metadata:
9292
meta.helm.sh/release-name: "reloader"
9393
labels:
9494
app: reloader-reloader
95-
chart: "reloader-1.0.107"
95+
chart: "reloader-1.0.115"
9696
release: "reloader"
9797
heritage: "Helm"
9898
app.kubernetes.io/managed-by: "Helm"
@@ -115,13 +115,13 @@ metadata:
115115
meta.helm.sh/release-name: "reloader"
116116
labels:
117117
app: reloader-reloader
118-
chart: "reloader-1.0.107"
118+
chart: "reloader-1.0.115"
119119
release: "reloader"
120120
heritage: "Helm"
121121
app.kubernetes.io/managed-by: "Helm"
122122
group: com.stakater.platform
123123
provider: stakater
124-
version: v1.0.107
124+
version: v1.0.115
125125
name: reloader-reloader
126126
namespace: default
127127
spec:
@@ -135,16 +135,16 @@ spec:
135135
metadata:
136136
labels:
137137
app: reloader-reloader
138-
chart: "reloader-1.0.107"
138+
chart: "reloader-1.0.115"
139139
release: "reloader"
140140
heritage: "Helm"
141141
app.kubernetes.io/managed-by: "Helm"
142142
group: com.stakater.platform
143143
provider: stakater
144-
version: v1.0.107
144+
version: v1.0.115
145145
spec:
146146
containers:
147-
- image: "ghcr.io/stakater/reloader:v1.0.107"
147+
- image: "ghcr.io/stakater/reloader:v1.0.115"
148148
imagePullPolicy: IfNotPresent
149149
name: reloader-reloader
150150

@@ -172,6 +172,13 @@ spec:
172172

173173
securityContext:
174174
{}
175+
resources:
176+
limits:
177+
cpu: 150m
178+
memory: 512Mi
179+
requests:
180+
cpu: 10m
181+
memory: 128Mi
175182
securityContext:
176183
runAsNonRoot: true
177184
runAsUser: 65534

‎deployments/kubernetes/templates/chart/values.yaml.tmpl

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ reloader:
2323
legacy:
2424
rbac: false
2525
matchLabels: {}
26+
# Set to true to expose a prometheus counter of reloads by namespace (this metric may have high cardinality in clusters with many namespaces)
27+
enableMetricsByNamespace: false
2628
deployment:
2729
replicas: 1
2830
nodeSelector:

‎docs/Verify-Reloader-Working.md

+13
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,16 @@ When Reloader is unable to reload, `reloader_reload_executed_total{success="fals
6060
reloader_reload_executed_total{success="false"} 15
6161
reloader_reload_executed_total{success="true"} 12
6262
```
63+
64+
### Reloads by Namespace
65+
66+
Reloader can also export a metric to show the number of reloads by namespace. This feature is disabled by default, as it can lead to high cardinality in clusters with many namespaces.
67+
68+
The metric will have both `success` and `namespace` as attributes:
69+
70+
```text
71+
reloader_reload_executed_total{success="false", namespace="some-namespace"} 2
72+
reloader_reload_executed_total{success="true", namespace="some-namespace"} 1
73+
```
74+
75+
To opt in, set the environment variable `METRICS_COUNT_BY_NAMESPACE` to `enabled` or set the Helm value `reloader.enableMetricsByNamespace` to `true`.

‎go.mod

+17-17
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ module github.com/stakater/Reloader
33
go 1.21
44

55
require (
6-
github.com/argoproj/argo-rollouts v1.6.6
6+
github.com/argoproj/argo-rollouts v1.7.1
77
github.com/openshift/api v3.9.0+incompatible
88
github.com/openshift/client-go v0.0.0-20231110140829-a6ca51f6d5ba
99
github.com/parnurzeal/gorequest v0.2.16
1010
github.com/prometheus/client_golang v1.19.1
1111
github.com/sirupsen/logrus v1.9.3
12-
github.com/spf13/cobra v1.8.0
13-
k8s.io/api v0.28.4
14-
k8s.io/apimachinery v0.28.4
15-
k8s.io/client-go v0.28.4
16-
k8s.io/kubectl v0.28.4
12+
github.com/spf13/cobra v1.8.1
13+
k8s.io/api v0.29.3
14+
k8s.io/apimachinery v0.29.3
15+
k8s.io/client-go v0.29.3
16+
k8s.io/kubectl v0.29.3
1717
k8s.io/utils v0.0.0-20240423183400-0849a56e8f22
1818
)
1919

@@ -22,19 +22,19 @@ require (
2222
github.com/cespare/xxhash/v2 v2.2.0 // indirect
2323
github.com/davecgh/go-spew v1.1.1 // indirect
2424
github.com/elazarl/goproxy v0.0.0-20221015165544-a0805db90819 // indirect
25-
github.com/emicklei/go-restful/v3 v3.10.1 // indirect
25+
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
2626
github.com/evanphx/json-patch v5.6.0+incompatible // indirect
27-
github.com/go-logr/logr v1.2.4 // indirect
27+
github.com/go-logr/logr v1.3.0 // indirect
2828
github.com/go-openapi/jsonpointer v0.19.6 // indirect
2929
github.com/go-openapi/jsonreference v0.20.2 // indirect
3030
github.com/go-openapi/swag v0.22.3 // indirect
3131
github.com/gogo/protobuf v1.3.2 // indirect
3232
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
33-
github.com/golang/protobuf v1.5.3 // indirect
33+
github.com/golang/protobuf v1.5.4 // indirect
3434
github.com/google/gnostic-models v0.6.8 // indirect
3535
github.com/google/go-cmp v0.6.0 // indirect
3636
github.com/google/gofuzz v1.2.0 // indirect
37-
github.com/google/uuid v1.3.0 // indirect
37+
github.com/google/uuid v1.6.0 // indirect
3838
github.com/imdario/mergo v0.3.13 // indirect
3939
github.com/inconshreveable/mousetrap v1.1.0 // indirect
4040
github.com/josharian/intern v1.0.0 // indirect
@@ -44,28 +44,28 @@ require (
4444
github.com/modern-go/reflect2 v1.0.2 // indirect
4545
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
4646
github.com/pkg/errors v0.9.1 // indirect
47-
github.com/prometheus/client_model v0.5.0 // indirect
47+
github.com/prometheus/client_model v0.6.0 // indirect
4848
github.com/prometheus/common v0.48.0 // indirect
4949
github.com/prometheus/procfs v0.12.0 // indirect
5050
github.com/smartystreets/goconvey v1.7.2 // indirect
5151
github.com/spf13/pflag v1.0.5 // indirect
5252
golang.org/x/net v0.25.0 // indirect
53-
golang.org/x/oauth2 v0.16.0 // indirect
53+
golang.org/x/oauth2 v0.18.0 // indirect
5454
golang.org/x/sys v0.20.0 // indirect
5555
golang.org/x/term v0.20.0 // indirect
5656
golang.org/x/text v0.15.0 // indirect
5757
golang.org/x/time v0.3.0 // indirect
58-
google.golang.org/appengine v1.6.7 // indirect
58+
google.golang.org/appengine v1.6.8 // indirect
5959
google.golang.org/protobuf v1.33.0 // indirect
6060
gopkg.in/inf.v0 v0.9.1 // indirect
6161
gopkg.in/yaml.v2 v2.4.0 // indirect
6262
gopkg.in/yaml.v3 v3.0.1 // indirect
63-
k8s.io/klog/v2 v2.100.1 // indirect
64-
k8s.io/kube-openapi v0.0.0-20230717233707-2695361300d9 // indirect
63+
k8s.io/klog/v2 v2.110.1 // indirect
64+
k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
6565
moul.io/http2curl v1.0.0 // indirect
6666
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
67-
sigs.k8s.io/structured-merge-diff/v4 v4.2.3 // indirect
68-
sigs.k8s.io/yaml v1.3.0 // indirect
67+
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
68+
sigs.k8s.io/yaml v1.4.0 // indirect
6969
)
7070

7171
// Replacements for argo-rollouts

‎go.sum

+54
Large diffs are not rendered by default.

‎internal/pkg/handler/upgrade.go

+2
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,7 @@ func PerformAction(clients kube.Clients, config util.Config, upgradeFuncs callba
245245
message := fmt.Sprintf("Update for '%s' of type '%s' in namespace '%s' failed with error %v", resourceName, upgradeFuncs.ResourceType, config.Namespace, err)
246246
logrus.Errorf(message)
247247
collectors.Reloaded.With(prometheus.Labels{"success": "false"}).Inc()
248+
collectors.ReloadedByNamespace.With(prometheus.Labels{"success": "false", "namespace": config.Namespace}).Inc()
248249
if recorder != nil {
249250
recorder.Event(i, v1.EventTypeWarning, "ReloadFail", message)
250251
}
@@ -254,6 +255,7 @@ func PerformAction(clients kube.Clients, config util.Config, upgradeFuncs callba
254255
message += fmt.Sprintf(", Updated '%s' of type '%s' in namespace '%s'", resourceName, upgradeFuncs.ResourceType, config.Namespace)
255256
logrus.Infof(message)
256257
collectors.Reloaded.With(prometheus.Labels{"success": "true"}).Inc()
258+
collectors.ReloadedByNamespace.With(prometheus.Labels{"success": "true", "namespace": config.Namespace}).Inc()
257259
alert_on_reload, ok := os.LookupEnv("ALERT_ON_RELOAD")
258260
if recorder != nil {
259261
recorder.Event(i, v1.EventTypeNormal, "Reloaded", message)

‎internal/pkg/handler/upgrade_test.go

+294-47
Large diffs are not rendered by default.

‎internal/pkg/metrics/prometheus.go

+26-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
11
package metrics
22

33
import (
4+
"net/http"
5+
"os"
6+
47
"github.com/prometheus/client_golang/prometheus"
58
"github.com/prometheus/client_golang/prometheus/promhttp"
6-
"net/http"
79
)
810

911
type Collectors struct {
10-
Reloaded *prometheus.CounterVec
12+
Reloaded *prometheus.CounterVec
13+
ReloadedByNamespace *prometheus.CounterVec
1114
}
1215

1316
func NewCollectors() Collectors {
@@ -17,21 +20,40 @@ func NewCollectors() Collectors {
1720
Name: "reload_executed_total",
1821
Help: "Counter of reloads executed by Reloader.",
1922
},
20-
[]string{"success"},
23+
[]string{
24+
"success",
25+
},
2126
)
2227

2328
//set 0 as default value
2429
reloaded.With(prometheus.Labels{"success": "true"}).Add(0)
2530
reloaded.With(prometheus.Labels{"success": "false"}).Add(0)
2631

32+
reloaded_by_namespace := prometheus.NewCounterVec(
33+
prometheus.CounterOpts{
34+
Namespace: "reloader",
35+
Name: "reload_executed_total_by_namespace",
36+
Help: "Counter of reloads executed by Reloader by namespace.",
37+
},
38+
[]string{
39+
"success",
40+
"namespace",
41+
},
42+
)
2743
return Collectors{
28-
Reloaded: reloaded,
44+
Reloaded: reloaded,
45+
ReloadedByNamespace: reloaded_by_namespace,
2946
}
3047
}
3148

3249
func SetupPrometheusEndpoint() Collectors {
3350
collectors := NewCollectors()
3451
prometheus.MustRegister(collectors.Reloaded)
52+
53+
if os.Getenv("METRICS_COUNT_BY_NAMESPACE") == "enabled" {
54+
prometheus.MustRegister(collectors.ReloadedByNamespace)
55+
}
56+
3557
http.Handle("/metrics", promhttp.Handler())
3658

3759
return collectors

0 commit comments

Comments
 (0)
Please sign in to comment.