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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM