Есть ли простой способ отключить linux логов в контейнерах pod kubernetes? - PullRequest
1 голос
/ 29 мая 2020

У меня есть приложение на основе go, развернутое в кластере kubernetes.

Я использую golang:1.13 в качестве базового образа

Папки /var/log в этих контейнерах продолжают заполняться вызывая выселение капсул.

Ответы [ 2 ]

0 голосов
/ 29 мая 2020

Есть несколько способов разобраться с этим, и решение этой проблемы действительно зависит от вашего приложения, среды и вашего творчества.

Документация Kubernetes описывает несколько способов достижения того, что вам нужно, и для всех из них используется logrotate .

Предлагаются следующие варианты:

В качестве примера того, как вы можете использовать свое творчество, чтобы разобраться в этом, простым решением было бы смонтировать том в / var / log и сохранить все свои журналы на внешнем сервере, таким образом вы можете больше места для хранения этих журналов, и вы можете работать с ними извне, очищая или поддерживая sh. В этом примере я использую CronJob для «удаления» файлов.

Пример:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: logsvol
spec:
  storageClassName: manual
  capacity:
    storage: 10Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/mnt/data"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: logsvol
spec:
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi    
---
apiVersion: v1
kind: Pod
metadata:
  name: counter
spec:
  containers:
  - name: count
    image: busybox
    args:
    - /bin/sh
    - -c
    - >
      i=0;
      while true;
      do
        echo "$i: $(date)" >> /var/log/1.log;
        i=$((i+1));
        sleep 1;
      done            
    volumeMounts:
    - name: varlog
      mountPath: /var/log
  volumes:
  - name: varlog
    persistentVolumeClaim:
      claimName: logsvol

Вы можете создать CronJob для очистки (в этом примере я просто перечисляю) эти журналы для вас:

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: logcleaner
spec:
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: hello
            image: busybox
            args:
            - /bin/sh
            - -c
            - ls -l /var/log
            volumeMounts:
            - name: varlog
              mountPath: /var/log
          volumes:
          - name: varlog
            persistentVolumeClaim:
              claimName: logsvol
          restartPolicy: OnFailure
0 голосов
/ 29 мая 2020

Вероятно, у вас должна быть настроена какая-то система ротации журналов, большинство установщиков это делают. Но в противном случае, если вы хотите отключить сбор выходных данных контейнера в файлы журнала, вы можете сделать это в своей конфигурации Dockerd, обычно это настраивается в файле модуля systemd для dockerd, но особенности зависят от вашего развертывания.

...