• Helm3 安装 ElasticSearch & Kibana 7.x 版本


    文章转载自:http://www.mydlq.club/article/13/

    系统环境:

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

    一、简介

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

    二、环境配置

    Kubernetes 节点信息

    Elastic 栈 Chart 版本说明

    ElasticSearch 安装资源要求

    ElasticSearch 集群环境信息

    Kibana 环境信息

    三、配置 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 名称。

    实践操作时使用rook-ceph提供的cephfs

    四、提前下载镜像

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

    ## 拉取 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、添加证书到 Kubernetes

    #   添加证书
    $ 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 文件

    $ 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 文件

    $ 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 文件

    $ 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 文件

    $ 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 仓库

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

    ## 安装 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

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

    八、查看安装的应用资源

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

    $ 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 主界面:

  • 相关阅读:
    202104-2 邻域均值
    202104-1 灰度直方图
    1384. 饲料调配
    1381. 阶乘
    264. 丑数 II
    1380. 邮票
    42 新安装的idea必备设置
    41 cmd中解除被占用的端口
    40 文件在线预览
    39 进度条使用
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/16113258.html
Copyright © 2020-2023  润新知