kubernetes集群日志管理系统部署方案

news/2024/11/24 20:55:32/

安装前请下载各种所需yaml文件

1、安装 elasticsearch 组件

1.1 创建名称空间

#elasticsearch、fluentd、kibana都会安装到此空间下

kubectl apply -f kube-logging.yaml

1.2 查看 kube-logging 名称空间是否创建成功

kubectl get namespaces | grep kube-logging
[root@k8s-master ~]# kubectl get namespaces | grep kube-logging
kube-logging           Active   5h25m
[root@k8s-master ~]# 

1.3 安装 elasticsearch 相关服务

1.3.1 创建 headless service 服务

创建一个 headless service 的 Kubernetes 服务,服务名称是 elasticsearch,这个服务将为 3 个Pod 定义一个 DNS 域。headless service 不具备负载均衡也没有 IP

kubectl apply -f elasticsearch_svc.yaml
kubectl get svc -n kube-logging
[root@k8s-master ~]# kubectl get svc -n kube-logging
NAME            TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
elasticsearch   ClusterIP   None            <none>        9200/TCP,9300/TCP   5h26m
kibana          NodePort    10.98.127.253   <none>        5601:30059/TCP      5h23m
[root@k8s-master ~]# 

1.3.2 通过 statefulset 创建 elasticsearch 集群

1.3.2.1 创建 Storageclass,实现存储类动态供给

安装 nfs 服务,选择 k8s 集群的 master1 节点,k8s 集群的 master1 节点的 ip 是192.168.186.128

#所有机器都执行
yum install nfs-utils -y  #yum 安装 nfs 
systemctl start nfs #启动 nfs 服务
systemctl enable nfs.service #设置 nfs 开机自启动 
#在 master1 上创建一个 nfs 共享目录 
mkdir /data/v1 -p #编辑/etc/exports 文件
cat >> /etc/exports << EOF
/data/v1 *(rw,no_root_squash)
EOF#加载配置,使配置生效 
exportfs -arv 
systemctl restart nfs

1.4 创建 nfs 作为存储的供应商

1.4.1、 拉去镜像

#所有node节点拉去此镜像
docker pull registry.cn-hangzhou.aliyuncs.com/759035366/nfs-subdir-external-provisioner:v4.0.0

1.4.2、创建 sa

kubectl apply -f serviceaccount.yaml

1.4.3、对 sa 做 rbac 授权

kubectl apply -f rbac.yaml

1.4.4、创建

kubectl apply -f deployment.yaml
kubectl get pods | grep nfs

1.4.5、创建 stoorageclass

kubectl apply -f class.yaml

1.5 安装 elasticsearch 集群

kubectl apply -f elasticsearch-statefulset.yaml #更新资源清单文件 
kubectl get pods -n kube-logging
kubectl get pv,pvc -n kube-logging
[root@k8s-master ~]# kubectl get pods -n kube-logging
NAME                      READY   STATUS    RESTARTS      AGE
es-cluster-0              1/1     Running   0             5h33m
es-cluster-1              1/1     Running   0             5h33m
es-cluster-2              1/1     Running   0             5h33m
[root@k8s-master ~]# 
[root@k8s-master efk]#  kubectl get pv,pvc -n kube-logging
NAME                                                        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                            STORAGECLASS       REASON   AGE
persistentvolume/pvc-330d3905-bd55-47a5-b60f-6d2dd19cc59a   10Gi       RWO            Delete           Bound    kube-logging/data-es-cluster-2   do-block-storage            3h8m
persistentvolume/pvc-50ef3671-a617-4b1b-b215-e08b64ad61d8   10Gi       RWO            Delete           Bound    kube-logging/data-es-cluster-1   do-block-storage            3h8m
persistentvolume/pvc-71c98dbe-4dd0-480b-9a5c-0b6937b76c93   10Gi       RWO            Delete           Bound    kube-logging/data-es-cluster-0   do-block-storage            3h8mNAME                                      STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
persistentvolumeclaim/data-es-cluster-0   Bound    pvc-71c98dbe-4dd0-480b-9a5c-0b6937b76c93   10Gi       RWO            do-block-storage   3h8m
persistentvolumeclaim/data-es-cluster-1   Bound    pvc-50ef3671-a617-4b1b-b215-e08b64ad61d8   10Gi       RWO            do-block-storage   3h8m
persistentvolumeclaim/data-es-cluster-2   Bound    pvc-330d3905-bd55-47a5-b60f-6d2dd19cc59a   10Gi       RWO            do-block-storage   3h8m

kubectl port-forward es-cluster-0 9200:9200 --namespace=kube-logging #执行完毕后
在另外的终端窗口中,执行如下请求,新开一个 master1 终端:
curl http://localhost:9200/_cluster/state?pretty

2. 安装 kibana 可视化 UI 界面

kubectl apply -f kibana.yaml  #更新资源清单文件
kubectl edit svc kibana -n kube-logging  
#修改 service 的 type 类型为 NodePort
#把 type: ClusterIP 变成 type: NodePort  保存退出之后
kubectl get pods,svc -n kube-logging #查看暴露端口
[root@k8s-master ~]# kubectl get pods,svc -n kube-logging
NAME                          READY   STATUS    RESTARTS      AGE
pod/es-cluster-0              1/1     Running   0             5h37m
pod/es-cluster-1              1/1     Running   0             5h37m
pod/es-cluster-2              1/1     Running   0             5h37m
pod/kibana-7d99fd798b-6hh6q   1/1     Running   0             5h34mNAME                    TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)             AGE
service/elasticsearch   ClusterIP   None            <none>        9200/TCP,9300/TCP   5h37m
service/kibana          NodePort    10.98.127.253   <none>        5601:30059/TCP      5h34m
[root@k8s-master ~]# 

