k8s实现elk日志收集系统部署
k8s实现elk日志收集系统
说明:es搭建集群,3台master,3台node,node角色分别为热数据,温数据,冷数据
kibana进行数据展示,同时连接es的工具使用es-head。
此处使用deployment+service结合搭建,logstash还未进行试验,等我继续更新。。。
master节点搭建#
######### 创建名称空间 ###########
kind: Namespace
apiVersion: v1
metadata:
name: elastic
---
######## service类型为nodeport用以暴露es端口供外部访问 ########
kind: Service
apiVersion: v1
metadata:
name: es-cluster-nodeport
namespace: elastic
spec:
type: NodePort
selector:
app: es-cluster
ports:
- port: 9200
targetPort: 9200
nodePort: 32700
---
####### es集群间通讯端口,使用service进行暴露,但不像nodeport可对集群外服务器提供访问 #############
kind: Service
apiVersion: v1
metadata:
name: es-svc
namespace: elastic
labels:
app: es-cluster
annotations:
es.kubernetes.io/es: es-cluster
spec:
selector:
app: es-cluster
role: master
ports:
- port: 9300
targetPort: 9300
---
###### es的master创建 #############################
kind: Deployment # 资源类型
apiVersion: apps/v1 # 版本
metadata: # 元数据
namespace: elastic # 名称空间
name: es-cluster-master # deployment类型的元数据名
labels: # 标签
app: es-cluster-master # 定义deployment的标签
role: master
spec: # 说明
replicas: 3 # 副本数为3,表示创建3个pod
selector: # 选择器
matchLabels: # 精确选择
app: es-cluster # 选择标签为 app: es-cluster
role: master # 选择标签为 role: master
template: # 模板
metadata: # 元数据信息
labels: # 标签
app: es-cluster # 此模板的信息
role: master
spec: # 模板对应的说明
containers: # 容器
- name: elasticsearch-master # 名称
image: registry.cn-hangzhou.aliyuncs.com/k8sos/es:v1 # 镜像
ports: # 端口
- containerPort: 9200 # 这里的端口不提供暴露,仅说明
protocol: TCP
- containerPort: 9300
protocol: TCP
lifecycle: # 生命周期,也是回调钩子
postStart: # 当容器启动后执行的操作
exec: # 执行命令
command:
- "/bin/sh"
- "-c"
- "sysctl -w vm.max_map_count=262144; ulimit -l unlimited;"
securityContext: # 安全上下文,指具备对系统的操作权限
privileged: true
readinessProbe: # 就绪性探测
httpGet: # 探测9200端口是否就绪
port: 9200
volumeMounts: # 存储性挂载
- mountPath: /usr/share/elasticsearch/data # 容器中需要挂载的路径
name: es-data # 挂载到的地方,这个名称对应下方的挂载
env: # 此处定义的环境变量相当于在命令行执行命令,替代了配置文件的操作
- name: "cluster.name"
value: "es-cluster"
- name: "bootstrap.memory_lock"
value: "true"
- name: "discovery.zen.ping.unicast.hosts"
value: "es-svc"
- name: "discovery.zen.minimum_master_nodes"
value: "2"
- name: "discovery.zen.ping_timeout"
value: "5s"
- name: "node.master"
value: "true"
- name: "node.data"
value: "false"
- name: "ES_JAVA_OPTS"
value: "-Xms256m -Xmx256m"
- name: "http.cors.enabled"
value: "true"
- name: "http.cors.allow-origin"
value: "*"
volumes: # 对应上方的挂载名
- name: es-data
emptyDir: {}
head插件#
kind: Deployment
apiVersion: apps/v1
metadata:
namespace: elastic
name: es-head
spec:
selector:
matchLabels: # deployment精确匹配选择对应的模板
app: es-head
template:
metadata:
labels:
app: es-head # 模板标签信息,供deployment选择
spec:
containers:
- name: head
image: alvinos/elasticsearch-head
ports:
- containerPort: 9100
protocol: TCP
---
##### 使用nodeport型的service,将pod中的端口进行暴露 ##########
kind: Service
apiVersion: v1
metadata:
name: es-head-svc
namespace: elastic
spec:
type: NodePort
selector:
app: es-head
ports:
- port: 9100
targetPort: 9100
nodePort: 32701
node节点--hot#
kind: Deployment
apiVersion: apps/v1
metadata:
name: es-cluster-data-hot
namespace: elastic
labels: # deployment的标签
app: es-cluster-data-hot
role: data
spec:
selector:
matchLabels: # deployment选择器精确匹配模板中的信息
app: es-cluster
role: data
datatype: hot
template:
metadata:
labels: # 供上方deployment选择器选择
app: es-cluster
role: data
datatype: hot
spec:
containers:
- name: es-cluster-hot
image: registry.cn-hangzhou.aliyuncs.com/k8sos/es:v1
ports:
- containerPort: 9200
protocol: TCP
- containerPort: 9300
protocol: TCP
env: # 环境变量
- name: "cluster.name"
value: "es-cluster"
- name: "bootstrap.memory_lock"
value: "true"
- name: "discovery.zen.ping.unicast.hosts"
value: "es-svc"
- name: "node.master"
value: "false"
- name: "node.data"
value: "true"
- name: "ES_JAVA_OPTS"
value: "-Xms256m -Xmx256m"
- name: "node.attr.box_type"
value: "hot" # 指定为hot数据类型
lifecycle:
postStart: # 容器启动后的操作
exec:
command:
- "/bin/sh"
- "-c"
- "sysctl -w vm.max_map_count=262144; ulimit -l unlimited;"
securityContext:
privileged: true
volumeMounts:
- mountPath: /usr/share/elasticsearch/data
name: es-data
volumes:
- name: es-data
emptyDir: {}
node节点--warm#
kind: Deployment
apiVersion: apps/v1
metadata:
name: es-cluster-data-warm
namespace: elastic
labels:
app: es-cluster-data-warm
role: data
spec:
selector:
matchLabels:
app: es-cluster
role: data
datatype: warm
template:
metadata:
labels:
app: es-cluster
role: data
datatype: warm
spec:
containers:
- name: es-cluster-warm
image: registry.cn-hangzhou.aliyuncs.com/k8sos/es:v1
ports:
- containerPort: 9200
protocol: TCP
- containerPort: 9300
protocol: TCP
env:
- name: "cluster.name"
value: "es-cluster"
- name: "bootstrap.memory_lock"
value: "true"
- name: "discovery.zen.ping.unicast.hosts"
value: "es-svc"
- name: "node.master"
value: "false"
- name: "node.data"
value: "true"
- name: "ES_JAVA_OPTS"
value: "-Xms256m -Xmx256m"
- name: "node.attr.box_type"
value: "warm"
lifecycle:
postStart:
exec:
command:
- "/bin/sh"
- "-c"
- "sysctl -w vm.max_map_count=262144; ulimit -l unlimited;"
securityContext:
privileged: true
readinessProbe:
httpGet:
port: 9200
volumeMounts:
- mountPath: /usr/share/elasticsearch/data
name: es-data
volumes:
- name: es-data
emptyDir: {}
node节点--cold#
kind: Deployment
apiVersion: apps/v1
metadata:
name: es-cluster-data-cold
namespace: elastic
labels:
app: es-cluster-data-cold
role: data
spec:
selector:
matchLabels:
app: es-cluster
role: data
datatype: cold
template:
metadata:
labels:
app: es-cluster
role: data
datatype: cold
spec:
containers:
- name: es-cluster-cold
image: registry.cn-hangzhou.aliyuncs.com/k8sos/es:v1
ports:
- containerPort: 9200
protocol: TCP
- containerPort: 9300
protocol: TCP
env:
- name: "cluster.name"
value: "es-cluster"
- name: "bootstrap.memory_lock"
value: "true"
- name: "discovery.zen.ping.unicast.hosts"
value: "es-svc"
- name: "node.master"
value: "false"
- name: "node.data"
value: "true"
- name: "ES_JAVA_OPTS"
value: "-Xms256m -Xmx256m"
- name: "node.attr.box_type"
value: "cold"
lifecycle:
postStart:
exec:
command:
- "/bin/sh"
- "-c"
- "sysctl -w vm.max_map_count=262144; ulimit -l unlimited;"
securityContext:
privileged: true
readinessProbe:
httpGet:
port: 9200
volumeMounts:
- mountPath: /usr/share/elasticsearch/data
name: es-data
volumes:
- name: es-data
emptyDir: {}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!