[TOC]html
關於系統日誌收集處理方案,其實有不少種,由於以前使用ES比較多,因此也認爲ELK是一個不錯的解決方案,ELK(Elasticsearch + Logstash + Kibana)來管理日誌。docker
Kubernetes 也要實如今整個集羣級別收集和聚合日誌,以便用戶能夠從單個儀表板監控整個集羣,其經常使用的架構形式之一 一種流行的開源解決方案是將fluentd 做爲節點級代理程序進行日誌採集,並將之聚合存儲於Elasticsearch 進行日誌分析,以及經過Kibana 進行數據可視化。api
Logstash是一個具備實時渠道能力的數據收集引擎,但和fluentd相比,它在效能上表現略遜一籌,故而逐漸被fluentd取代,並組合爲EFK 。網絡
EFK由ElasticSearch、Fluentd和Kiabana三個開源工具組成。架構
其中Elasticsearch是一款分佈式搜索引擎,可以用於日誌的檢索app
Fluentd是一個實時開源的數據收集器,curl
Kibana 是一款可以爲Elasticsearch 提供分析和可視化的 Web 平臺。elasticsearch
這三款開源工具的組合爲日誌數據提供了分佈式的實時蒐集與分析的監控系統。分佈式
在Kubernetes 上部署fluentd 和Kibana 的方式易於實現 1.fluentd由DaemonSet 控制器部署於集羣中的各節點 2.Kibana則由Deployment控制器部署並確保其持續運行便可。 3.ElasticSearch是一個有狀態的應用,須要使用Statefu!Set 控制器建立並管理相關的Pod 對象,並且它們還分別須要專用的持久存儲系統存儲日誌數據,所以,其部署過程較以前二者要略爲煩瑣,工具
在安裝以前能夠測試安裝過程
如: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@master helm]# helm search elasticsearch 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 stable/kibana 3.0.0 6.7.0 Kibana is an open source data visualization plugin for El...
固然能夠經過https: //hub.kubeapps.com 這個網站搜索相應的軟件包
注:這裏關注一下helm es 和kibana 的版本,必須一致
helm fetch incubator/elasticsearch #安裝E ,這裏關注一下helm es 和kibana 的版本,必須一致 tar -xzf elasticsearch-1.10.2.tgz cd elasticsearch 修改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 命令來安裝軟件包
#建立logs名稱空間 kubectl create namespace logs ##建立elasticsearch實例 helm install --name els1 --namespace=logs -f values.yaml incubator/elasticsearch #查看elasticserarch建立好的pod [root@master elasticsearch]# kubectl get pod -n logs NAME READY STATUS RESTARTS AGE els1-elasticsearch-client-844687f9f8-4ctlp 1/1 Running 0 8m27s els1-elasticsearch-client-844687f9f8-mct6d 1/1 Running 0 8m27s els1-elasticsearch-data-0 1/1 Running 0 8m27s els1-elasticsearch-data-1 1/1 Running 0 3m34s els1-elasticsearch-master-0 1/1 Running 0 8m27s els1-elasticsearch-master-1 1/1 Running 0 3m38s els1-elasticsearch-master-2 1/1 Running 0 2m48s #測試訪問elasticsearch-master kubectl run cirror-$RANDOM --rm -it --image=cirros -- /bin/sh #交互式工具 / # nslookup els1-elasticsearch-client.logs.svc Server: 10.96.0.10 Address 1: 10.96.0.10 kube-dns.kube-system.svc.cluster.local Name: els1-elasticsearch-client.logs.svc #helm status els1得到 Address 1: 10.105.16.209 els1-elasticsearch-client.logs.svc.cluster.local #以上能夠看出 logs名稱空間下els1已正常訪問 / # curl els1-elasticsearch-client.logs.svc.cluster.local:9200 { "name" : "els1-elasticsearch-client-844687f9f8-4ctlp", "cluster_name" : "elasticsearch", "cluster_uuid" : "cazCbQpcTM20PRww4F9f4g", "version" : { "number" : "6.4.2", "build_flavor" : "oss", "build_type" : "tar", "build_hash" : "04711c2", "build_date" : "2018-09-26T13:34:09.098244Z", "build_snapshot" : false, "lucene_version" : "7.4.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
能夠看到咱們的ES 安裝完成了,可使用了
helm fetch stable/fluentd-elasticsearch #安裝F tar -xzf fluentd-elasticsearch-2.0.7.tgz cd fluentd-elasticsearch
修改values.yaml文件
一共有2個地方能夠修改
fluentd 是運行於各節點上的日誌採集代理,所以它受控於DaemonSet 控制器。 基於此Charts部署fluentd時一般僅需爲其指定Elastic Search 服務的訪問接口便可 不過,若須要收集master 節點上的日誌就須要爲部署的Pod對象添加tolerations 以容忍master 上的taints ,第二步就是爲接受主節點污點
固然若是不想收集MASTER日誌能夠經過下面簡單的命令安裝
helm install stable/fluentd-elasticsearch --namespace=logs --set elasticsearch.host="els1-elasticsearch-client.logs.svc.cluster.local」
helm install --name flu1 --namespace=logs -f values.yaml stable/fluentd-elasticsearch
#這裏面涉及到一個鏡像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 #tar -xzf fluentd-elasticsearch-2.0.7.tgz #cd tar -xzf fluentd-elasticsearch # 以上4步 能夠不進行 helm install --name flu1 --namespace=logs stable/fluentd-elasticsearch -f values.yaml 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 kubectl run cirror-$RANDOM --rm -it --image=cirros -- /bin/sh #測試效果 / # curl els1-elasticsearch-client.logs.svc.cluster.local:9200/_cat/indices green open logstash-2019.11.05 zwrG_TrmQKWcWUFKFyGJUg 5 1 773813 0 212.7mb 106.2mb green open logstash-2019.09.06 oXx_3EovRTeItw6BB1Uv6A 5 1 778 0 1.1mb 734.9kb green open logstash-2019.10.23 2cqVO4WSSxeU0S5k1Szr0g 5 1 1020027 0 403.8mb 202.3mb green open logstash-2019.10.22 -1xt8XYyQzCQ4cL_f5tUFw 5 1 273546 0 121.3mb 60.5mb green open logstash-2019.10.24 Sle0Uc9tTIuJNUEE7ahetg 5 1 19609 0 15.9mb 7.2mb #命令結果中顯示出以「 logstash-YYYY.MM.DD 」格式命名的索引列表,即表示fluentd已經可以正常採集到日誌數據並輸出到指定的Elastic Search 集羣中。
修改kibana文件(<font size=3 color=red>注意kibana的版本必定要與elasticsearch一致</font>)
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 類型的服務。
helm fetch stable/kibana #安裝最新穩定版的kibana helm fetch stable/kibana --version 0.16.3 #因爲須要與elasticsearch版本一致 因此指定了chart版本
下面是valus.yaml修改的部分:
helm install --name kib1 --namespace=logs -f values.yaml stable/kibana --version 0.16.3 #建立kibana kubectl get pods -n logs |egrep kib #查看pod建立狀況 kib1-kibana-58d5745cf-xxb2q 1/1 Running 0 5m2s kubectl get svc -n logs |egrep kibana #因而可知kibana外部訪問端口爲30071 kib1-kibana NodePort 10.99.132.184 <none> 443:30071/TCP 6m28s
建立索引
建立好索引模式以後,便可經過「 Discover 」搜索數據,或者在「 Visualize 」界面中定義可視化圖形,並將它們集成於可在「 Dashboard 」中建立的儀表板裏
試着構建一個餅狀圖展現資源使用前五的pod-name
這樣就能夠看到餅圖了,更詳細的圖形配置和數據展現,請經過相關資料自行學習去,這邊不在詳細介紹了
參考文章:http://www.javashuo.com/article/p-xrykucyk-ky.html
總結:本章詳細講解了Helm 的使用方式,並經過示例演示了其使用方法,大大下降了用戶的使用k8s成本,不用本身編寫配置清單,經過其餘Chart文件,修改相應的參數,實現本身相符環境的部署。