Kubernetes收集Pod日志方案_Pod

Kubernetes收集日志方案

使用Volume挂载

通过配置Pod的YAML文件,将宿主机上的目录挂载到Pod中,使Pod中的日志直接写入到宿主机的目录中,从而实现日志的本地保存。这种方法通常使用HostPath或PersistentVolume(PV)和PersistentVolumeClaim(PVC)来实现。

Volume挂载方案

如果使用Volume挂载方案将日志写入宿主机目录,那么即使Pod被删除,宿主机上的日志文件仍然保留。这种方式的好处是简单直接,但需要注意宿主机磁盘空间的管理。

注意事项

  • 安全性:当使用HostPath或挂载宿主机目录时,需要注意安全问题,确保Pod中的应用程序不会意外地访问或修改宿主机上的敏感文件。
  • 数据备份:对于重要的日志数据,建议定期备份以防数据丢失。
  • 资源使用:使用日志收集器或挂载大量日志到宿主机时,需要考虑对集群资源(如CPU、内存、磁盘空间)的影响。

dockerfile

需要修改dockerfile文件 ,让输出的日志保存到容器的某个目录下,然后将这个容器的目录挂载到node的目录下,输出日志文件名为了容易查找设置为pod名称


[root@jenkins jsh]# cat /data/images/jsh/backend_Dockerfile

FROM /jdk/jdk:1.8

MAINTAINER qichen <fqc0112@>

# 添加Jar包到镜像中
ADD jshERP.jar /app.jar

# 设置工作目录(可选,根据您的需求决定是否需要)
WORKDIR /

# 暴露端口
EXPOSE 80

# 启动Jar包,并将日志同时输出到屏幕和文件

ENTRYPOINT sh -c 'java -server -Xms128m -Xmx320m -XX:PermSize=128M -XX:MaxPermSize=256M -Dspring.pid.fail-on-write-error=true -jar /app.jar 2>&1 | tee /jsh-logs/backend-$(hostname).log'
#$(hostname) 这个变量 是pod的名字,这样输出的日志文件容易识别


hostPath

也是我生产上使用的方法


........
.............
#pod.spec.volumes
    spec:
      volumes:
      - name: log-jsh-backend  #起个名字
        hostPath:
          path: /data/log/jsh/backend/   #node的目录 挂载目录
..........
.........
#pod.spec.containers.volumeMounts  
        volumeMounts:
        - name: log-jsh-backend  #引用上面的名字 
          mountPath: /jsh-logs/   #这个是在dockerfile就定义了

PVC

nfs-pvc


[root@k8s-node2 backend]# kubectl get 
NAME         PROVISIONER          RECLAIMPOLICY   VOLUMEBINDINGMODE   ALLOWVOLUMEEXPANSION   AGE
nfs-guoguo   nfs-provisioner-01   Retain          Immediate           false                  6d4h


[root@jenkins jsh]# cat jsh-backend-nfs-pvc-storageclass.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: nfs-jsh-backend-log
  namespace: jsh
spec:
  accessModes:  #使用的模式
  - ReadWriteMany  #可被多个pod同时读写
  resources:
    requests:
      storage: "10Gi"  ##存储大小为10G   不过对于NFS来说 这个没用 限制不了
  storageClassName: nfs-guoguo  # #使用的storageclass名字为

pod的配置文件

# pod.spec.volumes.persistentVolumeClaim
    spec:
      volumes:
      - name: nfs-log-jsh-backend
        persistentVolumeClaim:
          claimName: nfs-jsh-backend-log #pvc的名字

....
....
# pod.spec.containers.volumeMounts
        volumeMounts:
        - name: nfs-log-jsh-backend
          mountPath: /jsh-logs/