Как перезаписать файл в контейнере pods в файле развертывания Kubernetes?

#elasticsearch #kubernetes

#elasticsearch #kubernetes

Вопрос:

Я хочу перезаписать файл в контейнере pod. Прямо сейчас у меня есть elasticsearch.yml местоположение /usr/share/elasticsearch/config .

Я пытался добиться этого с initContainer помощью файла развертывания kubernetes, поэтому я добавил что-то вроде:

         - name: disabled-the-xpack-security
          image: busybox
          command: 
          - /bin/sh 
          - -c 
          - |
            sleep 20
            rm /usr/share/elasticsearch/config/elasticsearch.yml 
            cp /home/x/IdeaProjects/BD/infra/istio/kube/elasticsearch.yml /usr/share/elasticsearch/config/
          securityContext:
            privileged: true
 

Но это не работает, ошибка выглядит так:

 rm: can't remove '/usr/share/elasticsearch/config/elasticsearch.yml': No such file or directory
cp: can't stat '/home/x/IdeaProjects/BD/infra/istio/kube/elasticsearch.yml': No such file or directory
 

Я пытался использовать некоторые echo "some yaml config" >> elasticsearch.yml из них, но такие обходные пути не работают, потому что я смог сохранить правильное форматирование yaml.

У вас есть какие-либо предложения, как я могу это сделать?

Комментарии:

1. используйте ConfigMap и volumeMount

2. выполнимо ли это на уровне файла развертывания?

3. Вы должны определить ConfigMap, а затем использовать его при развертывании с VoulmeMount для монтирования файла конфигурации внутри развертывания

Ответ №1:

Как указано Арманом в комментариях, вы можете создать ConfigMap с содержимым /home/x/IdeaProjects/BD/infra/istio/kube/elasticsearch.yml и смонтировать его как том в развертывании.

Чтобы создать карту конфигурации из вашего файла, вы можете запустить:

 kubectl create configmap my-es-config --from-file=/home/x/IdeaProjects/BD/infra/istio/kube/elasticsearch.yml
 

Это создаст ConfigMap внутри вашего кластера kubernetes с файлом yaml.

Затем вы можете использовать это и добавить подключение тома к вашему развертыванию как:

   containers:
    - name: elasticsearch
      image: k8s.gcr.io/busybox
      .
      .
      .
      volumeMounts:
      - name: config-volume
        mountPath: /usr/share/elasticsearch/config/
  volumes:
    - name: config-volume
      configMap:
        name: my-es-config
 

Примечания

  • Рекомендуется также создать вашу ConfigMap как yaml. Дополнительная информация здесь
  • Прямое подключение /usr/share/elasticsearch/config/ configmap заменит все внутри этого пути и поместит файл конфигурации из configmap. Если это вызывает проблему, вы можете смонтировать его в другом месте, а затем скопировать.

Комментарии:

1. На самом деле, я хотел указать, что при монтировании всего каталога также будут удалены конфигурации JVM, попробуйте смонтировать файл по другому пути и определите ENV для чтения с нового пути

Ответ №2:

Примечание. если вы не хотите переопределять все в смонтированном каталоге, вы можете смонтировать файл только с помощью «subPath» в любом каталоге, который вы хотите.

https://kubernetes.io/docs/concepts/storage/volumes/#using-subpath