k8s學習筆記-Helm安裝EFK


目前來說, Kubernetes 部署及管理應用程序的接口仍然相當復雜,在維護較多的資源時,用戶必然會受困於其復雜多變的資源配置清單, 

Helm 通過Charts 實現了類似於yum 或apt-get等程序包管理器的功能,大大降低了用戶的使用成本。

下面通過Helm部署日志系統:

1.概述

 

關於系統日志收集處理方案,其實有很多種,因為之前使用ES比較多,所以也認為ELK是一個不錯的解決方案,ELK(Elasticsearch + Logstash + Kibana)來管理日志。

 Kubernetes 也要實現在整個集群級別收集和聚合日志,以便用戶可以從單個儀表板監控整個集群,其常用的架構形式之一
一種流行的開源解決方案是將fluentd 作為節點級代理程序進行日志采集,並將之聚合存儲於Elasticsearch 進行日志分析,以及通過Kibana 進行數據可視化。

Logstash是一個具有實時渠道能力的數據收集引擎,但和fluentd相比,它在效能上表現略遜一籌,故而逐漸被fluentd取代,並組合為EFK 。

EFK由ElasticSearch、Fluentd和Kiabana三個開源工具組成。

其中Elasticsearch是一款分布式搜索引擎,能夠用於日志的檢索

Fluentd是一個實時開源的數據收集器,

Kibana 是一款能夠為Elasticsearch 提供分析和可視化的 Web 平台。

這三款開源工具的組合為日志數據提供了分布式的實時搜集與分析的監控系統。

 

 

在Kubernetes 上部署fluentd 和Kibana 的方式易於實現
1.fluentd由DaemonSet 控制器部署於集群中的各節點
2.Kibana則由Deployment控制器部署並確保其持續運行即可。
3.ElasticSearch是一個有狀態的應用,需要使用Statefu!Set
控制器創建並管理相關的Pod 對象,而且它們還分別需要專用的持久存儲系統存儲日志數據,因此,其部署過程較之前兩者要略為煩瑣,
其部署架構如圖

