docker - Kubernetes - 挂载容器标准输出标准错误日志
问题描述
我使用“ chentex/random-logger ”图像,它将标准输出/标准错误写入容器。我想制作部署 yaml,它运行 chentex 的图像,并将它的日志放在共享卷内的文件中。我可以在不修改图像的情况下做到这一点吗?
这是镜像的简单部署:
apiVersion: v1
kind: Deployment
metadata:
name: random-logger
spec:
replicas: 1
template:
metadata:
labels:
app: random-logger
spec:
containers:
- name: random-logger
image: chentex/random-logger:latest
解决方案
stdout
为在容器中运行的应用程序发送日志消息是最佳实践。chentex/random-logger
只是遵循这种方法,没有任何选项来配置它,但我们可以提出这样的 hack:
apiVersion: apps/v1
kind: Deployment
metadata:
name: random-logger
spec:
selector:
matchLabels:
app: random-logger
template:
metadata:
labels:
app: random-logger
spec:
containers:
- name: random-logger
image: chentex/random-logger:latest
command: ["sh", "-c", "./entrypoint.sh &> /logfile"]
从运行pod
中请求日志时,什么都看不到:
$ kubectl logs random-logger-76c6fd98d5-8d5fm
应用程序日志写入logfile
容器内:
$ kubectl exec random-logger-76c6fd98d5-8d5fm cat /logfile
2019-02-28T00:23:23+0000 DEBUG first loop completed.
2019-02-28T00:23:25+0000 ERROR something happened in this execution.
2019-02-28T00:23:29+0000 INFO takes the value and converts it to string.
2019-02-28T00:23:31+0000 WARN variable not in use.
2019-02-28T00:23:37+0000 INFO takes the value and converts it to string.
虽然这是可能的,但一般不建议这样做。有关更多背景信息,请参阅有关日志架构的 Kubernetes 文档。
推荐阅读
- c# - C# 中 IF ELSE 语句中大括号的规则是什么
- google-analytics - 是否可以将 Google Analytics 集成到我的 JS 库中
- javascript - 传单:如何仅在多边形内显示图层
- node.js - docker-compose:使用节点连接到 mongodb
- mysql - 与本地服务器上的 MariaDB 相比,RDS MySql 上的 COUNT WHERE 性能慢
- javascript - 如何使用 jquery ajax 方法将我的值从我的 php 表中放入 mysql
- power-virtual-agents - 如何将 Power Virtual Agent 连接到 Bot Framework Composer?
- python-3.x - 熊猫数据框中的月份和日期搞砸了
- julia - 使用 for 循环将文字插入数组中的每个表达式
- c# - 避免集合被修改枚举操作可能无法执行