K8S log collection (1): create fluentd ds in K8S

download fluentd images

https://hub.docker.com/r/fluent/fluentd-kubernetes-daemonset/

docker pull 192.168.19.111/baseimages/fluentd-kubernetes-daemonset:v0.12-alpine-elasticsearch

Since the image has no kafka plugin to modify the image, the dockerfile file is as follows

FROM 192.168.19.111/baseimages/fluentd-kubernetes-daemonset:v0.12-alpine-elasticsearch
RUN gem install  fluent-plugin-kafka
COPY fluent.conf /fluentd/etc/fluent.conf
ENTRYPOINT ["fluentd","-c","/fluentd/etc/fluent.conf","-p","/fluentd/plugins"]

The last generated image: 192.168.19.111/baseimages/fluentd:201803101322

Create the yaml file of fluentd:

Since fluentd wants to grab the relevant information of the image from kube-apiserver, the sa
sa file must be configured:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: fluentd-es
  namespace: kube-system
  labels:
    k8s-app: fluentd-es
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile

Create the ClusterRole file:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: fluentd-es
  labels:
    k8s-app: fluentd-es
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
rules:
- apiGroups:
  - ""
  resources:
  - "namespaces"
  - "pods"
  verbs:
  - "get"
  - "watch"
  - "list"

Create a ClusterRoleBinding role binding file

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1beta1
metadata:
  name: fluentd-es
  labels:
    k8s-app: fluentd-es
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
subjects:
- kind: ServiceAccount
  name: fluentd-es
  namespace: kube-system
  apiGroup: ""
roleRef:
  kind: ClusterRole
  name: fluentd-es
  apiGroup: ""

Create cm profile

kind: ConfigMap
apiVersion: v1
metadata:
  name: fluentd-config
  namespace: kube-system
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
data:
  fluent.conf: |-
    <source>     
      @type tail
      path /var/log/containers/*.log
      pos_file /var/log/fluentd-containers.log.pos
      time_format %Y-%m-%dT%H:%M:%S.%NZ
      tag kubernetes.*
      format json
    </source>
    <filter kubernetes.**>
       @type kubernetes_metadata
    </filter>
    <match **>
      @type               kafka_buffered
      brokers             192.168.7.204:9092,192.168.7.204:9093,192.168.7.204:9094
      output_data_type    json
      default_topic       test-panjunbai
      compression_codec   gzip
      required_acks       1
    </match>

Create ds file (since /var/log/containers can be processed by fluentd and kube-apiserver connection, the software destination file path of /var/log/containers must be mounted)

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: fluentd-ds
  namespace: kube-system
  labels:
    k8s-app: fluentd
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    matchLabels:
      k8s-app: fluentd
  template:
    metadata:
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ""
      labels:
        k8s-app: fluentd
        kubernetes.io/cluster-service: "true"
    spec:
      serviceAccountName: fluentd-es
      containers:
      - name: fluentd-ds
        image: 192.168.19.111/baseimages/fluentd:201803101322
        resources:
          limits:
            memory: 500Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - mountPath: /var/log
          name: varlog
        - mountPath: /fluentd/etc
          name: fluentd-cm
        - name: tz-config
          mountPath: /etc/localtime
        - name: real-dir
          mountPath: /opt/docker/containers
      terminationGracePeriodSeconds: 30
      volumes:
      - name: real-dir
        hostPath:
          path: /opt/docker/containers
      - name: varlog
        hostPath:
          path: /var/log
      - configMap:
          defaultMode: 420
          items:
          - key: fluent.conf
            path: fluent.conf
          name: fluentd-config
        name: fluentd-cm
      - name: tz-config
        hostPath:
          path: /usr/share/zoneinfo/Asia/Shanghai 

https://docs.fluentd.org/v0.12/articles/kubernetes-fluentd
https://github.com/fluent/fluent-plugin-kafka
https://github.com/fabric8io/fluent-plugin-kubernetes_metadata_filter
https://kubernetes.io/docs/concepts/cluster-administration/logging/

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325026976&siteId=291194637