k8s中 elk
时间: 2025-05-01 19:36:46 浏览: 20
### 在 Kubernetes (k8s) 中部署和使用 ELK 堆栈
#### 1. 部署 Elasticsearch
Elasticsearch 是 ELK 堆栈的核心组件,用于存储和索引日志数据。可以通过 Helm Chart 或 YAML 文件来安装。
以下是通过 YAML 文件的方式部署 Elasticsearch 的示例:
```yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch
spec:
serviceName: "elasticsearch"
replicas: 3
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
ports:
- containerPort: 9200
name: http
- containerPort: 9300
name: transport
env:
- name: discovery.type
value: single-node
---
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
spec:
type: ClusterIP
ports:
- port: 9200
targetPort: 9200
selector:
app: elasticsearch
```
此配置文件定义了一个具有三个副本的 `StatefulSet` 来运行 Elasticsearch 实例[^4]。
---
#### 2. 部署 Fluentd
Fluentd 负责从 Kubernetes Pods 收集日志并将其发送到 Elasticsearch。通常会以 DaemonSet 的形式部署,以便在每个节点上都运行一个实例。
以下是一个简单的 Fluentd 配置示例:
```yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd-elasticsearch
spec:
selector:
matchLabels:
name: fluentd-elasticsearch
template:
metadata:
labels:
name: fluentd-elasticsearch
spec:
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd-elasticsearch
image: quay.io/fluentd_elasticsearch/fluentd:v3.1.1
resources:
limits:
memory: 200Mi
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
```
该配置确保 Fluentd 容器能够访问主机上的日志目录,并将这些日志转发至 Elasticsearch[^2]。
---
#### 3. 部署 Kibana
Kibana 提供了友好的用户界面,允许管理员查询、分析和可视化存储在 Elasticsearch 中的日志数据。
下面是 Kibana 的基本部署配置:
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: kibana
spec:
replicas: 1
selector:
matchLabels:
app: kibana
template:
metadata:
labels:
app: kibana
spec:
containers:
- name: kibana
image: docker.elastic.co/kibana/kibana:7.10.0
ports:
- containerPort: 5601
env:
- name: ELASTICSEARCH_URL
value: "http://elasticsearch.default.svc.cluster.local:9200"
---
apiVersion: v1
kind: Service
metadata:
name: kibana
spec:
type: LoadBalancer
ports:
- port: 5601
targetPort: 5601
selector:
app: kibana
```
上述配置中,Kibana 连接到名为 `elasticsearch` 的服务地址,并暴露端口 5601 给外部访问[^5]。
---
#### 4. 测试与验证
完成以上步骤后,可通过浏览器访问 Kibana UI 并测试其功能。如果一切正常,则可以在 Kibana 上查看由 Fluentd 发送过来的日志数据。
此外,在实际生产环境中还需要考虑高可用性和安全性设置,例如启用 TLS 加密通信、配置 RBAC 规则等[^1]。
---
####
阅读全文
相关推荐

















