## 前言:

前面几章,详细的讲了如何拥有一套k8s集群以及容器的生命周期,探测等,本节将开始实战,用es结合Logstash、Filebeat、kafka、redis等,有疑问的自行往前翻看。

一、开始部署监测服务

我们为了保证每个节点都有数据,我们选择daemoset控制器,让pod平均分布于每一个节点。使用fluentd插件采集容器的数据。
什么是fluentd?
Fluentd插件是Fluentd生态系统的重要组成部分,它为数据收集、处理和输出提供了极大的灵活性。这些插件基于Fluentd开发,并遵守Fluentd输出插件开发规范。 Fluentd支持多种类型的插件,其中一种被广泛应用于将采集到的数据写入DataHub。此外,Fluentd还有一个非常活跃的社区,社区成员贡献了大量的插件,覆盖了各种常见的需求。 例如,在Rainbond中使用Fluentd插件可以方便地收集业务日志,并输出到多个不同的服务。另一个例子是logging-operator,它依赖于自定义的fluentd插件,实现了根据指定的namespaces和labels转发日志。 总的来说,Fluentd插件丰富了Fluentd的功能,提高了数据处理的效率和便利性。

二、fluentd的部署

我们的fluentd也是用pod的方式来运行,所以要给这个pod足够的权限读取api-server。

vim fluentd.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: fluentd
  namespace: kube-logging
  labels:
    app: fluentd
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: fluentd
  labels:
    app: fluentd
rules:
- apiGroups:
  - ""
  resources:
  - pods
  - namespaces
  verbs:
  - get
  - list
  - watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: fluentd
roleRef:
  kind: ClusterRole
  name: fluentd
  apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
  name: fluentd
  namespace: kube-logging
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd
  namespace: kube-logging
  labels:
    app: fluentd
spec:
  selector:
    matchLabels:
      app: fluentd
  template:
    metadata:
      labels:
        app: fluentd
    spec:
      serviceAccount: fluentd
      serviceAccountName: fluentd
      tolerations:
      - key: node-role.kubernetes.io/master
        effect: NoSchedule
      containers:
      - name: fluentd
        image: fluentd:v1.9.1-debian-1.0
        imagePullPolicy: IfNotPresent
        env:
          - name:  FLUENT_ELASTICSEARCH_HOST
            value: "elasticsearch.kube-logging.svc.cluster.local"
          - name:  FLUENT_ELASTICSEARCH_PORT
            value: "9200"
          - name: FLUENT_ELASTICSEARCH_SCHEME
            value: "http"
          - name: FLUENTD_SYSTEMD_CONF
            value: disable
        resources:
          limits:
            memory: 512Mi
          requests:
            cpu: 100m
            memory: 200Mi
        volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers


kubectl apply -f fluentd.yaml

查看:一个节点一个pod

 [root@master elk]# kubectl get pod -n kube-logging  -owide 
NAME                      READY   STATUS    RESTARTS   AGE     IP                NODE     NOMINATED NODE   READINESS GATES
es-cluster-0              1/1     Running   3          3d1h    192.168.104.26    node2    <none>           <none>
es-cluster-1              1/1     Running   3          3d1h    192.168.104.27    node2    <none>           <none>
es-cluster-2              1/1     Running   2          3d1h    192.168.104.25    node2    <none>           <none>
fluentd-n4nhm             1/1     Running   0          2m13s   192.168.104.28    node2    <none>           <none>
fluentd-vxlbn             1/1     Running   0          2m13s   192.168.166.164   node1    <none>           <none>
fluentd-zpxdp             1/1     Running   0          2m13s   192.168.219.71    master   <none>           <none>
kibana-66f59798b7-gd6vh   1/1     Running   2          3d      192.168.166.163   node1    <none>           <none>
[root@master elk]# 

进入面板创建索引查看日志
在这里插入图片描述
在这里插入图片描述

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