在Kubernetes集群中对日志进行分词是一个非常常见的需求,而采用EFK(Elasticsearch、Fluentd、Kibana)组合是一个很好的选择。本文将详细介绍如何在Kubernetes中实现efk分词k8s日志。

### 整体流程
下面是在Kubernetes中实现efk分词k8s日志的整体流程:

| 步骤 | 描述 |
| --- | --- |
| 1 | 部署Elasticsearch集群 |
| 2 | 部署Fluentd DaemonSet |
| 3 | 部署Kibana Dashboard |

### 具体步骤及代码示例

#### 步骤1:部署Elasticsearch集群
首先我们需要在Kubernetes集群中部署Elasticsearch集群,以下是YAML配置文件示例:

```yaml
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
name: elasticsearch
spec:
version: 7.10.1
nodeSets:
- name: default
count: 3
config:
node.master: true
node.data: true
node.ingest: true
```

这里我们定义了一个Elasticsearch集群,包含3个节点。部署该配置文件可以使用命令:`kubectl apply -f elasticsearch.yaml`

#### 步骤2:部署Fluentd DaemonSet
接下来我们需要在集群中部署Fluentd DaemonSet,用于收集Kubernetes集群的日志并发送到Elasticsearch,以下是部署Fluentd的YAML配置文件示例:

```yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: fluentd-config
data:
fluent.conf: |

@type tail
path /var/log/containers/*.log
pos_file /var/log/es-containers.log.pos
tag kubernetes.*
read_from_head true
format json


@type elasticsearch
host "#{ENV['FLUENT_ELASTICSEARCH_HOST']}"
port "#{ENV['FLUENT_ELASTICSEARCH_PORT']}"
logstash_format true
logstash_prefix kubernetes
include_timestamp true
type_name _doc

---
apiVersion: v1
kind: ServiceAccount
metadata:
name: fluentd
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
spec:
selector:
matchLabels:
name: fluentd
template:
metadata:
labels:
name: fluentd
spec:
serviceAccountName: fluentd
containers:
- name: fluentd
image: fluent/fluentd-kubernetes-daemonset:v1-debian-elasticsearch7-1
env:
- name: FLUENT_ELASTICSEARCH_HOST
value: "[ELASTICSEARCH_HOST]"
- name: FLUENT_ELASTICSEARCH_PORT
value: "9200"
volumeMounts:
- name: varlog
mountPath: /var/log
- name: config-volume
mountPath: /fluentd/etc
volumes:
- name: varlog
hostPath:
path: /var/log
- name: config-volume
configMap:
name: fluentd-config
```

在上面的配置文件中,我们定义了一个Fluentd DaemonSet,用于日志的收集和传输。在部署该配置文件之后,Fluentd会自动将Kubernetes集群中的日志发送到Elasticsearch集群。

#### 步骤3:部署Kibana Dashboard
最后一步是部署Kibana Dashboard,用于可视化Elasticsearch中的日志数据。以下是Kibana的YAML配置文件示例:

```yaml
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
name: kibana
spec:
version: 7.10.1
count: 1
elasticsearchRef:
name: elasticsearch
```

这里我们定义了一个Kibana的部署,指定了版本号和关联的Elasticsearch实例。部署该配置文件可以使用命令:`kubectl apply -f kibana.yaml`

通过以上步骤,我们实现了在Kubernetes中使用EFK组合对日志进行分词的过程。通过Elasticsearch进行日志的存储和索引,通过Fluentd进行日志的收集和传输,通过Kibana进行可视化展示,从而实现了对Kubernetes集群日志的集中管理和分析。

希望以上内容对你理解如何在Kubernetes中实现efk分词k8s日志有所帮助!如果有任何疑问,欢迎随时提出。