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

安装前请下载各种所需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            3h8m

NAME                                      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             5h34m

NAME                    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: count
    image: busybox
    imagePullPolicy: IfNotPresent
    args: [/bin/sh, -c,'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']
EOF

kubectl apply -f pod.yaml

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/59774.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

全球数据泄露事件增加近三倍

网络安全公司 Surfshark 的最新研究显示&#xff0c;2023 年第二季度共有 1.108 亿个账户遭到泄露&#xff0c;其中美国排名第一&#xff0c;几乎占 4 月至 6 月所有泄露事件的一半。 俄罗斯排名第二&#xff0c;西班牙排名第三&#xff0c;其次是法国和土耳其。 与 2023 年…

3d虚拟vr汽车实景展厅吸引更多潜在消费者

随着人们对生活品质的追求&#xff0c;越来越多的消费者开始关注汽车的外观设计、内饰配置等方面。传统的展示方式已经不能满足消费者的需求&#xff0c;车辆VR虚拟漫游展示应运而生。借助VR虚拟现实和web3d开发建模技术&#xff0c;对汽车的外观、造型及信息数据进行数字化处理…

基于EMQ的企信说明文档(包含EMQ安装步骤、JAVA后端、VUE前端)

基于EMQ的企信说明文档(包含EMQ安装步骤、JAVA服务端、VUE客户端) 整体数据流图&#xff1a; VUE简单demo: 什么是EMQ EMQ X R3.1 (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 语言平台开发&#xff0c;支持大规模连接和分布式集群&#xff0c;简单来说&#…

C# PaddleDetection 版面分析

效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using Sdcb.PaddleDetection; using Sdcb.PaddleInference; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Lin…

spring总结

目录 什么是Spring? Spring的优缺点&#xff1f; 优点&#xff1a; 缺点&#xff1a; Spring IOC的理解 Spring AOP的理解 事务的边界为什么放在service层&#xff1f; Spring Bean的生命周期 什么是单例池&#xff1f;作用是什么&#xff1f; 单例Bean的优势 Bean…

【Python】Web学习笔记_flask(4)——钩子函数

钩子函数可以用来注册在请求处理的不同阶段执行出 Flask的请求钩子指的是在执行视图函数前后执行的一些函数&#xff0c; 之前是有4种&#xff0c;但是 before_first_request已经被删除了&#xff0c;使用时会报错 before_request&#xff1a;在每次请求前执行&#xff0c;…

⛳ Java多线程 一,线程基础

线程基础 ⛳ Java多线程 一&#xff0c;线程基础&#x1f43e; 一&#xff0c;线程基础&#x1f4ad; 1.1&#xff0c;什么是程序&#xff0c;进程&#xff0c;线程&#x1f3ed; 1.2&#xff0c;什么是并行和并发&#x1f463; 1.3&#xff0c;线程使用的场景&#x1f3a8; 1.…

深度学习之双线性插值

1、单线性插值 单线性插值是一种用于估计两个已知数据点之间未知点的方法。它基于线性关系&#xff0c;通过计算目标位置的值&#xff0c;使用已知点之间的线性函数进行插值。这在图像处理中常用于放缩、旋转等操作&#xff0c;计算简单&#xff0c;产生平滑结果&#xff0c;但…

网络安全(秋招)如何拿到offer?(含面试题)

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…

TCP三次握手四次挥手

一、TCP三次握手四次挥手 1.三次握手&#xff1a; 第一次握手&#xff1a;客户端发送syn包(seqx)到服务器&#xff0c;并进入SYN_SEND(发送)状态&#xff0c;等待服务器确认&#xff1b; 第二次握手&#xff1a;服务器收到syn包&#xff0c;必须确认客户的SYN&#xff08;ac…

刷题DAY15

