1、下載官方y(tǒng)aml配置文件到master服務(wù)器
https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/fluentd-elasticsearch
主要是以下幾個文件:
es-service.yaml es-statefulset.yaml fluentd-es-configmap.yaml fluentd-es-ds.yaml kibana-deployment.yaml kibana-service.yaml
#git clone https://github.com/kubernetes/kubernetes.git #把整個項目克隆到本地
2、注釋kibana-deployment.yaml文件下面兩行,否則會因為無效的證書頒發(fā)機(jī)構(gòu)無法訪問 tls: unknown certificate authority
#- name: SERVER_BASEPATH
# value: /api/v1/namespaces/kube-system/services/kibana-logging/proxy
3、封裝fluentd-elasticsearch鏡像。
#cd kubernetes/cluster/addons/fluentd-elasticsearch/fluentd-es-image
#docker build -t k8s.gcr.io/fluentd-elasticsearch:v2.2.0 -f Dockerfile .
#把鏡像導(dǎo)出并發(fā)送到node節(jié)點(diǎn),如果有私有倉庫,先上傳到私有倉庫,再修改fluentd-es-ds.yaml文件里面的image為自己私有倉庫鏡像。
#docker save k8s.gcr.io/fluentd-elasticsearch:v2.2.0 | bzip2 | pv | ssh root@node1 'cat | docker load'
#docker save k8s.gcr.io/fluentd-elasticsearch:v2.2.0 | bzip2 | pv | ssh root@node2 'cat | docker load'
拉取docker官方對google的容器做的鏡像啟動會報錯如下:這是因為沒有安裝插件。
[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"
4、部署yaml
#節(jié)點(diǎn)設(shè)置標(biāo)簽beta.kubernetes.io/fluentd-ds-ready=true,否則fluentd-es無法部署。
#kubectl label node node1 beta.kubernetes.io/fluentd-ds-ready=true
#kubectl label node node2 beta.kubernetes.io/fluentd-ds-ready=true
#cd ..
#kubectl apply -f ./
#kubectl get pod,svc -n kube-system
5、配置ingress規(guī)則訪問kibana-logging
#cat ingress.yml
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: elk-ingress namespace: kube-system spec: rules: - host: elk.test.com http: paths: - path: / backend: serviceName: kibana-logging servicePort: 5601
#配置ingress控制器(traefik、Nginx-ingress等)以后就可以配置host訪問elk.test.com
6、日志持久化之NFS動態(tài)PV
#kubectl delete -f es-statefulset.yaml
按照 Kubernetes使用StorageClass動態(tài)生成NFS類型的PV 部署好NFS動態(tài)PV
a.更改NFS共享權(quán)限
#cat /etc/exports
/var/data 192.168.15.0/24(rw,sync,insecure,no_subtree_check,no_root_squash)
注意:權(quán)限不正確,會導(dǎo)致elasticsearch-logging-無法啟動,會報錯:
+ chown -R elasticsearch:elasticsearch /data
chown: changing ownership of '/data': Operation not permitted
b.修改es-statefulset.yaml文件,把默認(rèn)的emptyDir改成NFS動態(tài)pv
注釋默認(rèn)的volumes
在文件后面添加如下內(nèi)容,注意格式:
volumeClaimTemplates: - metadata: name: elasticsearch-logging spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi storageClassName: nfs-elk
c.啟動測試
#kubectl apply -f es-statefulset.yaml
過一段時間后,NFS共享目錄下面已經(jīng)存儲了日志內(nèi)容。
[root@Master data]# du -sh kube-system-elasticsearch-logging-elasticsearch-logging-*
277M kube-system-elasticsearch-logging-elasticsearch-logging-0-pvc-05c74e78-fc65-11e8-b19e-000c29731f53
271M kube-system-elasticsearch-logging-elasticsearch-logging-1-pvc-7cbce610-fce5-11e8-981d-000c29731f53