Неполный вывод хвоста из одного и того же файла в разных контейнерах в томе emptyDir Kubernetes

Чтобы проверить, синхронизируется ли файл в томе emptyDir между контейнерами, я использовал tail для наблюдения за одним и тем же файлом в двух контейнерах, и я наткнулся на следующее поведение:

Определение стручка:

apiVersion: v1
kind: Pod
metadata:
  name: fortune
spec:
  containers:
    - image: luksa/fortune
      name: html-generator
      volumeMounts:
        - name: html
          mountPath: /var/htdocs
    - image: nginx:alpine
      name: web-server
      volumeMounts:
        - name: html
          mountPath: /usr/share/nginx/html
          readOnly: true
      ports:
        - containerPort: 80
          protocol: TCP
  volumes:
    - name: html
      emptyDir: {}

Пример был взят из книги Марко Лукса Kubernetes в действии. Вluksa/fortuneизображение просто записывает в файл текст с предсказанием/var/htdocs/index.html внутри html-generatorконтейнер. Каждые 10 секунд записывается новый файл, содержимое которого является выводомfortune.

Хранение одного и того же файла в обоих контейнерах иногда приводит к неполному ответу со стороныweb-server контейнер.

Часть html-generator выход контейнера:

kubectl exec -c html-generator -it fortune -- tail -f /var/htdocs/index.html

The very ink with which all history is written is merely fluid prejudice.
                -- Mark Twain

Часть web-server выход контейнера

kubectl exec -c web-server -it fortune -- tail -f /usr/share/nginx/html/index.html

h all history is written is merely fluid prejudice.
                -- Mark Twain

Вопрос: это вызвано

  1. хвост
  2. низкая скорость ввода-вывода узлового диска
  3. Логика синхронизации тома Kubernetes
  4. что-то другое?

PS: Я также заметил, что cURLing порта модуля веб-службы во время записи index.html заставляет nginx возвращать пустое тело ответа.

1 ответ

Решение

Проблема с неполным выводом из контейнера вызвана nginx alpineиспользуется в определении стручка. Когда вы меняете изображение сnginx:alpine к nginx проблема исчезает из-за того, что в этих изображениях используются разные хвостовые двоичные файлы.

Синхронизация томов Kubernetes вряд ли вызовет проблему - как написано в emptyDir документация

По умолчанию, emptyDir тома хранятся на любом носителе, поддерживающем узел - это может быть диск, SSD или сетевое хранилище, в зависимости от вашей среды.

Раздел, созданный emptyDir недолговечна и приложения не могут ожидать каких - либо SLAs производительности (Disk IOPS, например) из этого раздела так "2. Медленная скорость ввода - вывода диска узла" также может привести к такой проблеме, но на основе воспроизводства и изменения образа (то, что казалось для решения проблемы) могут быть исключены.

Другие вопросы по тегам