一、简介

  • Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便,轻松扩展服务节点,更能用于日志收集快速检索等等一些列功能。
  • Kibana 是一个为 Elasticsearch 平台分析和可视化的开源平台,使用 Kibana 能够搜索、展示存储在 Elasticsearch 中的索引数据。使用它可以很方便用图表、表格、地图展示和分析数据。
  • Helm:Helm(注意:helm 2.0 版本与 3.0 有很大区别)是与 kubernetes 的 kube-apiserver 进行交互,通过 Kubernetes API 控制应用启动、更新与删除的客户端。

二、资源准备

ElasticSearch 安装有最低安装要求,如果执行 Helm 安装命令后 Pod 无法正常启动,请检查是否符合最低要求的配置。

1、资源要求

ElasticSearch节点 CPU最小要求 内存最小要求
Kubernetes master 核心数 > 2 内存 > 2Gi
Kubernetes data 核心数 > 1 内存 > 2Gi
Kubernetes client 核心数 > 1 内存 > 2Gi

2、ElasticSearch 集群环境

集群名称 节点类型 副本数目 存储大小 网络模式 描述
elasticsearch Kubernetes Master 3 5Gi ClusterIP 主节节点,用于控制 ES 集群
elasticsearch Kubernetes Data 3 50Gi ClusterIP 数据节点,用于存储 ES 数据
elasticsearch Kubernetes Client 2 NodePort(30200) 负责处理用户请求,实现请求转发、负载均衡

3、Kibana 环境信息

应用名称 副本数目 存储大小 网络模式 描述
Kibana 1 NodePort(30601) 用于展示 ElasticSearch 数据的应用

三、配置 StorageClass

配置一个 SotrageClass,用于创建 Kubernetes 存储用的 PV、PVC,因为 ElasticSearch 部署的是 StatefulSet 类型资源,涉及到自动卷分配,需要一个存储卷分配服务。例如,使用 NFS 存储就需要 NFS 共享网络卷的 NFS-Provisioner 服务,能够帮我们自动创建存储空间及 PV 与 PVC,请确认 Kubernetes 集群中存在这样的卷分配服务。这里使用的是 NFS 存储卷,且存在 NFS Provisioner 服务,使用之前创建的 StorageClass,如下:

$ kubectl get StorageClass
NAME                        PROVISIONER       RECLAIMPOLICY   VOLUMEBINDINGMODE      ALLOWVOLUMEEXPANSION   AGE
nfs-storage-new (default)   nfs-client        Delete          Immediate              false                  6d4h

四 、提前下载镜像

提前将要部署的应用的镜像下载,避免安装时因为镜像下载过慢而导致安装失败。这里我们主要用到的两个镜像,下载操作如下:

## 拉取 elasticsearch 镜像
docker pull elasticsearch:7.7.1## 拉取 kibana 镜像
docker pull kibana:7.7.1

五、创建集群证书

ElasticSearch 7.x 版本默认安装了 X-Pack 插件,并且部分功能免费,这里我们配置安全证书文件。

1、生成证书文件

# 运行容器生成证书
docker run --name elastic-charts-certs -i -w /app elasticsearch:7.7.1 /bin/sh -c  \"elasticsearch-certutil ca --out /app/elastic-stack-ca.p12 --pass '' && \elasticsearch-certutil cert --name security-master --dns \security-master --ca /app/elastic-stack-ca.p12 --pass '' --ca-pass '' --out /app/elastic-certificates.p12"# 从容器中将生成的证书拷贝出来
docker cp elastic-charts-certs:/app/elastic-certificates.p12 ./ # 删除容器
docker rm -f elastic-charts-certs# 将 pcks12 中的信息分离出来,写入文件
openssl pkcs12 -nodes -passin pass:'' -in elastic-certificates.p12 -out elastic-certificate.pem

2、添加证书到集群

# 添加证书
kubectl create secret generic elastic-certificates --from-file=elastic-certificates.p12
kubectl create secret generic elastic-certificate-pem --from-file=elastic-certificate.pem# 设置集群用户名密码,用户名不建议修改
kubectl create secret generic elastic-credentials \--from-literal=username=elastic --from-literal=password=admin@123

六、配置应用参数

通过 Helm 安装 需要事先创建一个带有配置参数的 values.yaml 文件。然后再执行 Helm install 安装命令时,指定使用此文件。

