

Github GitHub - stakater/Reloader: A Kubernetes controller to watch changes in C...
source link: https://github.com/stakater/Reloader
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

RELOADER
Problem
We would like to watch if some change happens in ConfigMap
and/or Secret
; then perform a rolling upgrade on relevant DeploymentConfig
, Deployment
, Daemonset
, Statefulset
and Rollout
Solution
Reloader can watch changes in ConfigMap
and Secret
and do rolling upgrades on Pods with their associated DeploymentConfigs
, Deployments
, Daemonsets
Statefulsets
and Rollouts
.
Compatibility
Reloader is compatible with kubernetes >= 1.9
How to use Reloader
For a Deployment
called foo
have a ConfigMap
called foo-configmap
or Secret
called foo-secret
or both. Then add your annotation (by default reloader.stakater.com/auto
) to main metadata of your Deployment
kind: Deployment metadata: annotations: reloader.stakater.com/auto: "true" spec: template: metadata:
This will discover deploymentconfigs/deployments/daemonsets/statefulset/rollouts automatically where foo-configmap
or foo-secret
is being used either via environment variable or from volume mount. And it will perform rolling upgrade on related pods when foo-configmap
or foo-secret
are updated.
You can restrict this discovery to only ConfigMap
or Secret
objects that
are tagged with a special annotation. To take advantage of that, annotate
your deploymentconfigs/deployments/daemonsets/statefulset/rollouts like this:
kind: Deployment metadata: annotations: reloader.stakater.com/search: "true" spec: template:
and Reloader will trigger the rolling upgrade upon modification of any
ConfigMap
or Secret
annotated like this:
kind: ConfigMap metadata: annotations: reloader.stakater.com/match: "true" data: key: value
provided the secret/configmap is being used in an environment variable, or a volume mount.
Please note that reloader.stakater.com/search
and
reloader.stakater.com/auto
do not work together. If you have the
reloader.stakater.com/auto: "true"
annotation on your deployment, then it
will always restart upon a change in configmaps or secrets it uses, regardless
of whether they have the reloader.stakater.com/match: "true"
annotation or
not.
We can also specify a specific configmap or secret which would trigger rolling upgrade only upon change in our specified configmap or secret, this way, it will not trigger rolling upgrade upon changes in all configmaps or secrets used in a deploymentconfig, deployment, daemonset, statefulset or rollout.
To do this either set the auto annotation to "false"
(reloader.stakater.com/auto: "false"
) or remove it altogether, and use annotations mentioned here or here
Configmap
To perform rolling upgrade when change happens only on specific configmaps use below annotation.
For a Deployment
called foo
have a ConfigMap
called foo-configmap
. Then add this annotation to main metadata of your Deployment
kind: Deployment metadata: annotations: configmap.reloader.stakater.com/reload: "foo-configmap" spec: template: metadata:
Use comma separated list to define multiple configmaps.
kind: Deployment metadata: annotations: configmap.reloader.stakater.com/reload: "foo-configmap,bar-configmap,baz-configmap" spec: template: metadata:
Secret
To perform rolling upgrade when change happens only on specific secrets use below annotation.
For a Deployment
called foo
have a Secret
called foo-secret
. Then add this annotation to main metadata of your Deployment
kind: Deployment metadata: annotations: secret.reloader.stakater.com/reload: "foo-secret" spec: template: metadata:
Use comma separated list to define multiple secrets.
kind: Deployment metadata: annotations: secret.reloader.stakater.com/reload: "foo-secret,bar-secret,baz-secret" spec: template: metadata:
NOTES
- Reloader also supports sealed-secrets. Here are the steps to use sealed-secrets with reloader.
- For rollouts reloader simply triggers a change is up to you how you configure the rollout strategy.
reloader.stakater.com/auto: "true"
will only reload the pod, if the configmap or secret is used (as a volume mount or as an env) inDeploymentConfigs/Deployment/Daemonsets/Statefulsets
secret.reloader.stakater.com/reload
orconfigmap.reloader.stakater.com/reload
annotation will reload the pod upon changes in specified configmap or secret, irrespective of the usage of configmap or secret.- you may override the auto annotation with the
--auto-annotation
flag - you may override the search annotation with the
--auto-search-annotation
flag and the match annotation with the--search-match-annotation
flag - you may override the configmap annotation with the
--configmap-annotation
flag - you may override the secret annotation with the
--secret-annotation
flag - you may want to prevent watching certain namespaces with the
--namespaces-to-ignore
flag - you may want to prevent watching certain resources with the
--resources-to-ignore
flag - you can configure logging in JSON format with the
--log-format=json
option
Deploying to Kubernetes
You can deploy Reloader by following methods:
Vanilla Manifests
You can apply vanilla manifests by changing RELEASE-NAME
placeholder provided in manifest with a proper value and apply it by running the command given below:
kubectl apply -f https://raw.githubusercontent.com/stakater/Reloader/master/deployments/kubernetes/reloader.yaml
By default, Reloader gets deployed in default
namespace and watches changes secrets
and configmaps
in all namespaces.
Reloader can be configured to ignore the resources secrets
and configmaps
by passing the following args (spec.template.spec.containers.args
) to its container :
Note
: At one time only one of these resource can be ignored, trying to do it will cause error in Reloader. Workaround for ignoring both resources is by scaling down the reloader pods to 0
.
Vanilla kustomize
You can also apply the vanilla manifests by running the following command
kubectl apply -k https://github.com/stakater/Reloader/deployments/kubernetes
Similarly to vanilla manifests get deployed in default
namespace and watches changes secrets
and configmaps
in all namespaces.
Kustomize
You can write your own kustomization.yaml
using ours as a 'base' and write patches to tweak the configuration.
apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization bases: - https://github.com/stakater/Reloader/deployments/kubernetes namespace: reloader
Helm Charts
Alternatively if you have configured helm on your cluster, you can add reloader to helm from our public chart repository and deploy it via helm using below mentioned commands. Follow this guide, in case you have trouble migrating reloader from Helm2 to Helm3
helm repo add stakater https://stakater.github.io/stakater-charts helm repo update helm install stakater/reloader # For helm3 add --generate-name flag or set the release name
Note: By default reloader watches in all namespaces. To watch in single namespace, please run following command. It will install reloader in test
namespace which will only watch Deployments
, Daemonsets
Statefulsets
and Rollouts
in test
namespace.
helm install stakater/reloader --set reloader.watchGlobally=false --namespace test # For helm3 add --generate-name flag or set the release name
Reloader can be configured to ignore the resources secrets
and configmaps
by using the following parameters of values.yaml
file:
true
or false
boolean
ignoreConfigMaps
To ignore configMaps. Valid value are either true
or false
boolean
Note
: At one time only one of these resource can be ignored, trying to do it will cause error in helm template compilation.
You can also set the log format of Reloader to json by setting logFormat
to json
in values.yaml and apply the chart
You can enable to scrape Reloader's Prometheus metrics by setting serviceMonitor.enabled
or podMonitor.enabled
to true
in values.yaml file. Service monitor will be removed in future releases of reloader in favour of Pod monitor.
Documentation
You can find more documentation here
Have a question?
File a GitHub issue, or send us an email.
Talk to us on Slack
Join and talk to us on Slack for discussing Reloader
Contributing
Bug Reports & Feature Requests
Please use the issue tracker to report any bugs or file feature requests.
Developing
- Deploy Reloader.
- Run
okteto up
to activate your development container. make build
../Reloader
PRs are welcome. In general, we follow the "fork-and-pull" Git workflow.
- Fork the repo on GitHub
- Clone the project to your own machine
- Commit changes to your own branch
- Push your work back up to your fork
- Submit a Pull request so that we can review your changes
NOTE: Be sure to merge the latest from "upstream" before making a pull request!
Changelog
View our closed Pull Requests.
License
Apache2 © Stakater
About
Reloader
is maintained by Stakater. Like it? Please let us know at [email protected]
See our other projects or contact us in case of professional services and queries on [email protected]
Acknowledgements
- ConfigmapController; We documented here why we re-created Reloader
Recommend
-
121
ingress-nginx - Ingress controller for nginx
-
158
README.md GLBC
-
51
README.md kubernetes-policy-controller Kubernetes allows decoupling complex logic such as policy decision from the inner working of API Server by means...
-
83
README.md
-
64
README.md Kubernetes Ingress Controller for Kong
-
39
README.md
-
188
README.md Gatekeeper
-
690
actions-runner-controller This controller operates self-hosted runners for GitHub Actions on your Kubernetes cluster. Motivation GitHub Actions is a very useful tool...
-
10
K8S Configmap和Secret热更新之Reloader 2021-07-24 1.1 配置中心问题...
-
13
prometheus-operator源码分析 -- prometheus配置自动更新之rules-reloader(三)发布于 今天 14:46 rules-reloader的源码:
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK