Есть ли способ динамически добавлять значения в файлах deploy.yml? - PullRequest
1 голос
/ 24 февраля 2020

У меня есть файл deploy.yml, в котором я монтирую папку журнала службы в папку на хост-машине. Проблема заключается в том, что когда я запускаю несколько экземпляров, используя один и тот же файл deploy.yml, например, при масштабировании все экземпляры регистрируются в одном и том же файле. Есть ли способ решить эту проблему путем динамического создания папки на хост-машине на основе идентификатора контейнера или чего-то еще. Любые предложения приветствуются. Мой текущий файл deploy.yml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: logstash-deployment
spec:
  selector:
matchLabels:
  app: logstash
  replicas: 2
  template:
    metadata:
      labels:
        app: logstash
    spec:
       containers:
       - name: logstash
         image: logstash:6.8.6
         volumeMounts:
         - mountPath: /usr/share/logstash/config/
           name: config
          - mountPath: /usr/share/logstash/logs/
            name: logs
       volumes:
       - name: config
         hostPath:
           path: "/etc/logstash/"
       - name: logs
         hostPath:
           path: "/var/logs/logstash"

Ответы [ 2 ]

1 голос
/ 24 февраля 2020

В kubernetes есть несколько полей, которые вы можете получить динамически, такие как имя узла, имя pod, pod ip и т. Д. c. Для примера обратитесь к (https://kubernetes.io/docs/tasks/inject-data-application/environment-variable-expose-pod-information/) do c.

Вот пример, в котором вы можете установить имя узла в качестве переменной среды.

env:
        - name: MY_NODE_NAME
          valueFrom:
            fieldRef:
              fieldPath: spec.nodeName

Вы можете изменить свое развертывание таким образом, чтобы оно создавало файл, добавляя к нему имя узла. Таким образом, вы можете иметь разные имена файлов на каждом узле. Рекомендуется создать набор демонов вместо развертывания, который будет порождать один модуль на каждом выбранном узле (выбор может быть сделан с помощью селектора узла).

0 голосов
/ 24 февраля 2020

вы можете использовать sed для динамического добавления некоторых значений

, например: -

apiVersion: apps/v1
kind: Deployment
metadata:
  name: logstash-deployment
spec:
  selector:
matchLabels:
  app: logstash
  replicas: 2
  template:
    metadata:
      labels:
        app: logstash
    spec:
       containers:
       - name: logstash
         image: logstash:6.8.6
         volumeMounts:
         - mountPath: /usr/share/logstash/config/
           name: config
          - mountPath: /usr/share/logstash/logs/
            name: logs
       volumes:
       - name: config
         hostPath:
           path: {path}
       - name: logs
         hostPath:
           path: "/var/logs/logstash"

Теперь я хочу добавить динамически добавить путь

Я просто

set -i "s|{path}:'/etc/logstash/'|g" deployment.yml 

Таким образом, вы можете поместить столько значений, сколько хотите, перед развертыванием файла.

...