Kubernetes 集群 Helm3 安装 ElasticSearch & Kibana 7集群

网友投稿 988 2022-05-30

简介

资源准备

资源要求

ElasticSearch 集群环境

Kibana 环境信息

简介

Kubernetes 集群 Helm3 安装 ElasticSearch & Kibana 7集群

资源准备

资源要求

ElasticSearch 集群环境

Kibana 环境信息

配置 StorageClass

提前下载镜像

创建集群证书

生成证书文件

添加证书到集群

配置应用参数

ElasticSearch Master

ElasticSearch Data

ElasticSearch Client

Kibana 安装的配置文件

helm 安装

Helm 安装 ElasticSearch

Helm 安装 Kibana

查看安装的应用资源

访问 Kibana 浏览 ElasticSearch 数据

简介

Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便,轻松扩展服务节点,更能用于日志收集快速检索等等一些列功能。

Kibana 是一个为 Elasticsearch 平台分析和可视化的开源平台,使用 Kibana 能够搜索、展示存储在 Elasticsearch 中的索引数据。使用它可以很方便用图表、表格、地图展示和分析数据。

Helm: Helm(注意:helm 2.0 版本与 3.0 有很大区别)是与 kubernetes 的 kube-apiserver 进行交互,通过 Kubernetes API 控制应用启动、更新与删除的客户端。

资源准备

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

资源要求

ElasticSearch 集群环境

Kibana 环境信息

配置 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 插件,并且部分功能免费,这里我们配置安全证书文件。

生成证书文件

# 运行容器生成证书 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

添加证书到集群

# 添加证书 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 安装命令时,指定使用此文件。

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" ##容忍全部污点

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-new 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" ##容忍全部污点

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"

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 可以访问该地址了解更多信息。

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

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 9200:30200/TCP,9300:30209/TCP 3m35s service/elasticsearch-client-headless ClusterIP None 9200/TCP,9300/TCP 3m35s service/elasticsearch-data ClusterIP 10.96.219.21 9200/TCP,9300/TCP 4m12s service/elasticsearch-data-headless ClusterIP None 9200/TCP,9300/TCP 4m12s service/elasticsearch-master ClusterIP 10.96.37.135 9200/TCP,9300/TCP 5m11s service/elasticsearch-master-headless ClusterIP None 9200/TCP,9300/TCP 5m15s service/kibana-kibana NodePort 10.96.107.176 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 主界面:

示例资料:

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

Elasticsearch Kubernetes

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:鸿蒙轻内核A核源码分析系列四(2) 虚拟内存
下一篇:python之封装
相关文章