ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

sidecar代理异常容器的日志

2022-04-15 11:33:04  阅读:173  来源: 互联网

标签:容器 name busybox 日志 kubectl sidecar log


官网参考地址:https://kubernetes.io/zh/docs/concepts/cluster-administration/logging/

背景

1.在k8s集群中异常的容器、非标砖的容器通过kubect logs无法查看到容器内部的日志。

2.kubectl describe 查看到的是pod控制器信息的日志,根据报错无法查找到根本原因。

3.控制器的日志也没有明显的报错。

4.kubect debug命令没有,针对比较老的版本。

1.会挂掉的容器

现在的容器即使是启动起来通过kubectl logs -f也不会输出日志信息,describe也没有很有有用的信息。这是一个非标注定义镜像拉起来的容器。所以没有日志信息和任何输出。在这种情况下需要知道容器的日志目录来排查容器内部的信息,具体方法:

1.kubectl edit 资源名称 根据定义的yaml查看。

2.如果在yaml中找不到记录日志的目录,可以通过容器所在的节点使用docker inspect 容器ID查看容器的详细信息来查看容器中日志记录的位置。

cat busy.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: busybox
  name: busybox
spec:
  replicas: 1
  selector:
    matchLabels:
      app: busybox
  template:
    metadata:
      labels:
        app: busybox
    spec:
      containers:
      - image: busybox
        name: busybox
        args: [/bin/sh, -c, 'mkdir -p /var/log;for i in `seq 10`;do echo $i >> /var/log/echo.log;sleep 1;done;exit 1']
        imagePullPolicy: IfNotPresent

2.添加挂载的目录

通过直接在线编辑的方式,需要直接更改控制器的配置文件,在更改之前可以先把原来的yaml备份。

# 备份
kubectl get deployments.apps busybox -o yaml > sidecar.yaml

# 主要的部分
kubectl get deployments.apps busybox -o yaml > 1.txt
[root@k8s ~]# cat 1.txt 
apiVersion: apps/v1
kind: Deployment
metadata:
  annotations:
    deployment.kubernetes.io/revision: "1"
  creationTimestamp: "2022-04-13T16:12:48Z"
  generation: 1
  labels:
    app: busybox
  managedFields:
  - apiVersion: apps/v1
  name: busybox
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 1
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: busybox
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: busybox
    spec:
      containers:
      - args:
        - /bin/sh
        - -c
        # 这里是原容器把日志记录到的目录
        - mkdir -p /var/log;for i in `seq 10`;do echo $i >> /var/log/echo.log;sleep
          1;done;exit 1
        image: busybox
        imagePullPolicy: IfNotPresent
        name: busybox
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        volumeMounts:
        # 问题容器挂载的目录
        - mountPath: /var/log
          name: varlog
          # sidecar查看挂载目录中打印的功能。
      - args:
        - /bin/sh
        - -c
        - tail -n+1 -F /var/log/echo.log
        image: busybox:1.28
        imagePullPolicy: IfNotPresent
        name: count-log-2
        resources: {}
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        # 在sidecar的容器中挂载目录
        volumeMounts:
        - mountPath: /var/log
          name: varlog
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
      # 定义了一个空目录的挂载点
      volumes:
      - emptyDir: {}
        name: varlog

3.更改之后

  1. 直接保存退出
  2. 如果是导出的配置文件,先将原来的资源控制器删除,然后再次kubectl apply -f即可。

4.查看日志的方式

# 方式1
kubectl kubectl logs -f pod_name container_name

# 方式2
kubectl exec 进入手动查看。

标签:容器,name,busybox,日志,kubectl,sidecar,log
来源: https://www.cnblogs.com/gshelldon/p/16148247.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有