Развертывания K8S с общими переменными среды
У нас есть набор развертываний (наборов модулей), которые все используют один и тот же образ докера. Примеры:
- веб-интерфейс
- веб-администратор
- рабочие узлы веб-задач
- задачи данных рабочих узлов
- ...
Все они требуют набора общих переменных среды, например, местоположения узла базы данных, секретных ключей для внешних служб и т. Д. У них также есть набор переменных среды, которые не являются общими.
Есть ли в любом случае, где можно было бы:
- Повторно используйте шаблон, в котором определены переменные среды
- Загрузите переменные среды из файла и установите их в модулях
Оптимальным решением было бы решение, учитывающее пространство имен, поскольку мы разделяем среду тестирования, этап и продукт с помощью пространств имен kubernetes.
Нечто похожее на докеры env_file было бы неплохо. Но я не могу найти какие-либо примеры или ссылки, связанные с этим. Единственное, что я могу найти, это установить env с помощью секретов, но это не совсем понятно, так как мне все еще нужно написать все переменные среды для каждого развертывания.
2 ответа
Вы можете создать ConfigMap со всеми общими kye:value
пары переменных env.
Затем вы можете повторно использовать конфигурационную карту, чтобы объявить все значения configMap
как среда в Deployment
,
Вот пример, взятый из официальных документов Кубернеца.
Создайте ConfigMap, содержащий несколько пар ключ-значение.
apiVersion: v1
kind: ConfigMap
metadata:
name: special-config
namespace: default
data:
SPECIAL_LEVEL: very
SPECIAL_TYPE: charm
Используйте envFrom, чтобы определить все данные ConfigMap как переменные среды Pod. Ключ из ConfigMap становится именем переменной среды в модуле Pod.
apiVersion: v1
kind: Pod
metadata:
name: test-pod
spec:
containers:
- name: test-container
image: k8s.gcr.io/busybox
command: [ "/bin/sh", "-c", "env" ]
envFrom:
- configMapRef:
name: special-config # All the key-value pair will be taken as environment key-value pair
env:
- name: uncommon
value: "uncommon value"
restartPolicy: Never
Вы можете указать необычные переменные env в env
поле.
Теперь, чтобы проверить, действительно ли доступны переменные среды, просмотрите журналы.
$ kubectl logs -f test-pod
KUBERNETES_PORT=tcp://10.96.0.1:443
SPECIAL_LEVEL=very
uncommon=uncommon value
SPECIAL_TYPE=charm
...
Здесь видно, что доступны все предоставленные среды.
вы можете сначала добавить секрет, а затем использовать вновь созданный секрет в своих бесчисленных файлах развертывания, чтобы использовать одну и ту же переменную среды со значением:
kubectl create secret generic jwt-secret --from-literal=JWT_KEY=my_awesome_jwt_secret_code
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth-depl
spec:
replicas: 1
selector:
matchLabels:
app: auth
template:
metadata:
labels:
app: auth
spec:
containers:
- name: auth
image: lord/auth
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
env:
- name: JWT_KEY
valueFrom:
secretKeyRef:
name: jwt-secret
key: JWT_KEY
apiVersion: apps/v1
kind: Deployment
metadata:
name: tickets-depl
spec:
replicas: 1
selector:
matchLabels:
app: tickets
template:
metadata:
labels:
app: tickets
spec:
containers:
- name: tickets
image: lord/tickets
resources:
requests:
memory: "128Mi"
cpu: "250m"
limits:
memory: "256Mi"
cpu: "500m"
env:
- name: JWT_KEY
valueFrom:
secretKeyRef:
name: jwt-secret
key: JWT_KEY
process.env.JWT_KEY