# please keep this file synchronized with cluster/addons/fluentd-gcp/fluentd-gcp-ds.yaml
apiVersion: v1
kind: Pod
metadata:
  name: fluentd-cloud-logging
  namespace: kube-system
  labels:
    k8s-app: fluentd-logging
spec:
  dnsPolicy: Default
  containers:
  - name: fluentd-cloud-logging
    image: gcr.io/google_containers/fluentd-gcp:1.35
    # If fluentd consumes its own logs, the following situation may happen:
    # fluentd fails to send a chunk to the server => writes it to the log =>
    # tries to send this message to the server => fails to send a chunk and so on.
    # Writing to a file, which is not exported to the back-end prevents it.
    # It also allows to increase the fluentd verbosity by default.
    command:
      - '/bin/sh'
      - '-c'
      - '/run.sh $FLUENTD_ARGS 2>&1 >>/var/log/fluentd.log'
    resources:
      limits:
        memory: 200Mi
      requests:
        # Any change here should be accompanied by a proportional change in CPU
        # requests of other per-node add-ons (e.g. kube-proxy).
        cpu: 100m
        memory: 200Mi
    volumeMounts:
    - name: varlog
      mountPath: /var/log
    - name: varlibdockercontainers
      mountPath: /var/lib/docker/containers
      readOnly: true
    # Liveness probe is aimed to help in situarions where fluentd
    # silently hangs for no apparent reasons until manual restart.
    # The idea of this probe is that if fluentd is not queueing or
    # flushing chunks for 5 minutes, something is not right. If
    # you want to change the fluentd configuration, reducing amount of
    # logs fluentd collects, consider changing the threshold or turning
    # liveness probe off completely.
    livenessProbe:
      initialDelaySeconds: 600
      periodSeconds: 60
      exec:
        command:
        - '/bin/sh'
        - '-c'
        - >
          LIVENESS_THRESHOLD_SECONDS=${LIVENESS_THRESHOLD_SECONDS:-300};
          STUCK_THRESHOLD_SECONDS=${LIVENESS_THRESHOLD_SECONDS:-900};
          if [ ! -e /var/log/fluentd-buffers ];
          then
            exit 1;
          fi;
          LAST_MODIFIED_DATE=`stat /var/log/fluentd-buffers | grep Modify | sed -r "s/Modify: (.*)/\1/"`;
          LAST_MODIFIED_TIMESTAMP=`date -d "$LAST_MODIFIED_DATE" +%s`;
          if [ `date +%s` -gt `expr $LAST_MODIFIED_TIMESTAMP + $STUCK_THRESHOLD_SECONDS` ];
          then
            rm -rf /var/log/fluentd-buffers;
            exit 1;
          fi;
          if [ `date +%s` -gt `expr $LAST_MODIFIED_TIMESTAMP + $LIVENESS_THRESHOLD_SECONDS` ];
          then
            exit 1;
          fi;
  terminationGracePeriodSeconds: 30
  volumes:
  - name: varlog
    hostPath:
      path: /var/log
  - name: varlibdockercontainers
    hostPath:
      path: /var/lib/docker/containers
