From 9f71cbc00b017fc9b3ee91909a44a790de1e59bb Mon Sep 17 00:00:00 2001 From: ThanKarab Date: Thu, 28 Nov 2024 19:47:01 +0200 Subject: [PATCH] Added filebeat deployment to send logs to ELK Only controller and worker logs are consumed. --- kubernetes/templates/exareme2-filebeat.yaml | 218 ++++++++++++++++++++ 1 file changed, 218 insertions(+) create mode 100644 kubernetes/templates/exareme2-filebeat.yaml diff --git a/kubernetes/templates/exareme2-filebeat.yaml b/kubernetes/templates/exareme2-filebeat.yaml new file mode 100644 index 000000000..d116f38bc --- /dev/null +++ b/kubernetes/templates/exareme2-filebeat.yaml @@ -0,0 +1,218 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: filebeat + namespace: default + labels: + k8s-app: filebeat +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: filebeat + labels: + k8s-app: filebeat +rules: +- apiGroups: [""] # "" indicates the core API group + resources: + - namespaces + - pods + - nodes + verbs: + - get + - watch + - list +- apiGroups: ["apps"] + resources: + - replicasets + verbs: ["get", "list", "watch"] +- apiGroups: ["batch"] + resources: + - jobs + verbs: ["get", "list", "watch"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: filebeat + # should be the namespace where filebeat is running + namespace: default + labels: + k8s-app: filebeat +rules: + - apiGroups: + - coordination.k8s.io + resources: + - leases + verbs: ["get", "create", "update"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: Role +metadata: + name: filebeat-kubeadm-config + namespace: default + labels: + k8s-app: filebeat +rules: + - apiGroups: [""] + resources: + - configmaps + resourceNames: + - kubeadm-config + verbs: ["get"] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: filebeat +subjects: +- kind: ServiceAccount + name: filebeat + namespace: default +roleRef: + kind: ClusterRole + name: filebeat + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: filebeat + namespace: default +subjects: + - kind: ServiceAccount + name: filebeat + namespace: default +roleRef: + kind: Role + name: filebeat + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: RoleBinding +metadata: + name: filebeat-kubeadm-config + namespace: default +subjects: + - kind: ServiceAccount + name: filebeat + namespace: default +roleRef: + kind: Role + name: filebeat-kubeadm-config + apiGroup: rbac.authorization.k8s.io +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: filebeat-config + namespace: default + labels: + k8s-app: filebeat +data: + filebeat.yml: |- + filebeat.autodiscover: + providers: + - type: kubernetes + node: ${NODE_NAME} + hints.enabled: true + hints.default_config: + enabled: true + type: container + paths: + - /var/log/containers/*-${data.container.id}.log + processors: + - add_kubernetes_metadata: + in_cluster: true + - drop_event: + when: + not: + or: + - equals: + kubernetes.container.name: "controller" + - equals: + kubernetes.container.name: "worker" + multiline.pattern: '^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} - ' + multiline.negate: true + multiline.match: after + + output.logstash: + hosts: ["${LOGSTASH_HOST}:${LOGSTASH_PORT}"] +--- +apiVersion: apps/v1 +kind: DaemonSet +metadata: + name: filebeat + namespace: default + labels: + k8s-app: filebeat +spec: + selector: + matchLabels: + k8s-app: filebeat + template: + metadata: + labels: + k8s-app: filebeat + spec: + serviceAccountName: filebeat + terminationGracePeriodSeconds: 30 + hostNetwork: true + dnsPolicy: ClusterFirstWithHostNet + containers: + - name: filebeat + image: docker.elastic.co/beats/filebeat-wolfi:8.16.0 + args: [ + "-c", "/etc/filebeat.yml", + "-e", + ] + env: + - name: LOGSTASH_HOST + value: 192.168.38.128 + - name: LOGSTASH_PORT + value: "5010" + - name: NODE_NAME + valueFrom: + fieldRef: + fieldPath: spec.nodeName + securityContext: + runAsUser: 0 + # If using Red Hat OpenShift uncomment this: + #privileged: true + resources: + limits: + memory: 200Mi + requests: + cpu: 100m + memory: 100Mi + volumeMounts: + - name: config + mountPath: /etc/filebeat.yml + readOnly: true + subPath: filebeat.yml + - name: data + mountPath: /usr/share/filebeat/data + - name: varlibdockercontainers + mountPath: /var/lib/docker/containers + readOnly: true + - name: varlog + mountPath: /var/log + readOnly: true + volumes: + - name: config + configMap: + defaultMode: 0640 + name: filebeat-config + - name: varlibdockercontainers + hostPath: + path: /var/lib/docker/containers + - name: varlog + hostPath: + path: /var/log + # data folder stores a registry of read status for all files, so we don't send everything again on a Filebeat pod restart + - name: data + hostPath: + # When filebeat runs as non-root user, this directory needs to be writable by group (g+w). + path: /var/lib/filebeat-data + type: DirectoryOrCreate +---