K8S学习之基础四十三:k8s中部署elasticsearch

在 Kubernetes (k8s) 中部署 Elasticsearch 通常涉及创建一些 Kubernetes 资源,如 StatefulSet、Service、ConfigMap 和 PersistentVolume。以下是一个简单的步骤指南,帮助你在 Kubernetes 集群中部署 Elasticsearch。

1. 创建命名空间

首先,你可以为 Elasticsearch 创建一个单独的命名空间。

yaml

复制

复制代码
apiVersion: v1
kind: Namespace
metadata:
  name: elasticsearch

将上述内容保存为 namespace.yaml,然后应用:

bash

复制

复制代码
kubectl apply -f namespace.yaml

2. 创建 ConfigMap

ConfigMap 用于存储 Elasticsearch 的配置文件。

yaml

复制

复制代码
apiVersion: v1
kind: ConfigMap
metadata:
  name: elasticsearch-config
  namespace: elasticsearch
data:
  elasticsearch.yml: |
    cluster.name: "my-es-cluster"
    network.host: "0.0.0.0"
    discovery.seed_hosts: "elasticsearch-0.elasticsearch,elasticsearch-1.elasticsearch"
    cluster.initial_master_nodes: "elasticsearch-0,elasticsearch-1"

将上述内容保存为 configmap.yaml,然后应用:

bash

复制

复制代码
kubectl apply -f configmap.yaml

3. 创建 Service

Service 用于暴露 Elasticsearch 集群。

yaml

复制

复制代码
apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
  namespace: elasticsearch
  labels:
    app: elasticsearch
spec:
  ports:
  - port: 9200
    name: http
  - port: 9300
    name: transport
  clusterIP: None
  selector:
    app: elasticsearch

将上述内容保存为 service.yaml,然后应用:

bash

复制

复制代码
kubectl apply -f service.yaml

4. 创建 StatefulSet

StatefulSet 用于管理 Elasticsearch 的 Pod,确保每个 Pod 有唯一的网络标识和持久化存储。

yaml

复制

复制代码
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: elasticsearch
  namespace: elasticsearch
spec:
  serviceName: "elasticsearch"
  replicas: 2
  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: http
        - containerPort: 9300
          name: transport
        env:
        - name: ES_JAVA_OPTS
          value: "-Xms512m -Xmx512m"
        volumeMounts:
        - name: config
          mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
          subPath: elasticsearch.yml
        - name: data
          mountPath: /usr/share/elasticsearch/data
      volumes:
      - name: config
        configMap:
          name: elasticsearch-config
  volumeClaimTemplates:
  - metadata:
      name: data
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 10Gi

将上述内容保存为 statefulset.yaml,然后应用:

bash

复制

复制代码
kubectl apply -f statefulset.yaml

5. 验证部署

你可以通过以下命令来验证 Elasticsearch 是否成功部署:

bash

复制

复制代码
kubectl get pods -n elasticsearch

你应该看到类似以下的输出:

复制

复制代码
NAME              READY   STATUS    RESTARTS   AGE
elasticsearch-0   1/1     Running   0          2m
elasticsearch-1   1/1     Running   0          1m

6. 访问 Elasticsearch

你可以通过以下命令访问 Elasticsearch:

bash

复制

复制代码
kubectl port-forward elasticsearch-0 9200:9200 -n elasticsearch

然后在浏览器中访问 http://localhost:9200,你应该能看到 Elasticsearch 的欢迎页面。

7. 扩展集群

如果你需要扩展 Elasticsearch 集群,可以简单地增加 StatefulSet 的副本数:

bash

复制

复制代码
kubectl scale statefulset elasticsearch --replicas=3 -n elasticsearch

8. 持久化存储

在生产环境中,建议使用持久化存储(如 PersistentVolume)来确保数据不会丢失。你可以根据需要调整 volumeClaimTemplates 中的存储配置。

9. 安全性

在生产环境中,建议启用 Elasticsearch 的安全性功能,如 TLS 加密、身份验证和授权。你可以通过 ConfigMap 和 Secrets 来配置这些功能。

10. 监控和日志

你可以使用 Elasticsearch 自带的监控工具,或者集成 Prometheus 和 Grafana 来监控集群的健康状况。

总结

以上步骤展示了如何在 Kubernetes 中部署一个简单的 Elasticsearch 集群。根据你的需求,你可以进一步调整配置,如增加节点、启用安全性、配置持久化存储等。

相关推荐
阿里云云原生1 小时前
深入内核:拆解 OpenTelemetry eBPF 探针如何优雅地“透视”多语言微服务?
云原生
通信小呆呆2 小时前
当算法有了“五感”:多模态数据融合如何向人体感官协同学习?
人工智能·学习·算法·机器学习·机器人
大志哥1232 小时前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch
H__Rick2 小时前
自动对焦学习-3
人工智能·学习·计算机视觉
Daisy Lee2 小时前
量化学习-第1章-什么是量化金融
学习·金融·datawhale
Alsn863 小时前
等待学习-学习目录:Docker 容器安全攻防
学习·安全·docker
YM52e3 小时前
买菜计算器小应用 - HarmonyOS ArkUI 开发实战-PC版本
学习·华为·harmonyos·鸿蒙·鸿蒙系统
小雨下雨的雨3 小时前
HarmonyOS ArkUI训练营入门-组件掌握系列-Animation 动画效果实现-PC版本
学习·华为·harmonyos·鸿蒙
TableRow4 小时前
参数化搜索的实现原理:从多维索引到查询优化
elasticsearch·全文检索
cqbzcsq4 小时前
CellFlow虚拟细胞论文阅读
论文阅读·人工智能·笔记·学习·生物信息