1、ElasticSearch Master

创建 es-master-values.yaml 文件

# ============设置集群名称============
## 设置集群名称
clusterName: "elasticsearch"
## 设置节点名称
nodeGroup: "master"
## 设置角色
roles:
master: "true"
ingest: "false"
data: "false"
# ============镜像配置============
## 指定镜像与镜像版本
image: "docker.elastic.co/elasticsearch/elasticsearch"
imageTag: "7.7.1"
## 副本数
replicas: 3
# ============资源配置============
## JVM 配置参数
esJavaOpts: "-Xmx1g -Xms1g"
## 部署资源配置(生成环境一定要设置大些)
resources:
requests:
cpu: "2000m"
memory: "2Gi"
limits:
cpu: "2000m"
memory: "2Gi"
## 数据持久卷配置
persistence:
enabled: true
## 存储数据大小配置
volumeClaimTemplate:
storageClassName: nfs-storage-new
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 5Gi
# ============安全配置============
## 设置协议,可配置为 http、https
protocol: http
## 证书挂载配置,这里我们挂入上面创建的证书
secretMounts:
- name: elastic-certificates
secretName: elastic-certificates
path: /usr/share/elasticsearch/config/certs
## 允许您在/usr/share/elasticsearch/config/中添加任何自定义配置文件,例如 elasticsearch.yml
## ElasticSearch 7.x 默认安装了 x-pack 插件,部分功能免费,这里我们配置下
## 下面注掉的部分为配置 https 证书,配置此部分还需要配置 helm 参数 protocol 值改为 https
esConfig:
elasticsearch.yml: |
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
# xpack.security.http.ssl.enabled: true
# xpack.security.http.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
# xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
## 环境变量配置,这里引入上面设置的用户名、密码 secret 文件
extraEnvs:
- name: ELASTIC_USERNAME
valueFrom:
secretKeyRef:
name: elastic-credentials
key: username
- name: ELASTIC_PASSWORD
valueFrom:
secretKeyRef:
name: elastic-credentials
key: password
# ============调度配置============
## 设置调度策略
## - hard:只有当有足够的节点时 Pod 才会被调度,并且它们永远不会出现在同一个节点上
## - soft:尽最大努力调度
antiAffinity: "hard"
## 容忍配置(一般 kubernetes master 或其它设置污点的节点,只有指定容忍才能进行调度,如果测试环境只有三个节点,则可以开启在 master 节点安装应用)
#tolerations:
#  - operator: "Exists"  ##容忍全部污点

2、ElasticSearch Data

创建 es-data-values.yaml 文件

# ============设置集群名称============
## 设置集群名称
clusterName: "elasticsearch"
## 设置节点名称
nodeGroup: "data"
## 设置角色
roles:master: "false"ingest: "true"data: "true"# ============镜像配置============
## 指定镜像与镜像版本
image: "docker.elastic.co/elasticsearch/elasticsearch"
imageTag: "7.7.1"
## 副本数
replicas: 3# ============资源配置============
## JVM 配置参数
esJavaOpts: "-Xmx1g -Xms1g"
## 部署资源配置(生成环境一定要设置大些)
resources:requests:cpu: "1000m"memory: "2Gi"limits:cpu: "1000m"memory: "2Gi"
## 数据持久卷配置
persistence:enabled: true
## 存储数据大小配置
volumeClaimTemplate:storageClassName: nfs-storage-newaccessModes: [ "ReadWriteOnce" ]resources:requests:storage: 50Gi# ============安全配置============
## 设置协议,可配置为 http、https
protocol: http
## 证书挂载配置,这里我们挂入上面创建的证书
secretMounts:- name: elastic-certificatessecretName: elastic-certificatespath: /usr/share/elasticsearch/config/certs
## 允许您在/usr/share/elasticsearch/config/中添加任何自定义配置文件,例如 elasticsearch.yml
## ElasticSearch 7.x 默认安装了 x-pack 插件,部分功能免费,这里我们配置下
## 下面注掉的部分为配置 https 证书,配置此部分还需要配置 helm 参数 protocol 值改为 https
esConfig:elasticsearch.yml: |xpack.security.enabled: truexpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12# xpack.security.http.ssl.enabled: true# xpack.security.http.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12# xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
## 环境变量配置,这里引入上面设置的用户名、密码 secret 文件
extraEnvs:- name: ELASTIC_USERNAMEvalueFrom:secretKeyRef:name: elastic-credentialskey: username- name: ELASTIC_PASSWORDvalueFrom:secretKeyRef:name: elastic-credentialskey: password# ============调度配置============
## 设置调度策略
## - hard:只有当有足够的节点时 Pod 才会被调度,并且它们永远不会出现在同一个节点上
## - soft:尽最大努力调度
antiAffinity: "hard"
## 容忍配置(一般 kubernetes master 或其它设置污点的节点,只有指定容忍才能进行调度,如果测试环境只有三个节点,则可以开启在 master 节点安装应用)
#tolerations:
#  - operator: "Exists"  ##容忍全部污点

3、ElasticSearch Client

创建 es-client-values.yaml 文件

# ============设置集群名称============
## 设置集群名称
clusterName: "elasticsearch"
## 设置节点名称
nodeGroup: "client"
## 设置角色
roles:
master: "false"
ingest: "false"
data: "false"
# ============镜像配置============
## 指定镜像与镜像版本
image: "docker.elastic.co/elasticsearch/elasticsearch"
imageTag: "7.7.1"
## 副本数
replicas: 2
# ============资源配置============
## JVM 配置参数
esJavaOpts: "-Xmx1g -Xms1g"
## 部署资源配置(生成环境一定要设置大些)
resources:
requests:
cpu: "1000m"
memory: "2Gi"
limits:
cpu: "1000m"
memory: "2Gi"
## 数据持久卷配置
persistence:
enabled: false
# ============安全配置============
## 设置协议,可配置为 http、https
protocol: http
## 证书挂载配置,这里我们挂入上面创建的证书
secretMounts:
- name: elastic-certificates
secretName: elastic-certificates
path: /usr/share/elasticsearch/config/certs
## 允许您在/usr/share/elasticsearch/config/中添加任何自定义配置文件,例如 elasticsearch.yml
## ElasticSearch 7.x 默认安装了 x-pack 插件,部分功能免费,这里我们配置下
## 下面注掉的部分为配置 https 证书,配置此部分还需要配置 helm 参数 protocol 值改为 https
esConfig:
elasticsearch.yml: |
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
# xpack.security.http.ssl.enabled: true
# xpack.security.http.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
# xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
## 环境变量配置,这里引入上面设置的用户名、密码 secret 文件
extraEnvs:
- name: ELASTIC_USERNAME
valueFrom:
secretKeyRef:
name: elastic-credentials
key: username
- name: ELASTIC_PASSWORD
valueFrom:
secretKeyRef:
name: elastic-credentials
key: password
# ============Service 配置============
service:
type: NodePort
nodePort: "30200"

4、Kibana 安装的配置文件

创建 es-kibana-values.yaml 文件

# ============镜像配置============
## 指定镜像与镜像版本
image: "docker.elastic.co/kibana/kibana"
imageTag: "7.7.1"
## 配置 ElasticSearch 地址
elasticsearchHosts: "http://elasticsearch-client:9200"# ============环境变量配置============
## 环境变量配置,这里引入上面设置的用户名、密码 secret 文件
extraEnvs:
- name: 'ELASTICSEARCH_USERNAME'
valueFrom:
secretKeyRef:
name: elastic-credentials
key: username
- name: 'ELASTICSEARCH_PASSWORD'
valueFrom:
secretKeyRef:
name: elastic-credentials
key: password
# ============资源配置============
resources:
requests:
cpu: "1000m"
memory: "2Gi"
limits:
cpu: "1000m"
memory: "2Gi"
# ============配置 Kibana 参数============
## kibana 配置中添加语言配置,设置 kibana 为中文
kibanaConfig:
kibana.yml: |
i18n.locale: "zh-CN"
# ============Service 配置============
service:
type: NodePort
nodePort: "30601"

七、helm 安装

ElasticSearch 与 Kibana 的 Helm Chart 模板是 ES 官方 Github 获取的,它的 Github 地址为 https://github.com/elastic/helm-charts 可以访问该地址了解更多信息。

1、Helm 安装 ElasticSearch

