在Kubernetes(K8S)集群中,日志的采集、存储和分析是非常重要的,能够帮助我们更好地监控和管理集群。EFK(Elasticsearch、Fluentd、Kibana)是一套开源的日志管理方案,能够实现日志的采集、存储和可视化。在Kubernetes中使用EFK对日志进行管理也是非常常见的。

下面我们来看看如何实现在Kubernetes中采集日志并通过EFK进行管理。

### 步骤概览

| 步骤 | 描述 |
| --- | --- |
| 1 | 部署Elasticsearch |
| 2 | 部署Fluentd |
| 3 | 部署Kibana |
| 4 | 配置Fluentd采集Kubernetes日志 |
| 5 | 在Kibana中查看和分析日志 |

### 详细步骤

#### 步骤 1: 部署Elasticsearch

```bash
# 创建Elasticsearch命名空间
kubectl create namespace logging

# 部署Elasticsearch
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/1.13.4/cluster/addons/fluentd-elasticsearch/es-statefulset.yaml -n logging
```

#### 步骤 2: 部署Fluentd

```bash
# 创建Fluentd DaemonSet
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/1.13.4/cluster/addons/fluentd-elasticsearch/fluentd-es-ds.yaml -n logging
```

#### 步骤 3: 部署Kibana

```bash
# 部署Kibana
kubectl apply -f https://raw.githubusercontent.com/kubernetes/kubernetes/1.13.4/cluster/addons/fluentd-elasticsearch/kibana-deployment.yaml -n logging
```

#### 步骤 4: 配置Fluentd采集Kubernetes日志

在Fluentd配置中添加Kubernetes集群日志收集的配置,具体配置文件可根据实际情况进行调整。

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

@type tail
path /var/log/containers/*.log
pos_file /var/log/es-containers.log.pos
time_format %Y-%m-%dT%H:%M:%S.%NZ
tag kubernetes.*
format json
read_from_head true

```

```bash
# 应用Fluentd配置
kubectl apply -f fluentd-configmap.yaml -n logging
```

#### 步骤 5: 在Kibana中查看和分析日志

通过Kibana可以方便地查看和分析采集到的日志,可以创建Dashboard、搜索等功能来实现对日志的管理和监控。

以上就是在Kubernetes中通过EFK采集日志的整个流程,每个步骤的操作和相应的代码示例也已经给出。希望对刚入行的小白有所帮助。当然,实际情况可能因环境、版本等因素有所偏差,具体操作时请根据实际情况进行调整。祝学习顺利!