上一篇 我们介绍了 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