Kubernetes с проблемой точки крепления коляски logrotate - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь развернуть тестовый модуль с помощью 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

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

Если вы запускаете nginx в kubernetes, он, вероятно, регистрируется на stdout.Когда вы запустите kubectl logs <nginx pod> nginx, он покажет вам доступ и журналы ошибок.Эти журналы автоматически регистрируются kubernetes, так что в этом случае вам не понадобится дополнительная логарифмическая коляска.

Если вы когда-либо запускаете модули, которые не регистрируются в stdout, это немного антипаттерн в kubernetes.Для вас всегда выгоднее входить в stdout: kubernetes может позаботиться о ротации журналов, а также легче просматривать журналы с kubectl logs, чем с помощью kubectl exec и рыться в работающем контейнере

0 голосов
/ 15 октября 2018

Оставьте путь монтирования как /var/log.В вашем контейнере nginx выполните mkdir /var/log/nginx в сценарии запуска.Возможно, вам придется немного подправить права доступа к каталогам, чтобы это работало.

...