• 【良品】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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    举一反三:这样,如果某个服务异常,排错是不是可以通过这个命令获取有用信息?

    再执行命令,可查看到pod内指定容器的日志:kubectl logs -f po/present busybox

    为什么用它? 可能有疑问,为什么不直接用这个命令?而要多此一举。因为,那样,日志分散存在每个容器中,不方便统一管理,采取sidecar方式,万一某个容器挂了,日志自然也无法查看,它的日志若是存在sidecar里,即便如此,也可以存在。

    详情可参看官方网址:https://kubernetes.io/zh-cn/docs/concepts/cluster-administration/logging/


    二、 示例要求

    要求:有个名为present的pod,需要使用sidecar进行日志采集。

    分析:
    1、创建一个pod名为present
    2、包含一个主容器,名为count
    3、包含一个边车容器,名为busybox
    4、在两个容器上挂载一个共享卷 /var
    5、在名为count的容器执行上面的脚本,向日志文件写入内容
    6、在名为busybox的容器执行命令查看到脚本写的内容。


    三、创建并验证

    1、完整的yml配置清单文件如下:

    apiVersion: v1
    kind: Pod
    metadata:
      name: legacy-app
      namespace: default
    spec:
      containers:
      - args:
        - /bin/sh
        - -c
        - 'i=0; while true; do echo "$i: $(date)" >> /var/log/legacy-ap.log; i=$((i+1));
          sleep 1; done'
        image: busybox
        imagePullPolicy: IfNotPresent
        name: count
        resources: {}
        volumeMounts:
        - mountPath: /var/log
          name: logs
    #与args对齐
      - name: busybox
        image: busybox
        imagePullPolicy: IfNotPresent
        args: [/bin/sh, -c, 'tail -n+1 -F /var/log/legacy-ap.log']
        volumeMounts:
        - name: logs
          mountPath: /var/log
    #与containers对齐
      volumes:
      - name: logs
        emptyDir: {}
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    提示:缩进距离一定要准确
    在这里插入图片描述

    2、用上面的配置清单执行创建命令:
    在这里插入图片描述
    3、验证:成功则输出如下:
    在这里插入图片描述

  • 相关阅读:
    136.如何进行离线计算-2
    【狼疮抗凝物-- 抗心磷脂抗体】
    《中国垒球》:决赛会师·占得先机
    java只有值传递:笔试*1
    Linux kill -9 {进程名称}
    MySQL——Centos7下环境安装
    论文复现《SplaTAM: Splat, Track & Map 3D Gaussians for Dense RGB-D SLAM》
    Jtti:怎么判断Linux是否被攻击?
    Rust的模块化
    gitlab 16.2.4 恢复
  • 原文地址:https://blog.csdn.net/Friendsofthewind/article/details/127755403