VOL-632: Seperate fluentd config from its image
This update uses a configmap to move fluentd config outside of the
fluentd image, hence no image creation is required on config changes.
Change-Id: Ifb50b0b889d7bc6a8376dd32c1999f3b603e8ffd
diff --git a/k8s/fluentd-config.yml b/k8s/fluentd-config.yml
new file mode 100644
index 0000000..42272fd
--- /dev/null
+++ b/k8s/fluentd-config.yml
@@ -0,0 +1,61 @@
+apiVersion: v1
+data:
+ fluentd.conf: |
+
+# Uncomment this source in environments where voltha services are forwarding logs to the fluentd port directly.
+# <source>
+# @type forward
+# port 24224
+# </source>
+
+ <source>
+ @id fluentd-containers.log
+ @type tail
+ path /var/log/containers/*.log
+ exclude_path ["/var/log/containers/*kube-system*.log"]
+ pos_file /var/log/containers/ag-containers.log.pos
+ time_format %Y-%m-%dT%H:%M:%S.%NZ
+ tag voltha.*
+ log_level debug
+ format json
+ read_from_head true
+ </source>
+ <match **>
+ @type forward
+ heartbeat_type tcp
+
+ # primary host
+ <server>
+ host fluentdactv
+ port 24224
+ </server>
+ # use secondary host
+ <server>
+ host fluentdstby
+ port 24224
+ standby
+ </server>
+ # use longer flush_interval to reduce CPU usage.
+ # note that this is a trade-off against latency.
+ flush_interval 60s
+ </match>
+
+ fluentd-agg.conf: |
+ <source>
+ @type forward
+ port 24224
+ </source>
+ <match **>
+ @type file
+
+ path /fluentd/log/voltha
+ buffer_path /fluentd/log/*.log
+ append true
+ time_slice_wait 10m
+ time_format %Y%m%dT%H%M%S%z
+ time_slice_format %Y%m%d%H
+ </match>
+kind: ConfigMap
+metadata:
+ name: fluentd-config
+ namespace: voltha
diff --git a/k8s/fluentd.yml b/k8s/fluentd.yml
index c8bfa30..f275bc1 100644
--- a/k8s/fluentd.yml
+++ b/k8s/fluentd.yml
@@ -50,17 +50,22 @@
topologyKey: kubernetes.io/hostname
containers:
- name: fluentdactv
- image: voltha-fluentd
+ image: k8s.gcr.io/fluentd-gcp:1.30
imagePullPolicy: Never
volumeMounts:
- name: fluentd-log
mountPath: /fluentd/log
+ - name: config-volume
+ mountPath: /etc/fluentd-config
ports:
- containerPort: 24224
env:
- - name: FLUENTD_CONF
- value: fluent-agg.conf
+ - name: FLUENTD_ARGS
+ value: -c /etc/fluentd-config/fluentd-agg.conf
volumes:
+ - name: config-volume
+ configMap:
+ name: fluentd-config
- name: fluentd-log
hostPath:
path: /var/log/voltha/logging_volume
@@ -114,24 +119,31 @@
topologyKey: kubernetes.io/hostname
containers:
- name: fluentdstby
- image: voltha-fluentd
+ image: k8s.gcr.io/fluentd-gcp:1.30
imagePullPolicy: Never
volumeMounts:
- name: fluentd-log
mountPath: /fluentd/log
+ - name: config-volume
+ mountPath: /etc/fluentd-config
ports:
- containerPort: 24224
env:
- - name: FLUENTD_CONF
- value: fluent-agg.conf
+ - name: FLUENTD_ARGS
+ value: -c /etc/fluentd-config/fluentd-agg.conf
volumes:
+ - name: config-volume
+ configMap:
+ name: fluentd-config
- name: fluentd-log
hostPath:
path: /var/log/voltha/logging_volume
type: Directory
---
#
-# The cluster of fluentd forwarders
+# The cluster of fluentd forwarders. The service itself will be removed once all fluentd forwarding logic are removed
+# from the specific voltha services. Fluentd is defined as a DaemonSet which implies that only 1 instance will
+# run on each node. Each instance will also gets its configuration data from a config map (fluentd-config.yml).
#
apiVersion: v1
kind: Service
@@ -147,37 +159,42 @@
port: 24224
targetPort: 24224
---
-apiVersion: apps/v1beta1
-kind: Deployment
+apiVersion: extensions/v1beta1
+kind: DaemonSet
metadata:
name: fluentd
namespace: voltha
spec:
- replicas: 3
- template:
+ template:
metadata:
labels:
app: fluentd
annotations:
cni: "weave"
spec:
- terminationGracePeriodSeconds: 10
- affinity:
- podAntiAffinity:
- requiredDuringSchedulingIgnoredDuringExecution:
- - labelSelector:
- matchExpressions:
- - key: app
- operator: In
- values:
- - fluentd
- topologyKey: kubernetes.io/hostname
+ tolerations:
+ - key: node-role.kubernetes.io/master
+ effect: NoSchedule
containers:
- name: fluentd
- image: voltha-fluentd
- imagePullPolicy: Never
- ports:
- - containerPort: 24224
+ image: k8s.gcr.io/fluentd-gcp:1.30
env:
- - name: FLUENTD_CONF
- value: fluent.conf
+ - name: FLUENTD_ARGS
+ value: -c /etc/fluentd-config/fluentd.conf
+ volumeMounts:
+ - name: varlog
+ mountPath: /var/log/
+ - name: varlogcontainers
+ mountPath: /var/lib/docker/containers/
+ - name: config-volume
+ mountPath: /etc/fluentd-config
+ volumes:
+ - name: varlog
+ hostPath:
+ path: /var/log/
+ - name: varlogcontainers
+ hostPath:
+ path: /var/lib/docker/containers/
+ - name: config-volume
+ configMap:
+ name: fluentd-config