Skip to content

Integrate third-party configuration management tools with our config distribution API #2068

Closed
@stp-ip

Description

This issue is based on the suggestions in #1553. I thought getting a clean overview for a renewed discussion was worth the additional issue.

Similar to secret distribution #2030 there is a need to dynamicaly configure applications. Producing or changing configuration scripts via cat, sed or other "hacky" tooling is a method I dislike and I would love a cleaner way of supporting this.

Option 1: envconsul/etcdenv

Pros:

  • Injects etcd/consul values as ENVs
  • Easy way to switch from ENVs to etcd/consul

Cons:

  • Doesn't actually solve config generation

Option 2: confd

Pros:

  • Supports various backends (consul, etcd, ENVs)
  • Supports almost any config structure as it is template based
  • Easy templates using Golang Text Templates
  • Support for one-time and watch (etcd/consul)
  • Command line flags to bootstrap confd config

Cons:

Option 3: viper

Pros:

  • Supports encrypted values via crypt
  • No templates
  • Easy syntax
  • Command line flags to bootstrap viper config

Cons:

  • No ini file support
  • Not as easy for complex configuration files

Option 4: augeas

Pros:

  • Wide range of config formats supported

Cons:

  • Complex syntax especially for complex configurations

Option5: tiller

Pros:

  • Supports almost any config structure as it is template based
  • Ability to "pipe" json configs into a container instead of ENV files

Cons:

  • Template based
  • ERB templates -> more complex than necessary in my opinion
  • Can use container provided .yaml files -> could prevent image sharing

Clarification:

Confd:

@kelseyhightower
Is a config file needed for confd to work or could everything be done using commandline flags?
Can multiple config files be generated, if yes how?

Viper:

@spf13 @bketelsen
Is a config file needed for viper to work or could everything be done using commandline flags?
-> Config file and various other configuration possibilities for viper are optional. It can be used straight via commandline flags.

Overall I think the way to go would be to use confd with ENV as default backend. Furthermore containers should be able to understand a backend switch ENV so that switching to etcd/consul is easily done on a per container level at runtime. This enables easy testing and environment switching. With the addition of watchable configuration via confd more dynamic setups are possible.

Looking forward to your thoughts and suggestions.

Metadata

Assignees

No one assigned

    Labels

    area/app-lifecyclearea/usabilitylifecycle/staleDenotes an issue or PR has remained open with no activity and has become stale.priority/backlogHigher priority than priority/awaiting-more-evidence.sig/service-catalogCategorizes an issue or PR as relevant to SIG Service Catalog.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions