前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >kubernetes安装es集群

kubernetes安装es集群

原创
作者头像
堕落飞鸟
发布2023-03-30 13:34:42
6380
发布2023-03-30 13:34:42
举报
文章被收录于专栏:飞鸟的专栏

在 Kubernetes 集群上安装 Elasticsearch(ES)集群,可以实现分布式、高可用性的 Elasticsearch 部署,可以提高 Elasticsearch 的稳定性和可靠性。在 Kubernetes 集群中,每个 Elasticsearch 实例都作为一个 Kubernetes pod 运行,多个 Elasticsearch 实例组成一个 ES 集群。

以下是在 Kubernetes 集群上安装 ES 集群的步骤:

创建存储类

ES 需要使用持久化存储来存储数据,因此需要在 Kubernetes 集群中创建一个存储类。存储类定义了如何为 ES 分配存储资源。

可以使用以下 yaml 文件创建一个名为 es-storage-class.yaml 的存储类:

代码语言:javascript
复制
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: es-storage-class
provisioner: kubernetes.io/gce-pd # 修改为你的存储类型
parameters:
  type: pd-standard
  replication-type: none

其中 provisioner 需要根据你的存储类型进行修改,比如如果你使用的是 AWS EBS 存储,可以将 provisioner 修改为 kubernetes.io/aws-ebs

然后执行以下命令创建存储类:

代码语言:javascript
复制
arduinoCopy codekubectl apply -f es-storage-class.yaml

创建 StatefulSet

在 Kubernetes 集群中,ES 实例可以使用 StatefulSet 进行管理。StatefulSet 可以保证每个 ES 实例都有一个唯一的名称和稳定的网络标识符,这对于构建 ES 集群非常重要。

以下是一个名为 es-statefulset.yaml 的示例文件:

代码语言:javascript
复制
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: es
spec:
  replicas: 3 # 修改为你的实例数
  serviceName: elasticsearch
  selector:
    matchLabels:
      app: elasticsearch
  template:
    metadata:
      labels:
        app: elasticsearch
    spec:
      containers:
      - name: elasticsearch
        image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
        ports:
        - containerPort: 9200
          name: rest
        - containerPort: 9300
          name: inter-node
        volumeMounts:
        - name: es-data
          mountPath: /usr/share/elasticsearch/data
      initContainers:
      - name: init-chown
        image: busybox
        command: ['sh', '-c', 'chown -R 1000:1000 /usr/share/elasticsearch/data']
        volumeMounts:
        - name: es-data
          mountPath: /usr/share/elasticsearch/data
  volumeClaimTemplates:
  - metadata:
      name: es-data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      storageClassName: es-storage-class
      resources:
        requests:
          storage: 10Gi # 修改为你的存储大小

在这个示例中,spec.replicas 指定了 ES 实例的数量,spec.serviceName 指定了服务的名称,

ES 实例的容器中使用了 docker.elastic.co/elasticsearch/elasticsearch:7.10.1 镜像,该镜像来自于 Elastic 官方,可以根据自己的需要进行修改。

在容器中挂载了名为 es-data 的持久化存储卷,该卷用于存储 ES 实例的数据。

在 StatefulSet 中还包含一个名为 init-chown 的初始化容器,该容器用于将 ES 数据目录的权限设置为 1000:1000,这是 ES 运行时需要的权限。

最后,通过 volumeClaimTemplates 定义了 ES 数据卷的持久化存储卷模板,包含了存储大小、访问模式等信息。

执行以下命令创建 StatefulSet:

代码语言:javascript
复制
kubectl apply -f es-statefulset.yaml

创建 Service

创建 Service 可以为 ES 实例提供一个稳定的网络标识符,使其能够在集群内互相访问。

以下是一个名为 es-service.yaml 的示例文件:

代码语言:javascript
复制
apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
spec:
  selector:
    app: elasticsearch
  ports:
  - name: rest
    port: 9200
    targetPort: rest
  - name: inter-node
    port: 9300
    targetPort: inter-node

在这个示例中,spec.selector 指定了 Service 对应的标签,这与 StatefulSet 中的标签是一致的。spec.ports 定义了两个端口,分别对应 ES 的 HTTP 端口 9200 和集群间通信端口 9300。

执行以下命令创建 Service:

代码语言:javascript
复制
kubectl apply -f es-service.yaml

配置 ES

在完成 StatefulSet 和 Service 的部署之后,需要对 ES 实例进行配置。可以使用 ConfigMap 来定义 ES 的配置文件。

以下是一个名为 es-config.yaml 的示例文件:

代码语言:javascript
复制
apiVersion: v1
kind: ConfigMap
metadata:
  name: elasticsearch-config
data:
  elasticsearch.yml: |
    cluster.name: es-cluster
    network.host: 0.0.0.0
    node.master: true
    node.data: true
    node.ingest: true
    discovery.seed_hosts: "es-0.elasticsearch,es-1.elasticsearch,es-2.elasticsearch"
    cluster.initial_master_nodes: "es-0,es-1,es-2"
  jvm.options: |
    -Xms2g
    -Xmx2g

在这个示例中,elasticsearch.yml 定义了 ES 的配置项,包括集群名称、网络主机、节点角色等。discovery.seed_hosts 定义了 ES 实例的种子节点列表,cluster.initial_master_nodes 定义了集群的初始主节点列表。

jvm.options 定义了 ES 的 JVM 参数,包括堆内存的最小和最大值。

执行以下命令创建 ConfigMap:

代码语言:javascript
复制
kubectl apply -f es-config.yaml

部署 Head 插件

Head 是一个 ES 的 Web 管理工具,可以通过 Web 界面来管理 ES 集群。以下是一个名为 es-head.yaml 的示例文件:

代码语言:javascript
复制
apiVersion: apps/v1
kind: Deployment
metadata:
  name: es-head
spec:
  replicas: 1
  selector:
    matchLabels:
      app: es-head
  template:
    metadata:
      labels:
        app: es-head
    spec:
      containers:
      - name: es-head
        image: mobz/elasticsearch-head:5
        ports:
        - containerPort: 9100
        env:
        - name: ELASTICSEARCH_HOSTS
          value: "http://elasticsearch:9200"

在这个示例中,spec.template.spec.containers 中定义了 Head 容器。image 指定了 Head 的镜像,该镜像来自于 mobz/elasticsearch-head,可以根据自己的需要进行修改。

ports 定义了 Head 的端口,该端口用于通过 Web 界面访问 ES 集群。

env 定义了 Head 的环境变量,其中 ELASTICSEARCH_HOSTS 指定了 ES 集群的地址。

执行以下命令创建 Head:

代码语言:javascript
复制
kubectl apply -f es-head.yaml

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 创建存储类
  • 创建 StatefulSet
  • 创建 Service
  • 配置 ES
  • 部署 Head 插件
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档