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