Helm 安装 ElasticSearch & Kibana 7.x 版本

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-master master 4C 4Gi
k8s-node-2-12 worker 8C 8Gi
k8s-node-2-13 worker 8C 8Gi
k8s-node-2-14 worker 8C 8Gi

Elastic 栈 Chart 版本说明

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

版本 Elasticsearch Kibana Logstash Filebeat Metricbeat APM Server
7.0 Alpha Alpha / / / /
7.1 Beta Beta / Beta / /
7.2 Beta Beta / Beta Beta /
7.3 Beta Beta / Beta Beta /
7.4 Beta Beta / Beta Beta /
7.5 Beta Beta Beta Beta Beta Alpha
7.6 Beta Beta Beta Beta Beta Alpha
7.7 GA GA Beta GA GA Beta

ElasticSearch 安装资源要求

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

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

ElasticSearch 集群环境信息

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

Kibana 环境信息

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

三、配置 StorageClass

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

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

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

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

四、提前下载镜像

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

1## 拉取 elasticsearch 镜像
2$ docker pull elasticsearch:7.7.1
3
4## 拉取 kibana 镜像
5$ docker pull kibana:7.7.1

五、创建集群证书

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

1、生成证书文件

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

2、添加证书到 Kubernetes

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

六、配置应用参数

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

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

创建 es-master-values.yaml 文件

1$ vi es-master-values.yaml 

添加内容如下:

 1# ============设置集群名称============
 2## 设置集群名称
 3clusterName: "elasticsearch"
 4## 设置节点名称
 5nodeGroup: "master"
 6## 设置角色
 7roles:
 8  master: "true"
 9  ingest: "false"
10  data: "false"
11
12# ============镜像配置============
13## 指定镜像与镜像版本
14image: "docker.elastic.co/elasticsearch/elasticsearch"
15imageTag: "7.7.1"
16## 副本数
17replicas: 3
18
19# ============资源配置============
20## JVM 配置参数
21esJavaOpts: "-Xmx1g -Xms1g"
22## 部署资源配置(生成环境一定要设置大些)
23resources:
24  requests:
25    cpu: "2000m"
26    memory: "2Gi"
27  limits:
28    cpu: "2000m"
29    memory: "2Gi"
30## 数据持久卷配置
31persistence:
32  enabled: true
33## 存储数据大小配置
34volumeClaimTemplate:
35  storageClassName: nfs-storage
36  accessModes: [ "ReadWriteOnce" ]
37  resources:
38    requests:
39      storage: 5Gi
40
41# ============安全配置============
42## 设置协议,可配置为 http、https
43protocol: http
44## 证书挂载配置,这里我们挂入上面创建的证书
45secretMounts:
46  - name: elastic-certificates
47    secretName: elastic-certificates
48    path: /usr/share/elasticsearch/config/certs
49## 允许您在/usr/share/elasticsearch/config/中添加任何自定义配置文件,例如 elasticsearch.yml
50## ElasticSearch 7.x 默认安装了 x-pack 插件,部分功能免费,这里我们配置下
51## 下面注掉的部分为配置 https 证书,配置此部分还需要配置 helm 参数 protocol 值改为 https
52esConfig:
53  elasticsearch.yml: |
54    xpack.security.enabled: true
55    xpack.security.transport.ssl.enabled: true
56    xpack.security.transport.ssl.verification_mode: certificate
57    xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
58    xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
59    # xpack.security.http.ssl.enabled: true
60    # xpack.security.http.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
61    # xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12    
62## 环境变量配置,这里引入上面设置的用户名、密码 secret 文件
63extraEnvs:
64  - name: ELASTIC_USERNAME
65    valueFrom:
66      secretKeyRef:
67        name: elastic-credentials
68        key: username
69  - name: ELASTIC_PASSWORD
70    valueFrom:
71      secretKeyRef:
72        name: elastic-credentials
73        key: password
74
75# ============调度配置============
76## 设置调度策略
77## - hard:只有当有足够的节点时 Pod 才会被调度,并且它们永远不会出现在同一个节点上
78## - soft:尽最大努力调度
79antiAffinity: "hard"
80## 容忍配置(一般 kubernetes master 或其它设置污点的节点,只有指定容忍才能进行调度,如果测试环境只有三个节点,则可以开启在 master 节点安装应用)
81#tolerations: 
82#  - operator: "Exists"  ##容忍全部污点

2、创建 ElasticSearch Data 安装的配置文件

创建 es-data-values.yaml 文件

1$ vi es-data-values.yaml 

添加内容如下:

 1# ============设置集群名称============
 2## 设置集群名称
 3clusterName: "elasticsearch"
 4## 设置节点名称
 5nodeGroup: "data"
 6## 设置角色
 7roles:
 8  master: "false"
 9  ingest: "true"
10  data: "true"
11
12# ============镜像配置============
13## 指定镜像与镜像版本
14image: "docker.elastic.co/elasticsearch/elasticsearch"
15imageTag: "7.7.1"
16## 副本数
17replicas: 3
18
19# ============资源配置============
20## JVM 配置参数
21esJavaOpts: "-Xmx1g -Xms1g"
22## 部署资源配置(生成环境一定要设置大些)
23resources:
24  requests:
25    cpu: "1000m"
26    memory: "2Gi"
27  limits:
28    cpu: "1000m"
29    memory: "2Gi"
30## 数据持久卷配置
31persistence:
32  enabled: true
33## 存储数据大小配置
34volumeClaimTemplate:
35  storageClassName: nfs-storage
36  accessModes: [ "ReadWriteOnce" ]
37  resources:
38    requests:
39      storage: 50Gi
40
41# ============安全配置============
42## 设置协议,可配置为 http、https
43protocol: http
44## 证书挂载配置,这里我们挂入上面创建的证书
45secretMounts:
46  - name: elastic-certificates
47    secretName: elastic-certificates
48    path: /usr/share/elasticsearch/config/certs
49## 允许您在/usr/share/elasticsearch/config/中添加任何自定义配置文件,例如 elasticsearch.yml
50## ElasticSearch 7.x 默认安装了 x-pack 插件,部分功能免费,这里我们配置下
51## 下面注掉的部分为配置 https 证书,配置此部分还需要配置 helm 参数 protocol 值改为 https
52esConfig:
53  elasticsearch.yml: |
54    xpack.security.enabled: true
55    xpack.security.transport.ssl.enabled: true
56    xpack.security.transport.ssl.verification_mode: certificate
57    xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
58    xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
59    # xpack.security.http.ssl.enabled: true
60    # xpack.security.http.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
61    # xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12    
62## 环境变量配置,这里引入上面设置的用户名、密码 secret 文件
63extraEnvs:
64  - name: ELASTIC_USERNAME
65    valueFrom:
66      secretKeyRef:
67        name: elastic-credentials
68        key: username
69  - name: ELASTIC_PASSWORD
70    valueFrom:
71      secretKeyRef:
72        name: elastic-credentials
73        key: password
74
75# ============调度配置============
76## 设置调度策略
77## - hard:只有当有足够的节点时 Pod 才会被调度,并且它们永远不会出现在同一个节点上
78## - soft:尽最大努力调度
79antiAffinity: "hard"
80## 容忍配置(一般 kubernetes master 或其它设置污点的节点,只有指定容忍才能进行调度,如果测试环境只有三个节点,则可以开启在 master 节点安装应用)
81#tolerations: 
82#  - operator: "Exists"  ##容忍全部污点

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

创建 es-data-values.yaml 文件

1$ vi es-client-values.yaml 

添加内容如下:

 1# ============设置集群名称============
 2## 设置集群名称
 3clusterName: "elasticsearch"
 4## 设置节点名称
 5nodeGroup: "client"
 6## 设置角色
 7roles:
 8  master: "false"
 9  ingest: "false"
10  data: "false"
11
12# ============镜像配置============
13## 指定镜像与镜像版本
14image: "docker.elastic.co/elasticsearch/elasticsearch"
15imageTag: "7.7.1"
16## 副本数
17replicas: 2
18
19# ============资源配置============
20## JVM 配置参数
21esJavaOpts: "-Xmx1g -Xms1g"
22## 部署资源配置(生成环境一定要设置大些)
23resources:
24  requests:
25    cpu: "1000m"
26    memory: "2Gi"
27  limits:
28    cpu: "1000m"
29    memory: "2Gi"
30## 数据持久卷配置
31persistence:
32  enabled: false
33
34# ============安全配置============
35## 设置协议,可配置为 http、https
36protocol: http
37## 证书挂载配置,这里我们挂入上面创建的证书
38secretMounts:
39  - name: elastic-certificates
40    secretName: elastic-certificates
41    path: /usr/share/elasticsearch/config/certs
42## 允许您在/usr/share/elasticsearch/config/中添加任何自定义配置文件,例如 elasticsearch.yml
43## ElasticSearch 7.x 默认安装了 x-pack 插件,部分功能免费,这里我们配置下
44## 下面注掉的部分为配置 https 证书,配置此部分还需要配置 helm 参数 protocol 值改为 https
45esConfig:
46  elasticsearch.yml: |
47    xpack.security.enabled: true
48    xpack.security.transport.ssl.enabled: true
49    xpack.security.transport.ssl.verification_mode: certificate
50    xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
51    xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
52    # xpack.security.http.ssl.enabled: true
53    # xpack.security.http.ssl.truststore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12
54    # xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12    
55## 环境变量配置,这里引入上面设置的用户名、密码 secret 文件
56extraEnvs:
57  - name: ELASTIC_USERNAME
58    valueFrom:
59      secretKeyRef:
60        name: elastic-credentials
61        key: username
62  - name: ELASTIC_PASSWORD
63    valueFrom:
64      secretKeyRef:
65        name: elastic-credentials
66        key: password
67
68# ============Service 配置============
69service:
70  type: NodePort
71  nodePort: "30200"