ElaticSearch 安装需要安装三次,分别安装 ElasticSearch Master、ElasticSearch Data、ElasticSearch Client 三组。

  • 安装的第一组 ElasticSearch 作为 Master 角色节点,负责集群间的管理工作;
  • 安装的第二组 ElasticSearch 作为 Data 节点,负责存储数据;
  • 安装的第三组 ElasticSearch 作为 Client 节点,负责代理 ElasticSearch Cluster 集群,负载均衡。

ElasticSearch 安装部署如下:

  • -f:指定部署配置文件
  • –version:指定使用的 Helm Chart 版本号
# 添加 Chart 仓库
helm repo add  elastic    https://helm.elastic.co
helm repo update# 安装 ElasticSearch Master 节点
helm install elasticsearch-master -f es-master-values.yaml --version 7.7.1 elastic/elasticsearch# 安装 ElasticSearch Data 节点
helm install elasticsearch-data -f es-data-values.yaml --version 7.7.1 elastic/elasticsearch# 安装 ElasticSearch Client 节点
helm install elasticsearch-client -f es-client-values.yaml --version 7.7.1 elastic/elasticsearch

⚠️注意:

在安装 Master 节点后 Pod 启动时候会抛出异常,就绪探针探活失败,这是个正常现象。在执行安装 Data 节点后 Master 节点 Pod 就会恢复正常。

2、Helm 安装 Kibana

helm install kibana -f es-kibana-values.yaml --version 7.7.1 elastic/kibana

八、查看安装的应用资源

查看部署完成后各个组件的列表与状态:

$ kubectl get service,pod | grep -E 'elasticsearch|kibana'
service/elasticsearch-client            NodePort    10.96.209.182   <none>        9200:30200/TCP,9300:30209/TCP   3m35s
service/elasticsearch-client-headless   ClusterIP   None            <none>        9200/TCP,9300/TCP               3m35s
service/elasticsearch-data              ClusterIP   10.96.219.21    <none>        9200/TCP,9300/TCP               4m12s
service/elasticsearch-data-headless     ClusterIP   None            <none>        9200/TCP,9300/TCP               4m12s
service/elasticsearch-master            ClusterIP   10.96.37.135    <none>        9200/TCP,9300/TCP               5m11s
service/elasticsearch-master-headless   ClusterIP   None            <none>        9200/TCP,9300/TCP               5m15s
service/kibana-kibana                   NodePort    10.96.107.176   <none>        5601:30601/TCP                  90s
pod/elasticsearch-client-0           0/1     Running   0          3m35s
pod/elasticsearch-client-1           0/1     Running   0          3m35s
pod/elasticsearch-data-0             0/1     Running   0          4m12s
pod/elasticsearch-data-1             0/1     Running   0          4m12s
pod/elasticsearch-data-2             0/1     Running   0          4m11s
pod/elasticsearch-master-0           0/1     Running   0          5m11s
pod/elasticsearch-master-1           0/1     Running   0          5m10s
pod/elasticsearch-master-2           0/1     Running   0          5m9s
pod/kibana-kibana-6f785f69c9-gzc2p   0/1     Running   0          88s

Pod 信息描述:

  • elasticsearch-master:ES 主节点 Pod;
  • elasticsearch-data:ES 数据节点 Pod;
  • elasticsearch-client:ES 客户端节点 Pod;
  • kibana-kibana:Kibana Pod;

十、访问 Kibana 浏览 ElasticSearch 数据

由上面我们指定了 Kibana 的 NodePort 端口为 30601,所以这里我们输入地址:http://nodeIp:30601 访问 Kibana 界面。

然后我们可以看到,会出现登录框,让我们输出用户名、密码,这里我们输入上面配置的用户名、密码elastic/admin@123进行登录:

登录

登录成功后就跳转到 Kibana 主界面:

Kibana 主界面

示例资料:

  • https://github.com/zuozewei/blog-example/tree/master/Kubernetes/k8s-ek

参考链接:
Kubernetes Helm3 部署 ElasticSearch & Kibana 7 集群

