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

相关推荐
2501_9181269138 分钟前
学习python所有用来写ai的语句
人工智能·python·学习
weixin_4434785139 分钟前
flutter组件学习之对话框与提示详解
javascript·学习·flutter
lightqjx1 小时前
【前端】前端学习一之HTML从入门到精通
前端·学习·html
sensen_kiss1 小时前
CAN302 电子商务技术 Pt.1 Web技术导论
前端·网络·学习
FPGA小迷弟1 小时前
FPGA面试题汇总整理(一)
学习·fpga开发·verilog·fpga
FatHonor2 小时前
【golang学习之旅】使用VScode安装配置Go开发环境
vscode·学习·golang
阿里云云原生3 小时前
连登顶会!阿里云多项研究成果大幅提升运维智能精度与效率
云原生
Edward111111113 小时前
3月24 内部类
学习
我不是程序猿儿3 小时前
【嵌入式】适合 STM32 初学者BootLoader 入门学习心得
linux·stm32·单片机·嵌入式硬件·学习