Каков наилучший способ выполнить в другой контейнер и получить доступ к его каталогу? - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть контейнер, работающий внутри модуля, и я хочу иметь возможность отслеживать его содержимое каждую неделю.Я хочу написать Cubejob для этого.Есть ли лучший способ сделать это?

На данный момент я делаю это, запустив на моем локальном компьютере скрипт, который выполняет kubectl exec my-container и отслеживает содержимое каталога в этом контейнере.

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

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

  • Определить пустой каталог volume
  • Смонтируйте volume в качестве каталога содержимого
  • Также смонтировать этот каталог в коляску, чтобы он мог получить доступ и иметь возможность мониторинга.

Пример:

apiVersion: v1
kind: Pod
metadata:
  name: monitor-by-sidecar
spec:

  restartPolicy: Never

  volumes: # empty directory volume
  - name: shared-data
    emptyDir: {}

  containers:

  - name: container-which-produce-content # This container is main application which generate contect. Suppose in /usr/share/nginx/html directory
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /usr/share/nginx/html
    command: ["/bin/bash", "-c"]
    args:
      - while true;
        do 
        echo "hello world";
        echo "----------------" > /usr/share/nginx/html/index.html;
        cat /usr/share/nginx/html/index.html;
        done

  - name: container-which-run-script-to-monitor # this container will run your monitor scripts. this container mount main application's volume in /pod-data directory and run required scripts.
    image: debian
    volumeMounts:
    - name: shared-data
      mountPath: /pod-data
    command: ["/bin/sh", "-c"]
    args:
    - while true; 
      do 
      echo "hello"; 
      sleep 10;
      ls -la /pod-data/;
      cat /pod-data/index.html;
      done

Пример описания

  • Первый контейнер (с именем контейнер-который-производит-содержимое ) является основным приложением, которое монтирует том emptyDir в /usr/share/nginx/html. В этом каталоге основное приложение будет генерировать данные.
  • Второй контейнер (с именем контейнер, который запускает сценарий для мониторинга ) будет монтировать тот же emptyDir том (с именем shared-data , который также монтируется основным приложением в /usr/share/nginx/html dir) в каталоге /pod-data. /pod-data содержит целые данные, которые основное приложение генерирует в каталоге /usr/share/nginx/html. Затем вы можете запустить свои скрипты в этом каталоге.
0 голосов
/ 14 ноября 2018

kubectl exec my-container звучит прекрасно для меня.Возможно, вы захотите посмотреть this , если хотите запустить kubectl в модуле (Kubernetes CronJob).

Существуют и другие способы, но в зависимости от того, что вы пытаетесь сделать вв долгосрочной перспективе это может быть излишним.Например:

  • Вы можете настроить Fluentd или side / grep sidecar (или ls, если вы используете бинарный файлфайл?) для отправки содержимого или части содержимого этого файла в кластер Elasticsearch.

  • Вы можете настроить Prometheus в Kubernetes для очистки метрик в файловых системах, смонтированных в модуле.Возможно, вам придется использовать пользовательский экспортер в модуле или что-то еще, что экспортирует файлы в точках монтирования в модуле. Это аналогичный пример .

...