良品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原理及实例妙解的主要内容,如果未能解决你的问题,请参考以下文章

k8s学习-CKA真题-sidecar代理

k8s~为服务添加sidecar边斗

K8S 1.18版本将内置支持Sidecar容器

Dapr + .NET 实战(十-终篇)K8S运行Dapr

K8s~为pod添加sidecar进行日志收集

DEVOPS架构师 -- 04Kubernetes集群的日志及监控-更新版