【问题标题】:Is there an easy way to disable linux logs on kubernetes pod containers?有没有一种简单的方法可以在 kubernetes pod 容器上禁用 linux 日志?
【发布时间】:2020-09-16 11:24:00
【问题描述】:

我在 Kubernetes 集群上部署了一个基于 Go 的应用程序。

我使用golang:1.13 作为我的基本图像

这些容器上的 /var/log 文件夹不断填满,导致 pod 被驱逐。

有没有一种方法可以让我在 deployment.yaml 中指定某些内容,或者我可以禁止将系统日志写入文件系统的类似内容?

【问题讨论】:

    标签: kubernetes dockerfile


    【解决方案1】:

    您可能应该设置某种日志轮换系统,大多数安装程序都会这样做。但是如果做不到这一点,如果您想禁用将容器输出收集到日志文件,您可以在 Dockerd 配置中执行此操作,通常它是在 dockerd 的 systemd 单元文件中设置的,但具体取决于您的部署。

    【讨论】:

      【解决方案2】:

      有几种方法可以解决这个问题,解决这个问题实际上取决于您的应用程序、环境和您的创造力。

      Kubernetes documentation 描述了几种实现您需要的方法,并且在所有这些方法上都使用了 logrotate

      建议是:

      作为一个关于如何利用你的创造力来解决这个问题的示例,一个简单的解决方案是在 /var/log 上挂载一个卷并将所有日志保存在外部,这样你就可以有更多空间来存储这些日志您可以在外部处理它们,根据需要进行清洁或维护。在此示例中,我使用 CronJob 来“删除”文件。

      例子:

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: logsvol
      spec:
        storageClassName: manual
        capacity:
          storage: 10Gi
        accessModes:
          - ReadWriteOnce
        hostPath:
          path: "/mnt/data"
      ---
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: logsvol
      spec:
        storageClassName: manual
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 10Gi    
      ---
      apiVersion: v1
      kind: Pod
      metadata:
        name: counter
      spec:
        containers:
        - name: count
          image: busybox
          args:
          - /bin/sh
          - -c
          - >
            i=0;
            while true;
            do
              echo "$i: $(date)" >> /var/log/1.log;
              i=$((i+1));
              sleep 1;
            done            
          volumeMounts:
          - name: varlog
            mountPath: /var/log
        volumes:
        - name: varlog
          persistentVolumeClaim:
            claimName: logsvol
      

      您可以创建一个 CronJob 来为您清理(在此示例中我只是列出它)这些日志:

      apiVersion: batch/v1beta1
      kind: CronJob
      metadata:
        name: logcleaner
      spec:
        schedule: "*/1 * * * *"
        jobTemplate:
          spec:
            template:
              spec:
                containers:
                - name: hello
                  image: busybox
                  args:
                  - /bin/sh
                  - -c
                  - ls -l /var/log
                  volumeMounts:
                  - name: varlog
                    mountPath: /var/log
                volumes:
                - name: varlog
                  persistentVolumeClaim:
                    claimName: logsvol
                restartPolicy: OnFailure
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-10
        • 1970-01-01
        • 2020-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多