Loading
Loading...

Helm 安装 ElasticSearch & Kibana 7.x 版本

系统环境:

  • helm 版本:v3.2.1
  • Kubernetes 版本:1.18.3
  • ElasticSearch Chart 版本:7.7.1
  • Kibana & ElasticSearch 版本:7.7.1

参考地址:

一、简介

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

二、环境配置

Kubernetes 节点信息

节点名称节点类型CPU 配置Memory 配置
k8s-mastermaster4C4Gi
k8s-node-2-12worker8C8Gi
k8s-node-2-13worker8C8Gi
k8s-node-2-14worker8C8Gi

Elastic 栈 Chart 版本说明

从 7.7 版本开始,elastic 栈的一些图表已达到 GA,如下:

版本ElasticsearchKibanaLogstashFilebeatMetricbeatAPM Server
7.0AlphaAlpha////
7.1BetaBeta/Beta//
7.2BetaBeta/BetaBeta/
7.3BetaBeta/BetaBeta/
7.4BetaBeta/BetaBeta/
7.5BetaBetaBetaBetaBetaAlpha
7.6BetaBetaBetaBetaBetaAlpha
7.7GAGABetaGAGABeta

ElasticSearch 安装资源要求

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

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

ElasticSearch 集群环境信息

集群名称节点类型副本数目存储大小网络模式描述
elasticsearchKubernetes Master35GiClusterIP主节节点,用于控制 ES 集群
elasticsearchKubernetes Data350GiClusterIP数据节点,用于存储 ES 数据
elasticsearchKubernetes Client2NodePort(30200)负责处理用户请求,实现请求转发、负载均衡

Kibana 环境信息

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

三、配置 StorageClass

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

例如,本人使用的是 NFS 存储卷,且存在 NFS Provisioner 服务,则可以按以下配置 StorageClass,如下:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: nfs-storage
provisioner: nfs-client ## 需要和 NFS-Provisioner 服务提供者提供的配置的保持一致
allowVolumeExpansion: true
reclaimPolicy: Delete

其他存储卷系统请自行查询如何配置 StorageClass,当然也可以提前设置 PVC,然后在 Heml 配置参数文件 values.yaml 中指定要用的 PVC 名称。

四、提前下载镜像

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

Terminal window
## 拉取 elasticsearch 镜像
$ docker pull elasticsearch:7.7.1
## 拉取 kibana 镜像
$ docker pull kibana:7.7.1

五、创建集群证书

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

1、生成证书文件

Terminal window
# 运行容器生成证书
$ 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、添加证书到 Kubernetes

Terminal window
# 添加证书
$ kubectl create secret -n mydlqcloud generic elastic-certificates --from-file=elastic-certificates.p12
# 设置集群用户名密码,用户名不建议修改
$ kubectl create secret -n mydlqcloud generic elastic-credentials \
--from-literal=username=elastic --from-literal=password=mydlq123

六、配置应用参数

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

1、创建 ElasticSearch Master 安装的配置文件

创建 es-master-values.yaml 文件

Terminal window
$ vi 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
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 文件

Terminal window
$ vi 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
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 50Gi
# ============安全配置============
## 设置协议,可配置为 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" ##容忍全部污点

3、创建 ElasticSearch Client 安装的配置文件

创建 es-data-values.yaml 文件

Terminal window
$ vi 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 安装的配置文件

创建 kibana-values.yaml 文件

Terminal window
$ vi 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: "500m"
memory: "1Gi"
limits:
cpu: "500m"
memory: "1Gi"
# ============配置 Kibana 参数============
## kibana 配置中添加语言配置,设置 kibana 为中文
kibanaConfig:
kibana.yml: |
i18n.locale: "zh-CN"
# ============Service 配置============
service:
type: NodePort
nodePort: "30601"

七、Helm 安装 ElasticSearch、Kibana

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

这里我们只介绍下如何使用 Helm 安装 ElasticSearch 与 Kibana 应用,操作如下:

1、Helm 增加 Elastic 仓库

Terminal window
$ helm repo add elastic https://helm.elastic.co

2、Helm 安装 ElasticSearch

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

ElasticSearch 安装部署如下:

  • -f:指定部署配置文件
  • —version:指定使用的 Helm Chart 版本号
  • —namespace:指定部署应用的 Namespace 空间

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

Terminal window
## 安装 ElasticSearch Master 节点
$ helm install elasticsearch-master -f es-master-values.yaml --namespace mydlqcloud --version 7.7.1 elastic/elasticsearch
## 安装 ElasticSearch Data 节点
$ helm install elasticsearch-data -f es-data-values.yaml --namespace mydlqcloud --version 7.7.1 elastic/elasticsearch
## 安装 ElasticSearch Client 节点
$ helm install elasticsearch-client -f es-client-values.yaml --namespace mydlqcloud --version 7.7.1 elastic/elasticsearch

3、Helm 安装 Kibana

Terminal window
$ helm install kibana -f kibana-values.yaml --namespace mydlqcloud --version 7.7.1 elastic/kibana

八、查看安装的应用资源

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

  • -n:应用所在的 Namespace 空间。
Terminal window
$ kubectl get service,pod -n mydlqcloud | grep -E 'elasticsearch|kibana'
service/elasticsearch-client NodePort 10.111.34.166 <none> 9200:30200/TCP,9300:30022/TCP
service/elasticsearch-client-headless ClusterIP None <none> 9200/TCP,9300/TCP
service/elasticsearch-data ClusterIP 10.101.38.61 <none> 9200/TCP,9300/TCP
service/elasticsearch-data-headless ClusterIP None <none> 9200/TCP,9300/TCP
service/elasticsearch-master ClusterIP 10.98.230.101 <none> 9200/TCP,9300/TCP
service/elasticsearch-master-headless ClusterIP None <none> 9200/TCP,9300/TCP
service/kibana-kibana NodePort 10.106.53.52 <none> 5601:30601/TCP
pod/elasticsearch-client-0 1/1 Running 0
pod/elasticsearch-data-0 1/1 Running 0
pod/elasticsearch-master-0 1/1 Running 0
pod/elasticsearch-master-1 1/1 Running 0
pod/elasticsearch-master-2 1/1 Running 0
pod/kibana-kibana-5658b7b899-x5265 1/1 Running 0

Pod 信息描述:

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

九、访问 Kibana 浏览 ElasticSearch 数据

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

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

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

---END---
如果本文对你有帮助,可以关注我的公众号 "小豆丁技术栈" 了解最新动态,顺便也请帮忙 Github 点颗星哦,感谢~

本文作者:超级小豆丁 @ 小豆丁技术栈

本文链接:http://www.mydlq.club/article/13/

本文标题:Helm 安装 ElasticSearch & Kibana 7.x 版本

本文版权:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!