1. 程式人生 > >Kubernetes 叢集日誌管理 Elasticsearch + fluentd(二十)

Kubernetes 叢集日誌管理 Elasticsearch + fluentd(二十)

目錄

Kubernetes 開發了一個 Elasticsearch 附加元件來實現叢集的日誌管理。這是一個 Elasticsearch、Fluentd 和 Kibana 的組合。Elasticsearch 是一個搜尋引擎,負責儲存日誌並提供查詢介面;Fluentd 負責從 Kubernetes 蒐集日誌併發送給 Elasticsearch;Kibana 提供了一個 Web GUI,使用者可以瀏覽和搜尋儲存在 Elasticsearch 中的日誌。

一、安裝部署

Elasticsearch 附加元件本身會作為 Kubernetes 的應用在叢集裡執行,其 YAML 配置檔案可從 https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsearch

獲取。

我們把需要的檔案下載下來。

for file in es-service es-statefulset fluentd-es-configmap fluentd-es-ds kibana-deployment kibana-service; do wget https://raw.githubusercontent.com/kubernetes/kubernetes/master/cluster/addons/fluentd-elasticsearch/$file.yaml; done

官方不建議生產環境使用這種模式之間安裝,因為沒有設定安全以及儲存卷,建議生產環境大家設定儲存卷。
在我們安裝之前,我們首先需要註釋掉 kibana-deployment.yaml

中的環境變數 SERVER_BASEPATH,否則無法訪問。

然後通過 kubectl apply -f . 部署。

[[email protected] elasticsearch]# kubectl apply -f .
service/elasticsearch-logging created
serviceaccount/elasticsearch-logging created
clusterrole.rbac.authorization.k8s.io/elasticsearch-logging created
clusterrolebinding.rbac.authorization.k8s.io/elasticsearch-logging created
statefulset.apps/elasticsearch-logging created
configmap/fluentd-es-config-v0.1.6 created
serviceaccount/fluentd-es created
clusterrole.rbac.authorization.k8s.io/fluentd-es created
clusterrolebinding.rbac.authorization.k8s.io/fluentd-es created
daemonset.apps/fluentd-es-v2.2.1 created
deployment.apps/kibana-logging created
service/kibana-logging created

部分映象我們無法下載,我這裡還是借用阿里雲的映象。

docker pull registry.cn-hangzhou.aliyuncs.com/ct-elasticsearch/ct-elasticsearch:6.3.0
docker tag registry.cn-hangzhou.aliyuncs.com/ct-elasticsearch/ct-elasticsearch:6.3.0 k8s.gcr.io/elasticsearch:v6.3.0
docker image rm registry.cn-hangzhou.aliyuncs.com/ct-elasticsearch/ct-elasticsearch:6.3.0

docker pull registry.cn-hangzhou.aliyuncs.com/chewel_k8s/fluentd-elasticsearch:v2.2.0
docker tag registry.cn-hangzhou.aliyuncs.com/chewel_k8s/fluentd-elasticsearch:v2.2.0 k8s.gcr.io/fluentd-elasticsearch:v2.2.0
docker image rm registry.cn-hangzhou.aliyuncs.com/chewel_k8s/fluentd-elasticsearch:v2.2.0

所有的資源都部署在 kube-system Namespace 裡。
目前節點上面還沒有執行Fluentd,要在節點上面啟動的話,我們需要給節點打個標籤beta.kubernetes.io/fluentd-ds-ready=true

[[email protected] elasticsearch]# kubectl label node node01 beta.kubernetes.io/fluentd-ds-ready=true
node/node01 labeled
[[email protected] elasticsearch]# kubectl label node node02 beta.kubernetes.io/fluentd-ds-ready=true
node/node02 labeled

然後再檢視安裝情況。

[[email protected] elasticsearch]# kubectl get ds fluentd-es-v2.2.1 -n kube-system 
NAME                DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                              AGE
fluentd-es-v2.2.1   2         2         0       2            0           beta.kubernetes.io/fluentd-ds-ready=true   13m

關於 fluentd 的啟動,我這裡遇到了一點小問題,如下:

[[email protected] elasticsearch]# kubectl logs fluentd-es-v2.2.1-7j47n -n kube-system
2018-12-26 04:11:04 +0000 [error]: config error file="/etc/fluent/fluent.conf" error_class=Fluent::ConfigError error="Unknown filter plugin 'concat'. Run 'gem search -rd fluent-plugin' to find plugins"