sidecar代理异常容器的日志
  DNI8muXYHdAm 2023年11月02日 73 0

官网参考地址:​​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 进入手动查看。




【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  Fo7woytj0C0D   2023年12月23日   31   0   0 pythonsedidepythonidesed
DNI8muXYHdAm