真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯網站制作重慶分公司

k8s搭建efk

云計算

                                       **  efk的搭建**

Elasticsearch 是一個實時的、分布式的可擴展的搜索引擎,允許進行全文、結構化搜索,它通常用于索引和搜索大量日志數據,也可用于搜索許多不同類型的文檔。

十載的羅湖網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網營銷推廣的優(yōu)勢是能夠根據用戶設備顯示端的尺寸不同,自動調整羅湖建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯從事“羅湖網站設計”,“羅湖網站推廣”以來,每個客戶項目都認真落實執(zhí)行。

Elasticsearch 通常與 Kibana 一起部署,Kibana 是 Elasticsearch 的一個功能強大的數據可視化 Dashboard,Kibana 允許你通過 web 界面來瀏覽 Elasticsearch 日志數據。

Fluentd是一個流行的開源數據收集器,我們將在 Kubernetes 集群節(jié)點上安裝 Fluentd,通過獲取容器日志文件、過濾和轉換日志數據,然后將數據傳遞到 Elasticsearch 集群,在該集群中對其進行索引和存儲。

我們先來配置啟動一個可擴展的 Elasticsearch 集群,然后在 Kubernetes 集群中創(chuàng)建一個 Kibana 應用,最后通過 DaemonSet 來運行 Fluentd,以便它在每個 Kubernetes 工作節(jié)點上都可以運行一個 Pod。

1.創(chuàng)建 Elasticsearch 集群

在創(chuàng)建 Elasticsearch 集群之前,我們先創(chuàng)建一個命名空間。

新建一個kube-efk.yaml

kubectl apply -f kube-efk.yaml

kubectl get ns 查看有沒有這個efk的命名空間

這里我們使用3個 Elasticsearch Pod 來避免高可用下多節(jié)點集群中出現的“腦裂”問題,當一個或多個節(jié)點無法與其他節(jié)點通信時會產生“腦裂”,可能會出現幾個主節(jié)點。

一個關鍵點是您應該設置參數discover.zen.minimum_master_nodes=N/2+1,其中N是 Elasticsearch 集群中符合主節(jié)點的節(jié)點數,比如我們這里3個節(jié)點,意味著N應該設置為2。這樣,如果一個節(jié)點暫時與集群斷開連接,則另外兩個節(jié)點可以選擇一個新的主節(jié)點,并且集群可以在最后一個節(jié)點嘗試重新加入時繼續(xù)運行,在擴展 Elasticsearch 集群時,一定要記住這個參數。

首先創(chuàng)建一個名為 elasticsearch 的無頭服務,新建文件 elasticsearch-svc.yaml,文件內容如下:

定義了一個名為 elasticsearch 的 Service,指定標簽app=elasticsearch,當我們將 Elasticsearch StatefulSet 與此服務關聯時,服務將返回帶有標簽app=elasticsearch的 Elasticsearch Pods 的 dns A 記錄,然后設置clusterIP=None,將該服務設置成無頭服務。最后,我們分別定義端口9200、9300,分別用于與 REST API 交互,以及用于節(jié)點間通信。

然后我們創(chuàng)建這個無頭服務

kubectl apply -f elasticsearch-svc.yaml

現在我們已經為 Pod 設置了無頭服務和一個穩(wěn)定的域名.elasticsearch.logging.svc.cluster.local,接下來我們通過 StatefulSet 來創(chuàng)建具體的 Elasticsearch 的 Pod 應用。

Kubernetes StatefulSet 允許我們?yōu)?Pod 分配一個穩(wěn)定的標識和持久化存儲,Elasticsearch 需要穩(wěn)定的存儲來保證 Pod 在重新調度或者重啟后的數據依然不變,所以需要使用 StatefulSet 來管理 Pod。

我們使用了一個名為 es-data-db 的 StorageClass 對象,所以我們需要提前創(chuàng)建該對象,我們這里使用的 NFS 作為存儲后端,所以需要安裝一個對應的 provisioner 驅動,
我們先創(chuàng)建elasticsearch-storageclass.yaml

然后我們創(chuàng)建pvc來對應這個storageclass

elasticsearch-pvc.yaml

最后我們創(chuàng)建這個statefulset

elasticsearch-statefulset.yaml

然后我們使用kubectl創(chuàng)建

kubectl apply -f elasticsearch-storageclass.yaml

kubectl apply -f elasticsearch-pvc.yaml

kubectl apply -f elasticsearch-statefulset.yaml

然后我們查看pod的運行情況

Pods 部署完成后,我們可以通過請求一個 REST API 來檢查 Elasticsearch 集群是否正常運行。使用下面的命令將本地端口9200轉發(fā)到 Elasticsearch 節(jié)點(如es-cluster-0)對應的端口:

然后我們開另一個窗口

正常來說,應該會有這樣的信息。

看到上面的信息就表明我們名為 k8s-logs 的 Elasticsearch 集群成功創(chuàng)建了3個節(jié)點:es-cluster-0,es-cluster-1,和es-cluster-2,當前主節(jié)點是 es-cluster-0。

2.創(chuàng)建 Kibana 服務

Elasticsearch 集群啟動成功了,接下來我們可以來部署 Kibana 服務,新建一個名為 kibana.yaml 的文件,對應的文件內容如下:

