网站首页 > 技术教程 正文
简介
在Kubernetes内搭建ES集群时,需要使用的技术如下:
1. k8s集群:需要先搭建一个k8s集群,用于部署和管理ES集群中的各种资源。
2. StatefulSet控制器:使用StatefulSet控制器来管理ES集群中的各个节点,它可以保证每个节点的数据不同,同时也可以自动重建被误删除的节点。
3. Service(NodePort)服务:使用Service来暴露ES节点的端口,使得其他节点可以访问它们。
4. PV、PVC:使用PV(持久卷)和PVC(持久卷声明)来管理ES集群中的存储卷,确保数据持久化。PVC可以申请PV并将其绑定到节点上,以便存储节点的数据。
5. volumeClaimTemplates(存储卷申请模板):使用volumeClaimTemplates来定义和管理PVC,以便在需要时自动创建和管理它们。
创建一个Kubernetes命令空间
在Kubernetes中,命名空间是用于隔离不同应用程序的一种机制。因此,需要创建一个新的Kubernetes命名空间来部署ElasticSearch。
vim namespace.yaml
# 注意,所有的Controller、service等都需要添加到elk命名空间中
# 在查询相关信息时需要命名空间(参数:-n elk)
apiVersion: v1
kind: Namespace
metadata:
name: elk
创建NFS用于ElasticSearch数据
在Kubernetes中,我采用的是NFS实现持久化存储。你现有的环境中没有NFS服务器的话,可以参考我之前的文章Linux下网络共享存储搭建与配置,如果您要在Kubernetes集群中使用NFS存储实现数据持久化可以看一下这篇文章Kubernetes基于NFS实现持久化存储
创建ElasticSearch服务
Service是一种机制,用于将应用程序暴露到集群内的其它组件。因此,需要一个Service来暴露ElasticSearch到集群内的其它组件。
vim service.yaml
apiVersion: v1
kind: Service
metadata:
namespace: elk
name: es-cluster-svc
spec:
externalTrafficPolicy: Cluster
# 设置服务类型
type: NodePort
ports:
- name: rest
protocol: TCP
# 服务端口
port: 9200
# 应用端口(Pod端口)
targetPort: 9200
# 映射到主机的端口
nodePort: 39200
- name: data
protocol: TCP
#ElasticSearch数据端口
port: 9300
selector:
# 注意一定要与"StatefulSet.yaml"中spec.selector.matchLabels相同
app: elasticsearch-app
创建一个ElasticSearch应用
StatefulSet是一种机制,用于部署有状态的应用程序。因此,需要创建一个StatefulSet来部署ElasticSearch
vim StatefulSet.yaml
apiVersion: apps/v1
# 设置控制器
kind: StatefulSet
metadata:
name: es-cluster
namespace: elk
spec:
# 必须设置
serviceName: es-cluster-svc
# 设置副本数
replicas: 3
# 设置选择器
selector:
# 设置标签
matchLabels:
app: elasticsearch-app
template:
metadata:
# 此处必须要与上面的matchLabels相同
labels:
app: elasticsearch-app
spec:
containers:
# 这里我是把镜像上传到了我的Harbor仓库内
- name: es-container
image: 192.168.82.111:80/elk/elasticsearch:8.6.0
ports:
# 容器内端口
- name: rest
containerPort: 9200
protocol: TCP
# 限制CPU数量
resources:
limits:
cpu: 1000m
requests:
cpu: 100m
# 设置挂载目录
volumeMounts:
- name: es-valume
mountPath: /usr/share/elasticsearch/data
# 设置环境变量
env:
# 自定义集群名
- name: cluster.name
value: k8s-es
# 定义节点名,使用metadata.name名称
- name: node.name
valueFrom:
fieldRef:
fieldPath: metadata.name
# 初始化集群时,ES从中选出master节点
- name: cluster.initial_master_nodes
# 对应metadata.name名称加编号,编号从0开始
value: "es-cluster-0,es-cluster-1,es-cluster-2"
# 发现节点的地址,discovery.seed_hosts的值应包括所有master候选节点
# 如果discovery.seed_hosts的值是一个域名,且该域名解析到多个IP地址,那么es将处理其所有解析的IP地址。
- name: discovery.seed_hosts
value: "es-cluster-svc"
# 配置内存
- name: ES_JAVA_OPTS
value: "-Xms1g -Xmx1g"
- name: network.host
value: "0.0.0.0"
- name: xpack.security.transport.ssl.enabled
value: "false"
- name: xpack.security.enabled
value: "false"
volumeClaimTemplates:
- metadata:
# 对应容器中volumeMounts.name
name: es-valume
namespace: elk
spec:
storageClassName: nfs-client
# 存储卷可以被单个节点读写
accessModes:
- ReadWriteMany
# 申请资源的大小
resources:
requests:
storage: 10Gi
访问一下ES看是否正常
总结
总的来说,搭建ES集群需要使用StatefulSet控制器、Service、PV、PVC、volumeClaimTemplates等技术,以便保证集群的高可用性和数据持久化。同时,需要注意使用StatefulSet时节点的编号规则和启动回收的顺序。
猜你喜欢
- 2025-05-28 k8s实战
- 2025-05-28 k8s中部署基于nfs的StorageClass
- 2025-05-28 Kubernetes详解——NFS对PVC和PV使用实战
- 2025-05-28 Milvus部署指南:从单机到分布式,手把手教你玩转向量数据库
- 2025-05-28 kubernetes环境手动部署 Prometheus 监控系统安装文档
- 2025-05-28 k8s集群资源监控
- 2025-05-28 一文了解k8s核心高频常用的内置对象
- 2025-05-28 动手动脑学Kubernetes系列之StatefulSet
- 2025-05-28 「云原生」k8s中volumeMounts.subPath的巧妙用法
- 2025-05-28 Kubernetes数据卷与持久卷
你 发表评论:
欢迎- 05-28k8s实战
- 05-28k8s中部署基于nfs的StorageClass
- 05-28Kubernetes详解——NFS对PVC和PV使用实战
- 05-28Kubernetes日志采集ELK|部署ElasticSearch存储
- 05-28Milvus部署指南:从单机到分布式,手把手教你玩转向量数据库
- 05-28kubernetes环境手动部署 Prometheus 监控系统安装文档
- 05-28k8s集群资源监控
- 05-28一文了解k8s核心高频常用的内置对象
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)