k8s部署ELK高可用集群(三)
前面几章,详细的讲了如何拥有一套k8s集群以及容器的生命周期,探测等,本节将开始实战,用es结合Logstash、Filebeat、kafka、redis等,有疑问的自行往前翻看。
·
## 前言:
前面几章,详细的讲了如何拥有一套k8s集群以及容器的生命周期,探测等,本节将开始实战,用es结合Logstash、Filebeat、kafka、redis等,有疑问的自行往前翻看。
一、开始部署监测服务
我们为了保证每个节点都有数据,我们选择daemoset控制器,让pod平均分布于每一个节点。使用fluentd插件采集容器的数据。
什么是fluentd?
Fluentd插件是Fluentd生态系统的重要组成部分,它为数据收集、处理和输出提供了极大的灵活性。这些插件基于Fluentd开发,并遵守Fluentd输出插件开发规范。 Fluentd支持多种类型的插件,其中一种被广泛应用于将采集到的数据写入DataHub。此外,Fluentd还有一个非常活跃的社区,社区成员贡献了大量的插件,覆盖了各种常见的需求。 例如,在Rainbond中使用Fluentd插件可以方便地收集业务日志,并输出到多个不同的服务。另一个例子是logging-operator,它依赖于自定义的fluentd插件,实现了根据指定的namespaces和labels转发日志。 总的来说,Fluentd插件丰富了Fluentd的功能,提高了数据处理的效率和便利性。
二、fluentd的部署
我们的fluentd也是用pod的方式来运行,所以要给这个pod足够的权限读取api-server。
vim fluentd.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: fluentd
namespace: kube-logging
labels:
app: fluentd
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: fluentd
labels:
app: fluentd
rules:
- apiGroups:
- ""
resources:
- pods
- namespaces
verbs:
- get
- list
- watch
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: fluentd
roleRef:
kind: ClusterRole
name: fluentd
apiGroup: rbac.authorization.k8s.io
subjects:
- kind: ServiceAccount
name: fluentd
namespace: kube-logging
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
namespace: kube-logging
labels:
app: fluentd
spec:
selector:
matchLabels:
app: fluentd
template:
metadata:
labels:
app: fluentd
spec:
serviceAccount: fluentd
serviceAccountName: fluentd
tolerations:
- key: node-role.kubernetes.io/master
effect: NoSchedule
containers:
- name: fluentd
image: fluentd:v1.9.1-debian-1.0
imagePullPolicy: IfNotPresent
env:
- name: FLUENT_ELASTICSEARCH_HOST
value: "elasticsearch.kube-logging.svc.cluster.local"
- name: FLUENT_ELASTICSEARCH_PORT
value: "9200"
- name: FLUENT_ELASTICSEARCH_SCHEME
value: "http"
- name: FLUENTD_SYSTEMD_CONF
value: disable
resources:
limits:
memory: 512Mi
requests:
cpu: 100m
memory: 200Mi
volumeMounts:
- name: varlog
mountPath: /var/log
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
terminationGracePeriodSeconds: 30
volumes:
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
kubectl apply -f fluentd.yaml
查看:一个节点一个pod
[root@master elk]# kubectl get pod -n kube-logging -owide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
es-cluster-0 1/1 Running 3 3d1h 192.168.104.26 node2 <none> <none>
es-cluster-1 1/1 Running 3 3d1h 192.168.104.27 node2 <none> <none>
es-cluster-2 1/1 Running 2 3d1h 192.168.104.25 node2 <none> <none>
fluentd-n4nhm 1/1 Running 0 2m13s 192.168.104.28 node2 <none> <none>
fluentd-vxlbn 1/1 Running 0 2m13s 192.168.166.164 node1 <none> <none>
fluentd-zpxdp 1/1 Running 0 2m13s 192.168.219.71 master <none> <none>
kibana-66f59798b7-gd6vh 1/1 Running 2 3d 192.168.166.163 node1 <none> <none>
[root@master elk]#
进入面板创建索引查看日志
更多推荐
已为社区贡献4条内容
所有评论(0)