上面我們定義了兩個資源對象,一個 Service 和 Deployment,為了測試方便,我們將 Service 設置為了 NodePort 類型,Kibana Pod 中配置都比較簡單,唯一需要注意的是我們使用 ELASTICSEARCH_URL 這個環(huán)境變量來設置Elasticsearch 集群的端點和端口,直接使用 Kubernetes DNS 即可,此端點對應服務名稱為 elasticsearch,由于是一個 headless service,所以該域將解析為3個 Elasticsearch Pod 的 IP 地址列表。

然后我們創(chuàng)建這個服務

kubectl apply -f kibana.yaml

過了一會,我們的kibana的服務就起來了。

如果 Pod 已經是 Running 狀態(tài)了,證明應用已經部署成功了,然后可以通過 NodePort 來訪問 Kibana 這個服務,在瀏覽器中打開http://<任意節(jié)點IP>:30245即可,如果看到如下歡迎界面證明 Kibana 已經成功部署到了 Kubernetes集群之中。

3.部署 Fluentd

Fluentd 是一個高效的日志聚合器,是用 Ruby 編寫的,并且可以很好地擴展。對于大部分企業(yè)來說,Fluentd 足夠高效并且消耗的資源相對較少,另外一個工具Fluent-bit更輕量級,占用資源更少,但是插件相對 Fluentd 來說不夠豐富,所以整體來說,Fluentd 更加成熟,使用更加廣泛,所以我們這里也同樣使用 Fluentd 來作為日志收集工具。

工作原理
Fluentd 通過一組給定的數據源抓取日志數據,處理后(轉換成結構化的數據格式)將它們轉發(fā)給其他服務,比如 Elasticsearch、對象存儲等等。Fluentd 支持超過300個日志存儲和分析服務,所以在這方面是非常靈活的。主要運行步驟如下:

首先 Fluentd 從多個日志源獲取數據
結構化并且標記這些數據
然后根據匹配的標簽將數據發(fā)送到多個目標服務去

日志源配置
比如我們這里為了收集 Kubernetes 節(jié)點上的所有容器日志,就需要做如下的日志源配置:

路由配置
上面是日志源的配置,接下來看看如何將日志數據發(fā)送到 Elasticsearch:



match:標識一個目標標簽,后面是一個匹配日志源的正則表達式,我們這里想要捕獲所有的日志并將它們發(fā)送給 Elasticsearch,所以需要配置成**。
id:目標的一個唯一標識符。
type:支持的輸出插件標識符,我們這里要輸出到 Elasticsearch,所以配置成 elasticsearch,這是 Fluentd 的一個內置插件。
log_level:指定要捕獲的日志級別,我們這里配置成info,表示任何該級別或者該級別以上(INFO、WARNING、ERROR)的日志都將被路由到 Elsasticsearch。
host/port:定義 Elasticsearch 的地址,也可以配置認證信息,我們的 Elasticsearch 不需要認證,所以這里直接指定 host 和 port 即可。
logstash_format:Elasticsearch 服務對日志數據構建反向索引進行搜索,將 logstash_format 設置為true,Fluentd 將會以 logstash 格式來轉發(fā)結構化的日志數據。
Buffer: Fluentd 允許在目標不可用時進行緩存,比如,如果網絡出現故障或者 Elasticsearch 不可用的時候。緩沖區(qū)配置也有助于降低磁盤的 IO。
4.安裝
要收集 Kubernetes 集群的日志,直接用 DasemonSet 控制器來部署 Fluentd 應用,這樣,它就可以從 Kubernetes 節(jié)點上采集日志,確保在集群中的每個節(jié)點上始終運行一個 Fluentd 容器。當然可以直接使用 Helm 來進行一鍵安裝,為了能夠了解更多實現細節(jié),我們這里還是采用手動方法來進行安裝。

首先,我們通過 ConfigMap 對象來指定 Fluentd 配置文件,新建 fluentd-configmap.yaml 文件,文件內容如下:

上面配置文件中我們配置了 docker 容器日志目錄以及 docker、kubelet 應用的日志的收集,收集到數據經過處理后發(fā)送到 elasticsearch:9200 服務。

然后新建一個 fluentd-daemonset.yaml 的文件,文件內容如下:





我們將上面創(chuàng)建的 fluentd-config 這個 ConfigMap 對象通過 volumes 掛載到了 Fluentd 容器中,另外為了能夠靈活控制哪些節(jié)點的日志可以被收集,所以我們這里還添加了一個 nodSelector 屬性:

另外由于我們的集群使用的是 kubeadm 搭建的,默認情況下 master 節(jié)點有污點,所以要想也收集 master 節(jié)點的日志,則需要添加上容忍:

然后我們創(chuàng)建上面的configmap對象和daemonset服務

我們查看可以看到pod已經正常運行了。

然后我們進入kibana的頁面,點擊discover

在這里可以配置我們需要的 Elasticsearch 索引,前面 Fluentd 配置文件中我們采集的日志使用的是 logstash 格式,這里只需要在文本框中輸入logstash-*即可匹配到 Elasticsearch 集群中的所有日志數據,然后點擊下一步,進入以下頁面:

在該頁面中配置使用哪個字段按時間過濾日志數據,在下拉列表中,選擇@timestamp字段,然后點擊Create index pattern,創(chuàng)建完成后,點擊左側導航菜單中的Discover,然后就可以看到一些直方圖和最近采集到的日志數據了:


文章名稱:k8s搭建efk
本文網址:http://weahome.cn/article/cpiojg.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部