良品k8s的sidecar原理及实例妙解
Posted Friends of the wind
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了良品k8s的sidecar原理及实例妙解相关的知识,希望对你有一定的参考价值。
一、 原理
提示:通过shell脚本,模拟输出的操作日志,并将其输出到某个文件
先要理解下面的shell脚本意思:执行之后会发现,每隔1秒屏幕将时间输出到/var/present.log文件中
vim sidecar-test.sh
内容如下:
#!/bin/bash
i=0
while true;
do
echo "$(date) INFO $i" >> /var/present.log;
i=$((i+1));
sleep 1;
done
执行脚本:sh sidecar-test.sh
举一反三:这样,如果某个服务异常,排错是不是可以通过这个命令获取有用信息?
再执行命令,可查看到pod内指定容器的日志:kubectl logs -f po/present busybox
为什么用它? 可能有疑问,为什么不直接用这个命令?而要多此一举。因为,那样,日志分散存在每个容器中,不方便统一管理,采取sidecar方式,万一某个容器挂了,日志自然也无法查看,它的日志若是存在sidecar里,即便如此,也可以存在。
详情可参看官方网址:https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/logging/
二、 示例要求
要求:有个名为present的pod,需要使用sidecar进行日志采集。
分析:实际上是给pod里面再创建一个容器,这个容器作用,就是把busybox的日志采集出来输出到自己的文件中,通过k8s查看容器日志的方式查看这个文件即可获取busybox的信息。
三、创建并验证
1、完整的yml配置清单文件如下:
apiVersion: v1
kind: Pod
metadata:
name: present
namespace: default
spec:
containers:
- name: busybox
image: busybox
imagePullPolicy: IfNotPresent
args: [/bin/sh, -c, 'tail -n+1 -F /var/present.log']
volumeMounts:
- name: logs
mountPath: /var/
- args:
- /bin/sh
- -c
- 'i=0; while true; do echo "$i: $(date)" >> /var/present.log; i=$((i+1)); sleep
1; done'
image: busybox
imagePullPolicy: IfNotPresent
name: count
resources:
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/
name: logs
volumes:
- name: logs
emptyDir:
提示:缩进距离一定要准确
2、用上面的配置清单执行创建命令:
3、验证:成功则输出如下:
以上是关于良品k8s的sidecar原理及实例妙解的主要内容,如果未能解决你的问题,请参考以下文章