Проблема с разрешением при чтении журналов контейнера с помощью fluentd в Kubernetes

Я действительно новичок в кубернетах, и у меня есть тестовое приложение с redis и mongodb, работающим в GCE. Я хотел бы получить свои файлы журналов с помощью fluentd и отправить их в logz:

Я использую следующий конфигурационный файл fluentd. Я тестировал аналогичную версию на своем локальном компьютере.

<source>
    @type tail
    path /var/log/containers/squidex*.log
    pos_file /var/log/squidex.log.pos
    tag squidex.logs
    format json
</source>

<match squidex.logs>
    @type copy
    <store>
        @type logzio_buffered
        endpoint_url https://listener.logz.io:8071?token=...
        output_include_time true
        output_include_tags true
        buffer_type file
        buffer_path /fluentd/log/squidex.log.buffer
        flush_interval 10s
        buffer_chunk_limit 1m
    </store>
    <store>
        @type stdout
    </store>
</match>

Моя конфигурация кубернетов:

---
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: fluentd-logging
  labels:
    app: fluentd-logging
spec:
  template:
    metadata:
      labels:
        app: fluentd-logging
    spec:
      containers:
      - name: fluentd
        image: gcr.io/squidex-157415/squidex-fluentd:latest
        resources:
          limits:
            memory: 200Mi
          requests:
            cpu: 40m
        volumeMounts:
        - name: varlog
          mountPath: /var/log
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log

Почти все работает, но когда я запускаю модули fluentd, я вижу следующие записи в журнале, выводимом из этих модулей:

2017-04-22T09:49:22.286740784Z 2017-04-22 09:49:22 +0000 [warn]: 
/var/log/containers/squidex-282724611-3nhtw_default_squidex-ed7c437e677d3438c137cdc80110d106339999a6ba8e495a5752fe6d5da9e70d.log unreadable. 
It is excluded and would be examined next time

Как я могу получить разрешения на эти файлы журналов?


person SebastianStehle    schedule 22.04.2017    source источник
comment
Я думаю, что у вас проблема в том, что / var / log / container на самом деле не хранит файлы журнала, а ссылается на них. должны быть связаны с FS, в котором находятся контейнеры. Так что вам, вероятно, следует установить оба   -  person Roi Rav-Hon    schedule 23.04.2017


Ответы (1)


Это не проблема с разрешением, а неработающие символические ссылки. Kubernetes использует символические ссылки с /var/log/containers на /var/log/pods на /var/lib/docker/containers. Вы можете подтвердить это с любого узла вашего кластера, используя ls -la

Ваша конфигурация DaemonSet должна включать что-то вроде:

volumeMounts:
- name: varlog
  mountPath: /var/log/
  readOnly: true
  - name: varlibdockercontainers
  mountPath: /var/lib/docker/containers
  readOnly: true
[...]
volumes:
- name: varlog
  hostPath:
    path: /var/log/
- name: varlibdockercontainers
  hostPath:
    path: /var/lib/docker/containers

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

person Hiruma    schedule 11.10.2017
comment
Монтирую оба каталога. По-прежнему появляется ошибка "Разрешение отказано". Я также проверил с /bin/sh. - person Janshair Khan; 21.10.2020