Я пытаюсь развернуть тестовый модуль с помощью nginx и logrotate sidecar.Logrotate sidecar взят из: logrotate
Конфигурация My Pod yaml:
apiVersion: v1
kind: Pod
metadata:
name: nginx-apache-log
labels:
app: nginx-apache-log
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: logs
mountPath: /var/log
- name: logrotate
image: path/to/logrtr:sidecar
volumeMounts:
- name: logs
mountPath: /var/log
volumes:
- name: logs
emptyDir: {}
Чего я хотел бы добиться, так это просмотра контейнера Logrotate / var / log / / .log, однако с приведенной выше конфигурацией контейнер nginx завершается сбоем, поскольку отсутствует / var / log / nginx:
nginx: [alert] could not open error log file: open() "/var/log/nginx/error.log" failed (2: No such file or directory)
2018/10/15 10:22:12 [emerg] 1#1: open() "/var/log/nginx/error.log" failed (2: No such file or directory)
Однако, если я изменю mountPath для nginx с
mountPath: /var/log
to:
mountPath: /var/log/nginx
затем он запускается, ведя журнал в /var/log/nginx/access.log и error.log, но logrotate sidecar видит все журналы в / var / log, но не/ вар / журнал / Nginx /.Это не проблема только с одним контейнером nginx, но я планирую, чтобы больше приложений контейнера регистрировалось в их собственных папках / var / log / appname.
Есть ли способ исправить / обойти это?Я не хочу запускать коляску для каждого приложения.
Если я изменю конфигурацию моего модуля на:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: logs
mountPath: /var/log
initContainers:
- name: install
image: busybox
command:
- mkdir -p /var/log/nginx
volumeMounts:
- name: logs
mountPath: "/var/log"
, то произойдет сбой:
Warning Failed 52s (x4 over 105s) kubelet, k8s-slave1 Error: failed to start container "install": Error response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused "exec: \"mkdir -p /var/log/nginx\": stat mkdir -p /var/log/nginx: no such file or directory": unknown