Есть несколько способов разобраться с этим, и решение этой проблемы действительно зависит от вашего приложения, среды и вашего творчества.
Документация 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