Helm部署ElasticSearch Kibana 7 集群
一、簡介
- Elasticsearch 是一個分布式的搜索和分析引擎,可以用于全文檢索、結構化檢索和分析,并能將這三者結合起來。設計用于云計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便,輕松擴展服務節點,更能用于日志收集快速檢索等等一些列功能。
- Kibana 是一個為 Elasticsearch 平臺分析和可視化的開源平臺,使用 Kibana 能夠搜索、展示存儲在 Elasticsearch 中的索引數據。使用它可以很方便用圖表、表格、地圖展示和分析數據。
- Helm:Helm(注意:helm 2.0 版本與 3.0 有很大區別)是與 kubernetes 的 kube-apiserver 進行交互,通過 Kubernetes API 控制應用啟動、更新與刪除的客戶端。
二、資源準備
ElasticSearch 安裝有最低安裝要求,如果執行 Helm 安裝命令后 Pod 無法正常啟動,請檢查是否符合最低要求的配置。
1、資源要求
| Kubernetes master | 核心數 > 2 | 內存 > 2Gi |
| Kubernetes data | 核心數 > 1 | 內存 > 2Gi |
| Kubernetes client | 核心數 > 1 | 內存 > 2Gi |
2、ElasticSearch 集群環境
| elasticsearch | Kubernetes Master | 3 | 5Gi | ClusterIP | 主節節點,用于控制 ES 集群 |
| elasticsearch | Kubernetes Data | 3 | 50Gi | ClusterIP | 數據節點,用于存儲 ES 數據 |
| elasticsearch | Kubernetes Client | 2 | 無 | NodePort(30200) | 負責處理用戶請求,實現請求轉發、負載均衡 |
3、Kibana 環境信息
| Kibana | 1 | 無 | NodePort(30601) | 用于展示 ElasticSearch 數據的應用 |
三、配置 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 插件,并且部分功能免費,這里我們配置安全證書文件。
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.pem2、添加證書到集群
# 添加證書 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 安裝命令時,指定使用此文件。
1、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" ##容忍全部污點2、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-newaccessModes: [ "ReadWriteOnce" ]resources:requests:storage: 50Gi# ============安全配置============ ## 設置協議,可配置為 http、https protocol: http ## 證書掛載配置,這里我們掛入上面創建的證書 secretMounts:- name: elastic-certificatessecretName: elastic-certificatespath: /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: truexpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/certs/elastic-certificates.p12xpack.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_USERNAMEvalueFrom:secretKeyRef:name: elastic-credentialskey: username- name: ELASTIC_PASSWORDvalueFrom:secretKeyRef:name: elastic-credentialskey: password# ============調度配置============ ## 設置調度策略 ## - hard:只有當有足夠的節點時 Pod 才會被調度,并且它們永遠不會出現在同一個節點上 ## - soft:盡最大努力調度 antiAffinity: "hard" ## 容忍配置(一般 kubernetes master 或其它設置污點的節點,只有指定容忍才能進行調度,如果測試環境只有三個節點,則可以開啟在 master 節點安裝應用) #tolerations: # - operator: "Exists" ##容忍全部污點3、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"4、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 可以訪問該地址了解更多信息。
1、Helm 安裝 ElasticSearch
ElaticSearch 安裝需要安裝三次,分別安裝 ElasticSearch Master、ElasticSearch Data、ElasticSearch Client 三組。
- 安裝的第一組 ElasticSearch 作為 Master 角色節點,負責集群間的管理工作;
- 安裝的第二組 ElasticSearch 作為 Data 節點,負責存儲數據;
- 安裝的第三組 ElasticSearch 作為 Client 節點,負責代理 ElasticSearch Cluster 集群,負載均衡。
ElasticSearch 安裝部署如下:
- -f:指定部署配置文件
- –version:指定使用的 Helm Chart 版本號
??注意:
?
在安裝 Master 節點后 Pod 啟動時候會拋出異常,就緒探針探活失敗,這是個正常現象。在執行安裝 Data 節點后 Master 節點 Pod 就會恢復正常。
?
2、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 <none> 9200:30200/TCP,9300:30209/TCP 3m35s service/elasticsearch-client-headless ClusterIP None <none> 9200/TCP,9300/TCP 3m35s service/elasticsearch-data ClusterIP 10.96.219.21 <none> 9200/TCP,9300/TCP 4m12s service/elasticsearch-data-headless ClusterIP None <none> 9200/TCP,9300/TCP 4m12s service/elasticsearch-master ClusterIP 10.96.37.135 <none> 9200/TCP,9300/TCP 5m11s service/elasticsearch-master-headless ClusterIP None <none> 9200/TCP,9300/TCP 5m15s service/kibana-kibana NodePort 10.96.107.176 <none> 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 88sPod 信息描述:
- 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 主界面:
Kibana 主界面
示例資料:
- https://github.com/zuozewei/blog-example/tree/master/Kubernetes/k8s-ek
參考鏈接:
Kubernetes Helm3 部署 ElasticSearch & Kibana 7 集群
總結
以上是生活随笔為你收集整理的Helm部署ElasticSearch Kibana 7 集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: k8s使用port-forward访问集
- 下一篇: helm部署postgresql