EFK日志收集系统+Rancher安装

前言

日志采集

Fluentd

Fluentd是一个开源数据收集、处理、转发系统。通过在kubernetes集群节点上安装Fluentd,来获取容器日志文件、过滤和转换日志数据,然后将数据传送到Elasticsearch集群,在该集群中进行索引和存储。

Filebeat

常用于采集、处理日志。是用于转发和收集日志数据的轻量级传送工具。
Filebeat监视指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或Logstash中。
优点是它只是一个二进制文件,占用资源非常少。缺点是没有复杂的数据解析处理能力。

beats包含六种工具

  • Packetbeat:网络数据(收集网络流量数据)
  • Metricbeat: 指标(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
  • Filebeat:日志文件(收集文件数据)
  • Winlogbeat: windows事件日志(收集Windows事件日志数据)
  • Auditbeat:审计数据(收集审计日志)
  • Heartbeat: 运行时间监控(收集系统运行时的数据)

Logstash

支持动态的从各种数据源收集数据,并对数据进行实时解析、转换、过滤、分析、统一格式、聚合等操作。具有实时管道功能。
缺点是最少占用2G内存、不支持缓存;优点是可以将日志转为任意格式、灵活且插件多、文档丰富,几乎可以解决任何问题。

日志缓冲/消峰

常用于解决日志阻塞、延迟、不实时等问题。
TB/天,级别的日志需要衡量做日志缓冲处理。

Kafka

Redis

Elasticsearch

Elasticsearch是一个实时的、分布式的、可扩展的日志存储和搜索引擎。支持进行全文本和结构化搜索以及对日志进行分析。
它通常用于索引和搜索大量日志数据,也可以用于搜索许多不同种类的文档。
具有分布式、零配置、自动发现、索引自动分片、索引副本机制、restful风格接口、多数据源、自动搜索负载等特点。

kibana

将Elasticsearch采集到的数据通过dashborad(仪表盘)可视化展示出来。kibana允许你通过web页面浏览Elasticsearch日志数据,也可以自定义查询条件快速检索出Elasticsearch中的日志数据。

部署EFK

安装Elasticsearch

cat kube-logging.yaml 
apiVersion: v1
kind: Namespace
metadata:
  name: kube-logging

kubectl apply -f kube-logging.yaml
kubectl get ns | grep kube-logging
cat elasticsearch_svc.yaml 
apiVersion: v1
kind: Service
metadata:
  name: elasticsearch
  namespace: kube-logging
  labels:
    app: elasticsearch
spec:
  selector:
    app: elasticsearch
  clusterIP: None
  ports:
    - port: 9200
      name: rest
    - port: 9300
      name: inter-node

kubectl get svc -n kube-logging | grep elastic
elasticsearch   ClusterIP   None         <none>        9200/TCP,9300/TCP   24s

部署三个节点的Elasticsearch集群,其目的是避免高可用中的多节点集群发生的脑裂问题。https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html#split-brain

yum install nfs-utils -y
systemctl start nfs && systemctl enable nfs.service
mkdir -p /data/v1
cat /etc/exports
/data/v1 192.168.40.0/24(rw,no_root_squash)

exportfs -arv
systemctl restart nfs
cat serviceaccount.yaml 
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-provisioner

kubectl apply -f serviceaccount.yaml
cat rbac.yaml 
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]
  - apiGroups: [""]
    resources: ["services", "endpoints"]
    verbs: ["get"]
  - apiGroups: ["extensions"]
    resources: ["podsecuritypolicies"]
    resourceNames: ["nfs-provisioner"]
    verbs: ["use"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-provisioner
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-provisioner
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-provisioner
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-provisioner
  apiGroup: rbac.authorization.k8s.io

kubectl apply -f rbac.yaml
# 增加一条:--feature-gates=RemoveSelfLink=false
vim /etc/kubernetes/manifests/kube-apiserver.yaml
    - kube-apiserver
    - --feature-gates=RemoveSelfLink=false

# 注:下述修改过程会导致6443端口短暂的无法被访问,对于k8s的高可用集群,请一台一台的修改,apply后手动把对应的pod删除。对应单台k8s,请耐心等待。
kubectl apply -f /etc/kubernetes/manifests/kube-apiserver.yaml
# 注上述命令在k8s v1.25版本不能使用了,会导致apiServer容器启动失败,因为默认已经把RemoveSelfLink锁定为为true了。
ctr -n=k8s.io images import elasticsearch_7_2_0.tar.gz
ctr -n=k8s.io images import busybox.tar.gz
wget https://github.com/kubernetes-sigs/nfs-subdir-external-provisioner/releases/download/nfs-subdir-external-provisioner-4.0.16/nfs-subdir-external-provisioner-4.0.16.tgz
tar -xvf nfs-subdir-external-provisioner-4.0.16.tgz
tar -xvf helm-v3.8.1-linux-amd64.tar.gz && mv linux-amd64/helm /usr/local/bin/helm && helm help
cd nfs-subdir-external-provisioner 
vim values.yaml
image:
  repository: registry.cn-hangzhou.aliyuncs.com/k8s-image-mirrors/nfs-subdir-external-provisioner

nfs:
  server: 192.168.40.180
  path: /data/v1

  provisionerName: example.com/nfs

  name: do-block-storage

kubectl create ns nfs
helm install  nfs-subdir-external-provisioner . -n nfs
kubectl get sc
kubectl apply -f elasticsearch-statefulset.yaml
kubectl get pods -n kube-logging
kubectl port-forward es-cluster-0 9200:9200 --namespace=kube-logging
curl http://localhost:9200/_cluster/state?pretty
kubectl get pvc -n kube-logging
ctr -n=k8s.io images import kibana_7_2_0.tar.gz
kubectl apply -f kibana.yaml
kubectl get pods -n kube-logging
kubectl get svc -n kube-logging
kubectl edit svc kibana -n kube-logging
  type: NodePort

浏览器打开网址:http://192.168.40.183:30147/app/kibana#/home?_g=()
使用deamonset的方式运行Fluentd容器。Fluentd可以tail、过滤和把日志转换成指定格式发送到Elasticsearch集群。
除了容器日志,Fluentd也可以采集kubelet、kube-proxy、docker日志。

ctr -n=k8s.io images import fluentd.tar.gz
kubectl apply -f fluentd.yaml
kubectl get pods -n kube-logging

在这里插入图片描述
在这里插入图片描述

kibana查询语言官方地址:https://www.elastic.co/guide/en/kibana/7.2/kuery-query.html

部署Rancher

官方网址:https://ranchermanager.docs.rancher.com/zh/getting-started/overview
k8s版本与Rancher版本版本矩阵:https://www.suse.com/suse-rancher/support-matrix/all-supported-versions/rancher-v2-7-3/

# 在安装有docker服务的服务器上导入Rancher server 服务镜像
docker pull rancher/rancher:v2.7.3
ocker run -d --restart=unless-stopped \
   -p 80:80 -p 443:443 \
   --privileged \
   rancher/rancher:v2.7.3

# 使用浏览器打开网址:https://192.168.40.183/dashboard/

在这里插入图片描述

docker ps -a
docker logs  41da18323f94  2>&1 | grep "Bootstrap Password:"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

# 在k8s集群的node节点导入Rancher-agent镜像
docker pull rancher/rancher-agent:v2.7.3
docker pull rancher/shell:v0.1.19
docker save -o rancher-agent-v2.7.3.tar.gz docker.io/rancher/rancher-agent:v2.7.3
ctr -n k8s.io images import rancher-agent-v2.7.3.tar.gz
curl --insecure -sfL https://192.168.40.183/v3/import/dhfwk4bs6g4c8tmf5f4lcn25h2gt4crmqctdq7wt65w2qztnjgnvds_c-m-7w96p4r9.yaml | kubectl apply -f -
kubectl get pods -n cattle-system
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值