diff options
author | Vincent Ambo <tazjin@gmail.com> | 2017-05-08T08·24+0200 |
---|---|---|
committer | Vincent Ambo <tazjin@gmail.com> | 2017-05-08T08·37+0200 |
commit | 5bc67f42712367008bbe719c57659d7672b9f23f (patch) | |
tree | 27cf4ce82c8fb922e288dac8412a5b867974e727 | |
parent | 7644a1f675dc225f8758b51c8929c715c33d2606 (diff) |
docs: Add some tips and tricks
-rw-r--r-- | docs/tips-and-tricks.md | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/docs/tips-and-tricks.md b/docs/tips-and-tricks.md index e69de29bb2d1..debf014cf684 100644 --- a/docs/tips-and-tricks.md +++ b/docs/tips-and-tricks.md @@ -0,0 +1,67 @@ +Kontemplate tips & tricks +========================= + + +## Update Deployments when ConfigMaps change + +Kubernetes does [not currently][] have the ability to perform rolling updates +of Deployments and other resource types when `ConfigMap` or `Secret` objects +are updated. + +It is possible to make use of annotations and templating functions in +Kontemplate to force updates to these resources anyways (assuming that the +`ConfigMap` or `Secret` contains interpolated variables). + +For example: + +```yaml +# A ConfigMap that contains some data structure in JSON format +--- +kind: ConfigMap +metadata: + name: app-config +data: + configFile: {{ .appConfig | json }} +``` + +Now whenever the `appConfig` variable changes we would like to update the +`Deployment` making use of it, too. We can do this by adding a hash of the +configuration to the annotations of the created `Pod` objects: + +```yaml + +--- +kind: Deployment +metadata: + name: app +spec: + template: + metadata: + annotations: + configHash: {{ .appConfig | json | sha256sum }} + spec: + containers: + - name: app + # Some details omitted ... + volumeMounts: + - name: config + mountPath: /etc/app/ + volumes: + - name: config + configMap: + name: app-config +``` + +Now if the `ConfigMap` object appears first in the resource files, `kubectl` +will apply the resources sequentially and the updated annotation will cause +a rolling update of all relevant pods. + +## direnv & pass + +Users of `pass` may have multiple different password stores on their machines. +Assuming that `kontemplate` configuration exists somewhere on the filesystem +per project, it is easy to use [direnv][] to switch to the correct +`PASSWORD_STORE_DIR` variable when entering the folder. + +[not currently]: https://github.com/kubernetes/kubernetes/issues/22368 +[direnv]: https://direnv.net/ \ No newline at end of file |