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 集群。根据你的需求,你可以进一步调整配置,如增加节点、启用安全性、配置持久化存储等。

相关推荐
心中有国也有家17 分钟前
cann-recipes-infer:昇腾 NPU 推理的“菜谱集合”
经验分享·笔记·学习·算法
Upsy-Daisy24 分钟前
AI Agent 项目学习笔记(八):Tool Calling 工具调用机制总览
人工智能·笔记·学习
LuminousCPP2 小时前
数据结构 - 线性表第四篇:C 语言通讯录优化升级全记录(踩坑 + 思考)
c语言·开发语言·数据结构·经验分享·笔记·学习
魔法阵维护师2 小时前
从零开发游戏需要学习的c#模块,第十四章(保存和加载)
学习·游戏·c#
_李小白3 小时前
【android opencv学习笔记】Day 17: 目标追踪(MeanShift)
android·opencv·学习
一只机电自动化菜鸟3 小时前
一建机电备考笔记(40) 建筑机电施工—排水管道施工(含考频+题型)
经验分享·笔记·学习·职场和发展·课程设计
2301_818730563 小时前
numpy的学习(笔记)
学习·numpy
牛奶咖啡134 小时前
k8s容器编排技术实践——使用containerd作为容器运行时部署k8s集群
kubernetes·k8s的安装部署·开启系统的ipvs支持·安装containerd·containerd配置加速器·安装k8s的工具·安装calico网络插件
GHL2842710904 小时前
Logon failed, use ctrl+c to cancel basic credential prompt
学习·prompt
共享家95274 小时前
Langchain的学习(二)
学习·langchain