🐇明明跟你说过:个人主页

🏅个人专栏:《洞察之眼: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的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