From 62f7220d6be15c35189a15c5ba0b4416a719586c Mon Sep 17 00:00:00 2001 From: Paul Morie Date: Thu, 19 Nov 2015 23:19:46 -0500 Subject: [PATCH] Proposal: config data volume source --- docs/proposals/config_data.md | 70 ++++++++++++++++++++++++++++++++++- 1 file changed, 69 insertions(+), 1 deletion(-) diff --git a/docs/proposals/config_data.md b/docs/proposals/config_data.md index d06d3b435c..253f961ebb 100644 --- a/docs/proposals/config_data.md +++ b/docs/proposals/config_data.md @@ -173,7 +173,36 @@ type ConfigDataSelector struct { ### Volume Source -The volume source will be addressed in a follow-up PR. +A new `ConfigDataVolumeSource` type of volume source containing the `ConfigData` object will be +added to the `VolumeSource` struct in the API: + +```go +package api + +type VolumeSource struct { + // other fields omitted + ConfigData *ConfigDataVolumeSource `json:"configData,omitempty"` +} + +// ConfigDataVolumeSource represents a volume that holds configuration data +type ConfigDataVolumeSource struct { + // A list of config data keys to project into the volume in files + Files []ConfigDataVolumeFile `json:"files"` +} + +// ConfigDataVolumeFile represents a single file containing config data +type ConfigDataVolumeFile struct { + ConfigDataSelector `json:",inline"` + + // The relative path name of the file to be created. + // Must not be absolute or contain the '..' path. Must be utf-8 encoded. + // The first item of the relative path must not start with '..' + Path string `json:"path"` +} +``` + +**Note:** The update logic used in the downward API volume plug-in will be extracted and re-used in +the volume plug-in for `ConfigData`. ## Examples @@ -237,6 +266,45 @@ spec: key: etcdctl_peers ``` +### Consuming `ConfigData` as Volumes + +`redis-volume-config` is intended to be used as a volume containing a config file: + +```yaml +apiVersion: extensions/v1beta1 +kind: ConfigData +metadata: + name: redis-volume-config +data: + redis.conf: "pidfile /var/run/redis.pid\nport6379\ntcp-backlog 511\n databases 1\ntimeout 0\n" +``` + +The following pod consumes the `redis-volume-config` in a volume: + +```yaml +apiVersion: v1 +kind: Pod +metadata: + name: config-volume-example +spec: + containers: + - name: redis + image: kubernetes/redis + command: "redis-server /mnt/config-data/etc/redis.conf" + ports: + - containerPort: 6379 + volumeMounts: + - name: config-data-volume + mountPath: /mnt/config-data + volumes: + - name: config-data-volume + configData: + files: + - path: "etc/redis.conf" + configDataName: redis-volume-config + key: redis.conf +``` + ### Future Improvements In the future, we may add the ability to specify an init-container that can watch the volume