gpt4 book ai didi

logging - 如何在谷歌云的 Stackdriver 中获取 kubernetes 容器日志文件的内容?

转载 作者:行者123 更新时间:2023-12-02 12:08:09 25 4
gpt4 key购买 nike

我是 Kubernetes 和谷歌云的新手,我需要一些帮助。

我们在 gke 的 kubernetes 中有一个带有单个容器的 pod。有容器发送到其标准输出的日志消息,还有一些它写入其存储中的几个日志文件的日志消息。

发送到容器标准输出的日志消息由 Stackdriver 挑选,我们可以按预期在那里看到它们。我也想将消息写入堆栈驱动程序中的日志文件。
从我在这里读到的内容中,我的理解是:(https://kubernetes.io/docs/concepts/cluster-administration/logging/#using-a-sidecar-container-with-the-logging-agent),这里的解决方案是在 pod 中添加一个 sidecar 容器,并在两个容器之间共享一个持久卷,并以某种方式复制共享卷中的日志文件,然后使 sidecar 容器将共享日志文件的内容发送到它自己的标准输出(例如,通过向 sidecar 容器发送 tail 命令)。然后这些日志消息将由堆栈驱动程序选择,因为它们位于容器的标准输出中。

问题是,如何将主容器的日志文件与 sidecar 容器共享。我尝试使用符号链接(symbolic link)(通过向第一个容器添加 ln -s 命令)获取共享卷中的日志文件,但是边车容器无法看到这些文件的内容(尽管它能够查看这些文件的列表,我认为因为这只是存储主容器的快捷方式,而不是文件的真实副本)。

另一个问题是,当我在定义我的 pod 的模板文件中向主容器添加命令(使用 command/args[] 的 ln -s 命令)时,将不会运行容器镜像的默认命令!所以我不会再在 stackdriver 中看到我的主容器的原始日志消息了!

顺便说一句,似乎即使将边车容器添加到 pod 本身,也会扰乱我的主容器的正常功能。我认为这与我如何定义我可能缺少某些东西的边车容器有关?

提前感谢您的任何建议!

萨曼塔

最佳答案

您不需要创建任何符号链接(symbolic link)。将卷挂载到主容器中就足够了,这样它就可以直接写入挂载的卷。您链接的页面正是这样描述的。尝试使用以下代码段( source ):

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;
echo "$(date) INFO $i" >> /var/log/2.log;
i=$((i+1));
sleep 1;
done
volumeMounts:
- name: varlog
mountPath: /var/log
- name: count-log-1
image: busybox
args: [/bin/sh, -c, 'tail -n+1 -f /var/log/1.log']
volumeMounts:
- name: varlog
mountPath: /var/log
- name: count-log-2
image: busybox
args: [/bin/sh, -c, 'tail -n+1 -f /var/log/2.log']
volumeMounts:
- name: varlog
mountPath: /var/log
volumes:
- name: varlog
emptyDir: {}

只需使用您自己的主容器代替“计数”容器。当然,如果您的应用程序将日志发送到与/var/log 不同的目录,则需要相应地更改主容器中的 mountPath。

关于logging - 如何在谷歌云的 Stackdriver 中获取 kubernetes 容器日志文件的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46507870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com