Kubernetes 部署冷热架构 Elasticsearch「Helm 部署案例」

2023-08-02 07:55:56 浏览数 (3)

上一篇 我们介绍了 Elasticsearch ILM 索引生命周期管理。使用 ILM 的前提是具有冷热架构的 ES 集群,本篇就来介绍如何在 Kubernetes 部署这样的集群。

「冷热架构」官方的说法是「热温冷架构」

今天我们讨论 2 个案例,单节点集群和大型多节点集群。

版本兼容性

  • Kubernetes 1.20
  • Helm 3.8
  • Elasticsearch 7.10 , 8.x

获取 helm 仓库

代码语言:txt复制
helm repo add sir5kong https://helm-charts.itboon.top/sir5kong
helm repo update sir5kong

因为官方 helm charts 已经不维护了,并且 8.x 版本有严重 bug,所以我复刻了一份并进行了修改。

部署单节点集群

单节点集群用来做实验,或者作为开发测试环境都是可以的。

代码语言:shell复制
helm upgrade --install elasticsearch 
  --namespace es-demo 
  --create-namespace 
  --set singleNodeEnabled="true" 
  sir5kong/elasticsearch

卸载

代码语言:shell复制
helm uninstall elasticsearch --namespace es-demo

部署大型多节点集群

我们将会部署 3 组节点:

  • 3 个 master 节点
  • 3 个 data_hot 节点
  • 2 个 data_cold 节点

master 可以跟其他节点部署在一起,但是不建议这么操作;data_cold 是可选的,不部署也没有关系。

部署 master

代码语言:shell复制
helm upgrade --install elasticsearch-master 
  --namespace es-demo 
  --create-namespace 
  --set clusterName="elasticsearch" 
  --set nodeGroup="master" 
  --set "roles={master,remote_cluster_client}" 
  --set replicas="3" 
  sir5kong/elasticsearch

部署 data_hot

代码语言:shell复制
helm upgrade --install elasticsearch-data-cold 
  --namespace es-demo 
  --create-namespace 
  --set clusterName="elasticsearch" 
  --set nodeGroup="data-hot" 
  --set "roles={data,data_content,data_hot,data_warm,ingest,ml,remote_cluster_client,transform}" 
  --set replicas="3" 
  sir5kong/elasticsearch

部署 data_cold

代码语言:shell复制
helm upgrade --install elasticsearch-data-cold 
  --namespace es-demo 
  --create-namespace 
  --set clusterName="elasticsearch" 
  --set nodeGroup="data-cold" 
  --set "roles={data_cold}" 
  --set replicas="2" 
  sir5kong/elasticsearch
  • data_cold 是可选的,不部署也没有关系。
  • data_cold 可以选择价格低廉的存储,通过 --set volumeClaimTemplate.storageClassName="Your_Storage_Class" 指定存储类型。

Values 参考

https://github.com/sir5kong/helm-charts-hub/tree/main/charts/elasticsearch/examples/tiers

代码语言:yaml复制
## master
clusterName: elasticsearch
nodeGroup: "master"

roles:
  - master
  - remote_cluster_client

replicas: 3

esJavaOpts: "-Xmx1g -Xms1g"

resources:
  requests:
    cpu: 100m
    memory: 2G
  limits:
    cpu: 4
    memory: 6G

volumeClaimTemplate:
  accessModes: [ "ReadWriteOnce" ]
  # storageClassName: gp2
  resources:
    requests:
      storage: 20Gi
代码语言:yaml复制
clusterName: elasticsearch
nodeGroup: "data-hot"

masterService: "elasticsearch-master"

roles:
  - data
  - data_content
  - data_hot
  - data_warm
  #- data_cold
  - ingest
  - ml
  - remote_cluster_client
  - transform

replicas: 3

esJavaOpts: "-Xmx4g -Xms4g"

resources:
  requests:
    cpu: 2
    memory: 6G
  limits:
    cpu: 6
    memory: 12G

volumeClaimTemplate:
  accessModes: [ "ReadWriteOnce" ]
  # storageClassName: gp2
  resources:
    requests:
      storage: 50Gi

具体资源配额和节点调度请根据实际环境进行调整

卸载

代码语言:shell复制
helm uninstall elasticsearch-master --namespace es-demo
helm uninstall elasticsearch-data-hot --namespace es-demo
helm uninstall elasticsearch-data-cold --namespace es-demo

0 人点赞