第一题 给定一个数组arr 求子数组最大累加和 最暴力的 枚举每一个子数组 出结果 优化解 用一个cur指针保存累加和 每次cur变大 就用它更新max 如果cur累加到0以下 回复成0 假设答案法 假设我们最大的子数组是i 到 j位置上的 那么这个i 到j 之间 必不存在一个k使i...k累加和…

Unity 编辑器选择器工具类Selection 常用函数和用法

Unity 编辑器选择器工具类Selection 常用函数和用法 点击封面跳转下载页面 简介 在Unity中&#xff0c;Selection类是一个非常有用的工具类&#xff0c;它提供了许多函数和属性&#xff0c;用于操作和管理编辑器中的选择对象。本文将介绍Selection类的常用函数和用法&#xff…

基于注解实现接口幂等机制防止数据重复提交

1:什么是接口幂等性? 能解决什么问题? 接口幂等性是指无论调用接口的次数是一次还是多次&#xff0c;对于同一资源的操作都只会产生相同的效果。 比如: 一个订单记账的时候,会同步扣减库存数量,如果记账的按钮被用户多次触发,就会导致一个订单库存却被多次扣减的情况. 如果对…

无涯教程-Perl - References(引用)

Perl引用是一个标量数据类型&#xff0c;该数据类型保存另一个值的位置&#xff0c;该值可以是标量&#xff0c;数组或哈希。 创建引用 变量&#xff0c;子程序或值创建引用很容易&#xff0c;方法是在其前面加上反斜杠&#xff0c;如下所示: $scalarref \$foo; $arrayref …

用html+javascript打造公文一键排版系统11:改进单一附件说明排版

一、用htmljavascript打造公文一键排版系统10中的一个bug 在 用htmljavascript打造公文一键排版系统10&#xff1a;单一附件说明排版 中&#xff0c;我们对附件说明的排版函数是&#xff1a; function setAtttDescFmt(p) {var t p;var a ;if (-1 ! t.indexOf(:))//是半角冒…

CentOS 7虚拟机 虚拟机安装安装增强VBox_GAs_6.1.22失败:modprobe vboxguest failed

我安装的CentOS 在安装增强工具的时候报错: 查阅资料后 &#xff0c;解决方法&#xff1a; 1、更新kernel内核版本&#xff1a; yum update kernel -y //安装kernel-devel和gcc编译工具链yum install -y kernel-devel gcc//更新kernel和kernel-devel到最新版本yum -y upgrade …

express学习笔记7 - docker跟mysql篇

安装Docker和Navicat Docker 进官⽹https://docs.docker.com/get-docker/ 选择机型安装即可。 Navicat&#xff08;也可以在网上找个破解版本&#xff09; 进官⽹https://www.navicat.com/en/products/navicat-premium 安装完之后连接新建⼀个数据库连接 然后再⾥⾯新建⼀个数…

Flowable-网关-排他网关

目录 定义图形标记XML内容示例视频教程 定义 排他网关&#xff0c;也叫异或&#xff08;XOR&#xff09;网关&#xff0c;是 BPMN 中使用的最常见的网关之一&#xff0c;用来在流转中实 现发散分支决策。排他网关需要和条件顺序流搭配使用&#xff0c;当流程执行到排他网关&am…

APP广告流程中三个阶段的监测机制

APP广告流程包括三个阶段&#xff1a;展示广告&#xff0c;点击广告&#xff0c;进入Landing Site&#xff08;通过点击广告跳转到的目标站点&#xff09;。广告监测即对上述三个阶段进行监测。也就是说广告投出去以后&#xff0c;被多少人看到了&#xff0c;或者进一步点开了。…

2.4 网络安全新技术

数据参考&#xff1a;CISP官方 目录 云计算安全大数据安全移动互联网安全物联网安全工业互联网安全 一、云计算安全 1、云计算定义 云计算是指通过网络访问可扩展的、灵活的物理或虚拟共享资源池&#xff0c;并按需自助获取和管理资源的模式。在云计算中&#xff0c;计算资…