在浏览器中打开 http://<任意节点 IP>:暴露端口 即可,如果看到如下欢迎界面证明 Kibana 已经成功

3、安装 fluentd 组件

使用 daemonset 控制器部署 fluentd 组件,这样可以保证集群中的每个节点都可以运行同样fluentd 的 pod 副本,这样就可以收集 k8s 集群中每个节点的日志,在 k8s 集群中,容器应用程序的输入输出日志会重定向到 node 节点里的 json 文件中,fluentd 可以 tail 和过滤以及把日志转换成指定的格式发送到 elasticsearch 集群中。除了容器日志,fluentd 也可以采集 kubelet、kube-proxy、docker 的日志。

kubectl apply -f fluentd.yaml  #更新资源清单文件
kubectl get pods -n kube-logging
[root@k8s-master ~]# kubectl get pods -n kube-logging
NAME                      READY   STATUS    RESTARTS      AGE
es-cluster-0              1/1     Running   0             5h40m
es-cluster-1              1/1     Running   0             5h40m
es-cluster-2              1/1     Running   0             5h40m
fluentd-2nzgv             1/1     Running   0             5h30m
fluentd-gkkx5             1/1     Running   1 (24m ago)   5h30m
kibana-7d99fd798b-6hh6q   1/1     Running   0             5h38m
[root@k8s-master ~]# 

Fluentd 启动成功后,我们可以前往 Kibana 的 Dashboard 页面中 在浏览器中打开 http://<任意节点 IP>:暴露端口 即可,如果看到如下欢迎界面证明 Kibana 已经成功

在这里插入图片描述

4、测试收集 pod 容器日志

登录到 kibana 的控制面板,在 discover 处的搜索栏中输入
kubernetes.pod_name:counter,这将过滤名为的 Pod 的日志数据 counter,如下所示:

cat > pod.yaml << EOF
apiVersion: v1
kind: Pod
metadata:name: counter
spec:containers:- name: countimage: busyboximagePullPolicy: IfNotPresentargs: [/bin/sh, -c,'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
EOFkubectl apply -f pod.yaml

在这里插入图片描述

关于使用方面自己去研究!


http://www.ppmy.cn/news/1005945.html

相关文章

统一观测|借助 Prometheus 监控 ClickHouse 数据库

引言 ClickHouse 作为用于联机分析(OLAP)的列式数据库管理系统(DBMS), 最核心的特点是极致压缩率和极速查询性能。同时&#xff0c;ClickHouse 支持 SQL 查询&#xff0c;在基于大宽表的聚合分析查询场景下展现出优异的性能。因此&#xff0c;获得了广泛的应用。本文旨在分享阿…

RabbitMQ:概念和安装,简单模式,工作,发布确认,交换机,死信队列,延迟队列,发布确认高级,其它知识,集群

1. 消息队列 1.0 课程介绍 1.1.MQ 的相关概念 1.1.1.什么是MQ MQ(message queue&#xff1a;消息队列)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是message 而已&#xff0c;还是一种跨进程的通信机制…

Meta开源“次世代”大模型 Llama 2 模型文件下载

模型文件下载&#xff1a; stories15M.bin: https://drfs.ctcontents.com/file/26468910/906145620/e5702b/stories15M.bin stories110M.bin: https://drfs.ctcontents.com/file/26468910/906145752/804b2c/stories110M.bin stories42M.bin: https://drfs.ctcontents.com/file…

LeetCode 26 题:删除有序数组的重复项

思路 在写这一个题时&#xff0c;我突然想到了Python中的 set&#xff08;&#xff09;函数可能会有大用处&#xff0c;便选择了用Python写。 set&#xff08;&#xff09;函数可以将列表转化为集合&#xff0c;集合会保证元素的单一性&#xff0c;所以会自动删去相同字符。 …

uniapp 持续获取定位(登录状态下才获取)(不采用定时器)(任意页面都可监听定位改变)

基于上次文章做了优化和改良,保证在登录状态下才获取定位信息 uniapp 小程序实时且持续获取定位信息(全局设置一次)(单页面监听定位改变)(不采用定时器)_uniapp小程序定位_前端小胡兔的博客-CSDN博客本篇文章实现了uniapp 微信小程序实时获取定位信息,小程序打开即可持续获取定…

【传输层】Udp协议和Tcp协议的原理(一)

文章目录 前言一、Udp原理二、Tcp原理 1.TCP协议段格式 2.超时重传机制 3.深刻理解三次握手 4.深刻理解四次挥手总结 前言 传输层&#xff1a;TCP/UDP 传输层负责两台主机之间的数据传输&#xff0c;如传输控制协议&#xff08;TCP&#xff09;&…

ubuntu20.04开机黑屏只有光标闪烁

最初遇到这个问题我一直以为开机黑屏&#xff0c;然而就那一瞥让我发现了事情没那么简单&#xff0c;原来还有一个小小的光标闪烁&#xff0c;ok&#xff0c;活来了&#xff01; 原因分析 1、硬件可能连接不正确 2、驱动安装的有问题&#xff08;我遇到的是这个问题&#xff0…

Redis 报错 RedisConnectionException: Unable to connect to x.x.x.x:6379

文章目录 Redis报错类型可能解决方案 Redis报错类型 org.springframework.data.redis.connection. spingboot调用redis出错 PoolException: Could not get a resource from the pool; 连接池异常:无法从池中获取资源; nested exception is io.lettuce.core. 嵌套异常 RedisConn…