2.部署方式
1.K8s 項目在其Addons 目錄中提供了資源配置清單用於部署EFK
2.Kubeapps ( https: //hub.kubeapps.com )為此三者分別提供了相應的Charts幫助用戶通過Helm 輕松完成其部署

Helm方式部署EFK

在安裝之前可以測試安裝過程

如:helm install --name myapp local/myapp --dry-run --debug 查看輸出的內容是否符合要求

1.查看相應的chart安裝包

[root@k8s-master ~]# helm repo list
NAME URL
local http://127.0.0.1:8879/charts
stable https://kubernetes-charts.storage.googleapis.com
incubator https://kubernetes-charts-incubator.storage.googleapis.com/

注: 可以通過helm repo add 增加倉庫,當然也可以刪除倉庫

[root@k8s-master helm]# helm search elasticsear|egrep elas|awk '{print $1}'
incubator/elasticsearch
incubator/elasticsearch-curator
incubator/fluentd-elasticsearch
stable/elasticsearch
stable/elasticsearch-curator
stable/elasticsearch-exporter
stable/fluentd-elasticsearch
stable/elastabot
stable/elastalert

[root@k8s-master helm]# helm search kibana|egrep kibana
stable/kibana 3.0.0 6.7.0 Kibana is an open source data visualization plugin for El...

當然可以通過https: //hub.kubeapps.com 這個網站搜索相應的軟件包

我這邊安裝穩定版,先下載下來,然后解壓

helm fetch stable/elasticsearch

helm fetch stable/fluentd-elasticsearch

helm fetch stable/kibana

[root@ helm]# ls
elasticsearch elasticsearch-1.28.0.tgz fluentd-elasticsearch fluentd-elasticsearch-2.0.7.tgz kibana kibana-3.0.0.tgz

注:這里關注一下helm es 和kibana 的版本,必須一致

1.修改ES默認的values.yaml文件符合自己的安裝環境

這里修改的內容大概如下:

需要特別說明的是,未明確定義持久存儲使用的存儲類時,無須持久保存數據,或者
無可用的實現動態供給PV 的存儲時, 也可以使用empty Dir 存儲卷,實現方法是將上面示
例中master.persistence.enabled 和data. persistence.enabled 配置參數的值分別設置為“ false ”

 

master 節點的PVC 存儲卷大小都是4Gi data節點的PVC 存儲卷大小均為30Gi
rbac 相關的各資源創建為禁用狀態。部署於生產環境時,默認設置中的資源請求和資源限制,以及data 節點的PVC 存儲卷空間等較小
在啟用了rbac 授權插件的集群中還需要創建elasticsearch 所需要的各ClusterRole 及ClusterRoleBinding 資源。
這些需要自定義的配置參數可以通過values 文件進行設置,或者直接由helm install 命令的 --set選項來實現

通過上面的方式修改好文件以后,接下來就是通過helm 命令來安裝軟件包

這些資源默認都安裝到一個獨立的名稱空間,提前創建好

kubectl create narnespace logs

修改好的文件重新打包到本地(注:把之前的包移動到其他地方)

helm package elasticsearch

Successfully packaged chart and saved it to: /data/helm/elasticsearch-1.28.0.tgz

在另一個終端開啟本地倉庫服務

 

# helm serve
Regenerating index. This may take a moment.
Now serving you on 127.0.0.1:8879

# helm search local
NAME CHART VERSION APP VERSION DESCRIPTION
local/elasticsearch 1.28.0 6.7.0 Flexible and powerful open source, distributed real-time ...

安裝ES

#helm install --name els --namespace=logs  local/elasticsearch

# kubectl get pods -n logs |egrep els
els-elasticsearch-client-b57d4645b-b5s9n 1/1 Running 0 125m
els-elasticsearch-client-b57d4645b-f5zt5 1/1 Running 0 125m
els-elasticsearch-data-0 1/1 Running 0 125m
els-elasticsearch-data-1 1/1  Running 0 93s
els-elasticsearch-master-0 1/1 Running 0 125m
els-elasticsearch-master-1 1/1 Running 0 124m
els-elasticsearch-master-2 1/1 Running 0 123m

這一步可能有些環境資源有限,啟動慢,或者可以通過修改文件,少啟動幾個POD 

接下來我們測試一下

 helm status els 

 els-elasticsearch-client.logs.svc 這個是提供給的集群訪問地址

 kubectl run cirror-$RANDOM --rm -it --image=cirros -- /bin/sh

/ # nslookup els-elasticsearch-client.logs.svc
Server: 10.96.0.10
Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local

Name: els-elasticsearch-client.logs.svc
Address 1: 10.108.12.35 els-elasticsearch-client.logs.svc.cluster.local
/ # curl http://els-elasticsearch-client.logs.svc:9200 #不知道為什么CURL 的時候就解析不到了
curl: (6) Couldn't resolve host 'els-elasticsearch-client.logs.svc'
/ # curl http://els-elasticsearch-client.logs.svc.cluster.local:9200 #換成完整的地址測試
{
........
"tagline" : "You Know, for Search"
}
可以看到我們的ES 安裝完成了,可以使用了

為了節省資源,推薦另一種測試方式

 kubectl patch svc els-elasticsearch-client -n logs -p '{"spec":{"type":"NodePort"}}'

# kubectl get svc -n logs
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
els-elasticsearch-client NodePort 10.108.12.35 <none> 9200:30116/TCP 134m

 

 

2.修改fluentd-elasticsearch文件

fluentd 是運行於各節點上的日志采集代理,因此它受控於DaemonSet 控制器。
基於此Charts部署fluentd時通常僅需為其指定Elastic Search 服務的訪問接口即可
不過,若需要收集master 節點上的日志就需要為部署的Pod對象添加tolerations 以容忍master 上的taints

一共有兩個地方可以修改

當然如果不想收集MASTER日志可以通過下面簡單的命令安裝

helm install stable/fluentd-elasticsearch --namespace=logs --set elasticsearch.host="els-elasticsearch-client.logs.svc.cluster.local” 

 

注:這里面涉及到一個鏡像gcr.io/google-containers/fluentd-elasticsearch:v2.3.2,國內網絡無法訪問,通過下面方式在各節點部署

 

docker pull mirrorgooglecontainers/fluentd-elasticsearch:v2.3.2

 

docker tag mirrorgooglecontainers/fluentd-elasticsearch:v2.3.2 gcr.io/google-containers/fluentd-elasticsearch:v2.3.2

 

docker rmi mirrorgooglecontainers/fluentd-elasticsearch:v2.3.2

 

# helm package fluentd-elasticsearch
Successfully packaged chart and saved it to: /data/helm/fluentd-elasticsearch-2.0.7.tgz

#helm install --name flu --namespace=logs local/fluentd-elasticsearch

# kubectl get pod -n logs |egrep flu
flu-fluentd-elasticsearch-7p9l6 1/1 Running 0 143m
flu-fluentd-elasticsearch-gzflr 1/1 Running  0 143m

可以看到ES服務上面有相應的索引文件了

命令結果中顯示出以“ logstash-YYYY.MM.DD ”格式命名的索引列表,即表示fluentd已經能夠正常采集到日志數據並輸出到指定的Elastic Search 集群中。

3.修改kibana文件

Kibana 是Elastic Search 的數據分析及可視化平台, 能夠用來搜索、查看存儲在ElasticSearch索引中的數據。
它可以通過各種圖表進行高級數據分析及展示,用戶基於Web GUI可以快速創建儀表板( dashboard )實時顯示ElasticSearch 的查詢結果。
Kibana 配置過程簡單便捷, 圖形樣式豐富,可借助於ElasticSearch 創建柱形圖、折線圖、散點圖、直方圖、餅圖和地圖等數據展示接口。
Kibana 增強了ElasticSearch 的數據分析能力,讓用戶能夠更加智能地分析數據和展示數據

Kibana 是Elastic Search 的數據分析及可視化平台, 能夠用來搜索、查看存儲在ElasticSearch索引中的數據。
它可以通過各種圖表進行高級數據分析及展示,用戶基於Web GUI可以快速創建儀表板( dashboard )實時顯示ElasticSearch 的查詢結果。
Kibana 配置過程簡單便捷, 圖形樣式豐富,可借助於ElasticSearch 創建柱形圖、折線圖、散點圖、直方圖、餅圖和地圖等數據展示接口。
Kibana 增強了ElasticSearch 的數據分析能力,讓用戶能夠更加智能地分析數據和展示數據。
類似於fluentd , Kibana也通過URL 訪問ElasticS earch但它要通過環境變量ELASTIC-僅供If:商業用法峽交流學習使用
部署於Kubernetes 上的Kibana 一般會由集群外的客戶端訪問,因此需要為其配置Ingress 資源,也可以使用NodePort 或LoadBalancer類型的Service 資源進行服務暴露。

默認通過HTTP 提供服務,在使用Ingress 暴露到互聯網時,建議將其配置為HTTPS 類型的服務。

下面是valus.yaml修改的部分:

修改ES 的訪問路徑

 讓節點網絡可以訪問

#helm package kibana
Successfully packaged chart and saved it to: /data/helm/kibana-3.0.0.tgz

#helm install --name kibana --namespace=logs local/kibana

#kubectl get pods -n logs |egrep kib
kibana-f69f88748-tvz2r 1/1 Running 0 30s

# kubectl get svc -n logs |egrep kibana

kibana NodePort 10.98.143.243 <none> 443:32580/TCP 18h

 

 

 創建好索引模式之后,即可通過“ Discover ”搜索數據,或者在“ Visualize ”界面中定義可視化圖形,並將它們集成於可在“ Dashboard ”中創建的儀表板里

發現狀態良好,可以使用了

 

 

 

 

 

 

 這樣就可以看到餅圖了,更詳細的圖形配置和數據展示,請通過相關資料自行學習去,這邊不在詳細介紹了

參考文章:https://www.cnblogs.com/cjsblog/p/9476813.html

總結:本章詳細講解了Helm 的使用方式,並通過示例演示了其使用方法,大大降低了用戶的使用k8s成本,不用自己編寫配置清單,通過其他Chart文件,修改相應的參數,實現自己相符環境的部署。

 


免責聲明!

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



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