我有一个包含logrotate和nginx容器的Pod:
apiVersion: v1
kind: Pod
metadata:
name: nginx-log
labels:
app: nginx-log
spec:
containers:
- name: logrotate
image: path/to/logrotate:latest
volumeMounts:
- name: logs
mountPath: /var/log
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: logs
mountPath: /var/log/nginx
volumes:
- name: logs
emptyDir: {}我的问题是nginx的日志是/var/ mountPath还是/var/log/ nginx,logrotate容器总是在/var/log/中看到nginx日志,而不是/var/log/nginx/。有没有可能强制nginx在emptyDir中创建nginx/文件夹并在那里登录?
发布于 2018-10-19 18:03:43
我认为在Pod完全部署之前,Init Containers是一个很好的选择,它可以用来运行任务。
示例如下所示:
apiVersion: v1
kind: Pod
metadata:
name: nginx-log
spec:
containers:
- name: logrotate
image: path/to/logrotate:latest
volumeMounts:
- name: logs
mountPath: /var/log
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: logs
mountPath: /var/log/nginx
initContainers:
- name: logs
image: busybox
command: ["mkdir","-p","/var/log/nginx"]
volumeMounts:
- name: logs
mountPath: /var/log/nginx
volumes:
- name: logs
emptyDir: {}您还可以阅读Using InitContainers to pre-populate Volume data in Kubernetes
发布于 2018-10-19 20:42:51
好的,我已经让它工作了:
apiVersion: v1
kind: Pod
metadata:
name: nginx-log
labels:
app: nginx-log
spec:
containers:
- name: logrotate
image: path/to/image/logrotate:latest
volumeMounts:
- name: logs
mountPath: /var/log
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: logs
mountPath: /var/log/nginx
subPath: nginx
volumes:
- name: logs
emptyDir: {}Logrotate side car取自:https://github.com/honestbee
在logrotate.tpl.conf中做了一些小的修改:
${LOGROTATE_PATTERN1}
${LOGROTATE_PATTERN2}
{
rotate ${LOGROTATE_ROTATE}
${LOGROTATE_MODE}
size ${LOGROTATE_SIZE}
missingok
nocompress
su root root
}在Dockerfile中:
FROM alpine:3.8
ENV CRON_SCHEDULE='*/30 * * * *' \
LOGROTATE_SIZE='10M' \
LOGROTATE_MODE='copytruncate' \
LOGROTATE_PATTERN1='/var/log/*.log' \
LOGROTATE_PATTERN2='/var/log/*/*.log' \
LOGROTATE_ROTATE='5'
RUN apk --no-cache add logrotate tini gettext libintl \
&& mkdir -p /var/log \
&& chmod 775 /var/log \
&& mkdir -p /etc/logrotate.d
COPY logrotate.tpl.conf /logrotate.tpl.conf
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
CMD ["/usr/sbin/crond", "-f", "-L", "/dev/stdout"]https://stackoverflow.com/questions/52888685
复制相似问题