Использование динамических значений в манифестах Kubernetes
У меня есть два отдельных кластера Kubernetes, которые будут использоваться для промежуточной и производственной среды соответственно. Я хочу иметь манифесты YAML для объектов API Kubernetes, которые я буду отправлять в каждый кластер, но некоторые объекты будут иметь несколько разные конфигурации в двух средах.
В качестве вымышленного, но наглядного примера представьте себе, что на каждом кластере выполняется внутренний реестр Docker, один из которых использует S3 в качестве внутреннего хранилища, а другой - GCS. Контейнер реестра может принимать эти значения конфигурации как переменные среды или считывать из файла, оба из которых Kubernetes поддерживает, но как мне заполнить эти значения для каждой среды?
По сути, я хочу, чтобы манифест выглядел примерно так, где $()
Синтаксис - это интерполяция переменных, которая происходит на сервере при отправке манифеста:
---
apiVersion: v1
kind: Pod
metadata:
name: foo
spec:
containers:
- name: foo
image: foo
env:
- name: bar
value: $(etcdctl get /path/to/bar)
Я мог бы написать шаблоны, которые используют заполнители для значений, а затем обработать шаблон, извлекая реальные значения из некоторого внешнего источника, чтобы создать окончательный манифест, который фактически передается в кластер. Тем не менее, я подумал, что сначала спрошу, если инструмент, который делает это, уже существует, или есть какой-то благословенный Kubernetes способ сделать это, о котором я не знаю. Конечно, многим людям нужно будет использовать Kubernetes.
Другие идеи, которые у меня были, включают использование некоторой комбинации etcd, confd и сценариев на узлах хоста, но это начинает входить в область управления конфигурацией хоста, которую я хочу избежать практически любой ценой. Я использую CoreOS, и хосты полностью предоставляются через coreos-cloudinit. Другими словами, в хост-системе не манипулируют ничем, что не было определено во время создания узла, поэтому традиционные инструменты управления конфигурацией, такие как Ansible, отсутствуют.
Мне известна система секретов Кубернетеса, но некоторые из этих значений переменных могут быть довольно большими, и большинство из них не являются секретами.
3 ответа
Вы не можете сделать это прямо сейчас. Если вы заинтересованы в создании шаблонов, вам необходимо выполнить следующие действия: https://github.com/kubernetes/kubernetes/issues/11492
Также в данный момент это тема обсуждения в конфигурации SIG https://groups.google.com/forum/
Я бы посоветовал вам зарегистрировать свой интерес к этой функции в одном из этих мест.
Это может работать для вас: ktmpl - это инструмент для обработки шаблонов манифестов Kubernetes. Это очень простая реализация предложения Templates + Parameterization на стороне клиента.
Ansible работает для нас очень хорошо. очень легко создавать шаблоны и создавать файлы yaml, но есть также модуль для генерации некоторых ресурсов напрямую http://docs.ansible.com/ansible/kubernetes_module.html