安装 EFK
Elasticsearch 可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。Elasticsearch 是分布式的,这意味着索引可以被分成分片,每个分片可以有 0 个或多个副本。每个节点托管一个或多个分片,并充当协调器将操作委托给正确的分片,再平衡和路由是自动完成的。相关数据通常存储在同一个索引中,该索引由一个或多个主分片和零个或多个复制分片组成。一旦创建了索引,就不能更改主分片的数量。
Fluentd 是一个开源数据收集器,在 Kubernetes 集群节点上安装 Fluentd,通过获取容器日志文件、过滤和转换日志数据,然后将数据传递到 Elasticsearch 集群,在该集群中对其进行索引和存储。
Kibana 是一个数据可视化 Dashboard。
[TOC]
创建 Elasticsearch 集群
# 创建命名空间
apiVersion: v1
kind: Namespace
metadata:
name: efk
---
# 创建 Service,用于在集群内访问
# 相同命名空间使用 `.efk-svc` 访问
# 不同命名空间使用 `.efk-svc.efk.svc.cluster.local` 访问
apiVersion: v1
kind: Service
metadata:
name: efk-svc
namespace: efk
spec:
selector:
app: elasticsearch
clusterIP: None
ports:
- port: 9200
name: rest-port
- port: 9300
name: inter-node
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: es-cluster
namespace: efk
spec:
replicas: 3
revisionHistoryLimit: 10
selector:
matchLabels:
app: elasticsearch
serviceName: efk-svc
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- env:
- name: cluster.name
value: es-cluster
- name: node.name
valueFrom:
fieldRef:
fieldPath: metadata.name
# ES7 `discovery.zen.ping.unicast.hosts` 修改为 `discovery.seed_hosts`
- name: discovery.seed_hosts
value: es-cluster-0.efk-svc,es-cluster-1.efk-svc,es-cluster-2.efk-svc
# 集群自主控制,`cluster.initial_master_nodes` 初始化集群列表
# es-cluster-{0..2} 为 StatefulSet 的 Pod 名
- name: cluster.initial_master_nodes
value: es-cluster-0,es-cluster-1,es-cluster-2
- name: ES_JAVA_OPTS
value: -Xms512m -Xmx512m
image: docker.elastic.co/elasticsearch/elasticsearch:7.3.1
imagePullPolicy: IfNotPresent
name: elasticsearch
ports:
- containerPort: 9200
name: rest-port
- containerPort: 9300
name: inter-node
resources:
limits:
cpu: 200m
memory: 1G
requests:
cpu: 100m
memory: 512M
volumeMounts:
- mountPath: /usr/share/elasticsearch/data
name: es-data
initContainers:
# 修复文件夹权限
# 容器用户和组为 ‘1000’, 因此需要对文件夹及文件有读写权限
- command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]
image: busybox
name: fix-permissions
securityContext:
privileged: true
volumeMounts:
- mountPath: /usr/share/elasticsearch/data
name: es-data
- command: ["sysctl", "-w", "vm.max_map_count=262144"]
image: busybox
name: increase-vm-max-map
securityContext:
privileged: true
- command: ["sh", "-c", "ulimit -n 65536"]
image: busybox
name: increase-fd-ulimit
securityContext:
privileged: true
restartPolicy: Always
# 卷声明
# 此处使用 [NFS-Client](https://github.com/kubernetes-incubator/external-storage/tree/master/nfs-client)
volumeClaimTemplates:
- metadata:
annotations:
volume.beta.kubernetes.io/storage-class: managed-nfs-storage
labels:
app: elasticsearch
name: es-data
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 200M部署 YAML
查看是否启动成功
如果成功,将会显示集群信息
创建 Kibana 服务
部署 Fluentd
创建 RBAC
创建 ConfigMap
创建 DaemonSet
Kibana 添加展示
创建索引

创建测试 Pod
过滤显示测试 Pod 的日志

Last updated
Was this helpful?