Helm部署ElasticSearch Kibana 7 集群相关推荐

  1. Helm部署rancher 高可用集群

    Helm部署rancher 高可用集群 Helm简介 Helm是Kubernetes的一个包管理工具,用来简化Kubernetes应用的部署和管理.可以把Helm比作CentOS的yum工具. Hel ...

  2. 使用Helm将ASP.NET Core应用程序部署到Kubernetes容器集群

    在<容器化单页面应用中RESTful API的访问>以及<容器化单页面应用中Nginx反向代理与Kubernetes部署>两篇文章中,我介绍了一套容器化ASP.NET Core ...

  3. asp网上书店的代码_使用Helm将ASP.NET Core应用程序部署到Kubernetes容器集群

    在<容器化单页面应用中RESTful API的访问>以及<容器化单页面应用中Nginx反向代理与Kubernetes部署>两篇文章中,我介绍了一套容器化ASP.NET Core ...

  4. 服务搭建篇(七) Elasticsearch单节点部署以及多节点集群部署

    感兴趣的话大家可以关注一下公众号 : 猿人刘先生 , 欢迎大家一起学习 , 一起进步 , 一起来交流吧! 1.Elasticsearch Elasticsearch(简称ES) 是一个分布式 , RE ...

  5. 1.ElasticSearch系列之集群部署

    第一步:安装JDK JDK要求jdk1.8+,不安装也可以,ES自带JDK 第二步:系统配置 2.1 禁用交换区 sudo swapoff -a 2.2 开最大文件数的限制 编辑文件 /etc/sec ...

  6. k8s容器部署elasticsearch+kibana+cerebro

    k8s容器部署elasticsearch+kibana+cerebro 文章目录 k8s容器部署elasticsearch+kibana+cerebro 1.operator安装 1.1 版本和yam ...

  7. ElasticSearch:部署ElasticSearch Kibana

    ElasticSearch:部署ElasticSearch & Kibana 以下关于ElasticSearch的介绍来自官网: 查询和分析,从数据中探寻各种问题的答案: 定义您自己的搜索方式 ...

  8. K8S部署工具:KubeOperator集群部署

    K8S部署工具:KubeOperator集群部署 集群信息⚓︎ 项目: 选择集群所属项目 供应商: 支持裸金属(手动模式)和部署计划(自动模式) 版本: 支持版本管理中最新的两个 Kubernetes ...

  9. k8s入门:部署应用到 k8s 集群

    系列文章 第一章:✨ k8s入门:裸机部署 k8s 集群 第二章:✨ k8s入门:部署应用到 k8s 集群 第三章:✨ k8s入门:service 简单使用 第四章:✨ k8s入门:StatefulS ...

最新文章

  1. php如何包含html模板,php html模板中怎么使用类似include的功能?
  2. Nginx upstream的5种权重分配方式分享
  3. hadoop 全分布式部署
  4. ad13批量安装元件库_ad16如何批量添加封装库?
  5. python怎么写脚本执行adb命令_android – 如何使用Python执行adb命令?
  6. 11 Python - dict
  7. OpenMV(二)--IDE安装与固件下载
  8. 用计算机和用纸的区别,英语四级机考与传统纸考的主要区别
  9. 神经网络中快速傅立叶变换(FFT)的梯度传递
  10. Oracle修改数据时提示“record is locked by another user”的解决办法
  11. 《智能数据时代:企业大数据战略与实战》一2.3 自我评估、完善度、信息架构...
  12. 数仓 调度_大数据作业调度
  13. asp.net 事件调用事件问题?
  14. 易如意php,易如意网络验证系统1.1【开源】
  15. 最新版本Eclipse安装SVN插件Subclipse过程
  16. 手把手教你一整套R语言数据分析+建模流程
  17. mybatis数据库字段增加
  18. 数据库delete不释放空间处理方法
  19. Tutorial 05: Synching Video
  20. 为什么后端显示修改成功,但数据库的数据却没有改变

热门文章

  1. c++计算eigen随笔(3)-求逆
  2. 【Python】学习Python的三个神级网站
  3. 【CV】使用 scikit-image 进行图像处理
  4. 温州大学《机器学习》课程课件(三)逻辑回归
  5. Android短视频中如何实现720P磨皮美颜录制?
  6. 直击面试现场:神级程序员仅100秒,60行代码写出俄罗斯方块,成为全公司焦点!...
  7. Andriod开发技巧——Fragment的懒载入
  8. python data analysis | python数据预处理(基于scikit-learn模块)
  9. [一道搜狗输入法的面试题]C++转换构造函数和类型转换函数
  10. C# 实现ADSL自动断网和拨号(适用于拨号用户)