4、创建 Kibana 安装的配置文件

创建 kibana-values.yaml 文件

1$ vi kibana-values.yaml 

添加内容如下:

 1# ============镜像配置============
 2## 指定镜像与镜像版本
 3image: "docker.elastic.co/kibana/kibana"
 4imageTag: "7.7.1"
 5
 6## 配置 ElasticSearch 地址
 7elasticsearchHosts: "http://elasticsearch-client:9200"
 8
 9# ============环境变量配置============
10## 环境变量配置,这里引入上面设置的用户名、密码 secret 文件
11extraEnvs:
12  - name: 'ELASTICSEARCH_USERNAME'
13    valueFrom:
14      secretKeyRef:
15        name: elastic-credentials
16        key: username
17  - name: 'ELASTICSEARCH_PASSWORD'
18    valueFrom:
19      secretKeyRef:
20        name: elastic-credentials
21        key: password
22
23# ============资源配置============
24resources:
25  requests:
26    cpu: "500m"
27    memory: "1Gi"
28  limits:
29    cpu: "500m"
30    memory: "1Gi"
31
32# ============配置 Kibana 参数============ 
33## kibana 配置中添加语言配置,设置 kibana 为中文
34kibanaConfig:
35  kibana.yml: |
36        i18n.locale: "zh-CN"
37
38# ============Service 配置============
39service:
40  type: NodePort
41  nodePort: "30601"

七、Helm 安装 ElasticSearch、Kibana

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

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

1、Helm 增加 Elastic 仓库

1$ 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 就会恢复正常。

1## 安装 ElasticSearch Master 节点
2$ helm install elasticsearch-master -f es-master-values.yaml --namespace mydlqcloud --version 7.7.1 elastic/elasticsearch
3
4## 安装 ElasticSearch Data 节点
5$ helm install elasticsearch-data -f es-data-values.yaml --namespace mydlqcloud --version 7.7.1 elastic/elasticsearch
6
7## 安装 ElasticSearch Client 节点
8$ helm install elasticsearch-client -f es-client-values.yaml --namespace mydlqcloud --version 7.7.1 elastic/elasticsearch

3、Helm 安装 Kibana

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

八、查看安装的应用资源

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

  • -n:应用所在的 Namespace 空间。
 1$ kubectl get service,pod -n mydlqcloud | grep -E 'elasticsearch|kibana'
 2
 3service/elasticsearch-client            NodePort    10.111.34.166    <none>        9200:30200/TCP,9300:30022/TCP  
 4service/elasticsearch-client-headless   ClusterIP   None             <none>        9200/TCP,9300/TCP   
 5service/elasticsearch-data              ClusterIP   10.101.38.61     <none>        9200/TCP,9300/TCP 
 6service/elasticsearch-data-headless     ClusterIP   None             <none>        9200/TCP,9300/TCP 
 7service/elasticsearch-master            ClusterIP   10.98.230.101    <none>        9200/TCP,9300/TCP 
 8service/elasticsearch-master-headless   ClusterIP   None             <none>        9200/TCP,9300/TCP 
 9service/kibana-kibana                   NodePort    10.106.53.52     <none>        5601:30601/TCP
10pod/elasticsearch-client-0           1/1     Running   0  
11pod/elasticsearch-data-0             1/1     Running   0 
12pod/elasticsearch-master-0           1/1     Running   0
13pod/elasticsearch-master-1           1/1     Running   0 
14pod/elasticsearch-master-2           1/1     Running   0
15pod/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---


  !版权声明:本博客内容均为原创,每篇博文作为知识积累,写博不易,转载请注明出处。