🐇明明跟你说过:个人主页
🏅个人专栏:《洞察之眼:ELK监控与可视化》🏅
🔖行路有良友,便是天堂🔖
目录
一、引言
1、Elasticsearch简介
2、k8s简介
二、存储准备
1、创建PV
2、创建PVC
三、部署Elasticsearch
1、编写YAML文件
2、创建elasticsearch
3、为es创建Service
4、访问测试
一、引言
1、Elasticsearch简介
Elasticsearch 是一个开源的分布式搜索和分析引擎,最初由 Elasticsearch N.V. 公司开发,并于 2010 年首次发布。它建立在 Apache Lucene 基础之上,提供了分布式的实时搜索和分析功能,被广泛应用于各种场景,包括日志分析、全文搜索、监控和可视化等。
以下是 Elasticsearch 的一些重要特点和功能:
1. 分布式架构:
- Elasticsearch 是一个分布式系统,数据可以水平扩展到多个节点上存储和处理。
- 数据被分割成多个分片(Shard),每个分片可以被复制到多个副本(Replica),以提高数据的可用性和容错性。
2. 实时搜索:
- Elasticsearch 提供了快速的实时搜索功能,可以在大规模数据集上快速地进行搜索、过滤和排序。
- 支持复杂的搜索查询语法和全文搜索功能,可以满足各种搜索需求。
3. 多种数据类型:
- Elasticsearch 支持多种数据类型的存储和索引,包括文本、数字、日期、地理位置等。
- 支持结构化数据和非结构化数据的索引和查询。
4. 强大的聚合和分析:
- Elasticsearch 提供了丰富的聚合(Aggregation)功能,可以对数据进行统计、分组、计算等操作。
- 支持各种聚合函数和桶(Bucket)操作,可以生成复杂的数据分析报表和可视化。
5. RESTful API:
- Elasticsearch 提供了基于 RESTful API 的接口,支持各种 HTTP 请求和 CRUD 操作。
- 开发者可以使用各种编程语言和工具与 Elasticsearch 进行交互,实现数据的索引、搜索和分析。
6. 可扩展性和灵活性:
- Elasticsearch 提供了丰富的插件和扩展机制,可以根据需求定制和扩展功能。
- 支持与其他开源工具和系统集成,如 Logstash、Kibana、Beats 等,构建完整的日志分析和监控解决方案。
2、k8s简介
Kubernetes单词起源于希腊语, 是“舵手”或者“领航员、飞行员”的意思。
Kubernetes(简称K8s)的前世今生可以追溯到谷歌(Google)内部的一个项目,它起源于2003年,当时谷歌正面临着不断增长的应用程序和服务的管理挑战。这个项目最初被称为"Borg",是一个早期的容器编排系统。Borg 的成功经验成为 Kubernetes 开发的契机。
有关k8s起源的介绍,请参考《初识K8s之前世今生、架构、组件、前景》这篇文章
Kubernetes的优点包括可移植性、可伸缩性和扩展性。它使用轻型的YAML清单文件实现声明性部署方法,对于应用程序更新,无需重新构建基础结构。管理员可以计划和部署容器,根据需要扩展容器并管理其生命周期。借助Kubernetes的开放源代码API,用户可以通过首选编程语言、操作系统、库和消息传递总线来构建应用程序,还可以将现有持续集成和持续交付(CI/CD)工具集成。
二、存储准备
1、创建PV
编辑YAML文件,创建PV,用于ES数据存储使用
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 5Gi # 指定存储容量
volumeMode: Filesystem
accessModes:
- ReadWriteMany # 允许多个节点同时读写
nfs:
path: /data/csdn # NFS 服务器上的共享路径
server: 192.168.40.132 # NFS 服务器的地址
在这个 YAML 文件中:
- apiVersion:指定 Kubernetes API 的版本。
- kind:指定资源类型,这里是 PersistentVolume。
- metadata:指定持久卷的元数据,包括名称等。
- spec:指定持久卷的规格。
- capacity:指定存储容量。
- volumeMode:指定卷的模式,这里是文件系统模式。
- accessModes:指定访问模式,这里是 ReadWriteMany,表示多个节点可以同时读写。
- persistentVolumeReclaimPolicy:指定持久卷回收策略,这里是 Retain,表示删除 PVC 后保留持久卷数据。
- storageClassName:指定存储类名称,后续 PVC 可以引用该名称。
- nfs:指定 NFS 存储的详细信息。
- path:指定 NFS 服务器上的共享路径。
- server:指定 NFS 服务器的地址。
将以上内容保存到一个 YAML 文件中,例如 nfs-pv.yaml,然后可以使用 kubectl apply -f nfs-pv.yaml 命令在 Kubernetes 集群中创建这个持久卷。
2、创建PVC
编写YAML文件
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany # 与 PV 的访问模式匹配
resources:
requests:
storage: 2Gi # 请求的存储容量
在这个 YAML 文件中:
- apiVersion:指定 Kubernetes API 的版本。
- kind:指定资源类型,这里是 PersistentVolumeClaim。
- metadata:指定持久卷声明的元数据,包括名称等。
- spec:指定持久卷声明的规格。
- accessModes:指定访问模式,这里是 ReadWriteMany,与对应的 PV 的访问模式匹配。
- resources.requests.storage:指定请求的存储容量,这里是 2Gi,表示请求至少 2GB 的存储容量。
将以上内容保存到一个 YAML 文件中,例如 nfs-pvc.yaml,然后可以使用 kubectl apply -f nfs-pvc.yaml 命令在 Kubernetes 集群中创建这个持久卷声明。创建成功后,Kubernetes 将会自动将该 PVC 与对应的 PV 进行绑定。
三、部署Elasticsearch
1、编写YAML文件
apiVersion: apps/v1
kind: Deployment
metadata:
name: elasticsearch
labels:
app: elasticsearch
spec:
replicas: 1
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch
image: elasticsearch:7.17.18 # 使用合适的版本
ports:
- containerPort: 9200
name: http
- containerPort: 9300
name: transport
volumeMounts:
- name: elasticsearch-data
mountPath: /usr/share/elasticsearch/data
env:
- name: "discovery.type"
value: "single-node"
- name: "node.name"
value: "elasticsearch-node"
# 根据需要添加其他环境变量和配置
volumes:
- name: elasticsearch-data
persistentVolumeClaim:
claimName: nfs-pvc
在这个文件中:
- apiVersion 和 kind 分别指定了 Kubernetes 资源的 API 版本和类型,这里是 Deployment。
- metadata 部分包含了该 Deployment 的元数据,如名称和标签。
- spec 部分指定了 Deployment 的规格,包括副本数量、选择器、容器模板等。
- replicas 指定了副本数量,这里是 1。
- selector 指定了用于选择 Pod 的标签。
- template 包含了 Pod 的模板规格,包括容器、卷等。
- containers 中描述了要在 Pod 中运行的容器。
- image 指定了 Elasticsearch 容器的镜像。
- ports 定义了容器的端口映射。
- volumeMounts 定义了将持久卷挂载到容器的路径。
- env 中定义了容器的环境变量。
- volumes 中定义了持久卷声明,这里使用了之前创建的名为 nfs-pvc 的持久卷声明。
2、创建elasticsearch
[root@master csdn]# kubectl apply -f es.yaml
查看Pod状态
3、为es创建Service
这一步是为了能在集群外部使用es
编写创建Service的YAML文件
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
labels:
app: elasticsearch
spec:
type: NodePort
ports:
- port: 9200
name: http
selector:
app: elasticsearch
在这个文件中:
- apiVersion 和 kind 分别指定了 Kubernetes 资源的 API 版本和类型,这里是 Service。
- metadata 部分包含了该 Service 的元数据,如名称和标签。
- spec 部分指定了 Service 的规格。
- type: NodePort 指定了 Service 的类型为 NodePort,这意味着该 Service 将会在每个节点上开放一个相同的端口,外部可以通过节点的 IP 地址和端口访问 Service。
- ports 定义了 Service 监听的端口,这里指定了端口号为 9200,并命名为 http。
- selector 指定了该 Service 应该路由流量到哪些 Pod。在这个例子中,它将流量路由到具有 app: elasticsearch 标签的 Pod。
创建Service
[root@master csdn]# kubectl apply -f es.yaml
查看svc,找到nodeport端口
[root@master csdn]# kubectl get svc
4、访问测试
在浏览器输入node节点的IP加svc的端口
如果可以访问到es的Web界面,则部署成功
💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Kubernetes的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺
🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!