CKA认证 | Day2 K8s内部监控与日志
第三章 Kubernetes监控与日志
1、查看集群资源状态
在 Kubernetes 集群中,查看集群资源状态和组件状态是非常重要的操作。以下是一些常用的命令和解释,帮助你更好地管理和监控 Kubernetes 集群。
1.1 查看master组件状态
Kubernetes 的 Master 组件包括 API Server、Controller Manager 和 Scheduler。可以使用 kubectl get cs (cs:componentstatuses)命令来查看这些组件的状态。
- 命令:kubectl get cs
[root@k8s-master-1-71 ~]# kubectl get cs
Warning: v1 ComponentStatus is deprecated in v1.19+
NAME STATUS MESSAGE ERROR
etcd-0 Healthy {"health":"true","reason":""}
controller-manager Healthy ok
scheduler Healthy ok
ComponentStatus 在 Kubernetes 1.19 及以上版本中已被弃用,建议使用其他方式监控 Master 组件的状态;没有显示 API Server 的状态,因为查看 Master 组件状态的请求本身就是通过 API Server 进行的
1.2 查看所有的node状态
使用 kubectl get node 命令可以查看集群中所有节点的状态。
- 命令:kubectl get node
[root@k8s-master-1-71 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
k8s-master-1-71 Ready control-plane 72m v1.26.0
k8s-node1-1-72 Ready <none> 58m v1.26.0
k8s-node2-1-73 Ready <none> 58m v1.26.0
该命令获取的是 kubelet 的信息,显示节点的状态、角色、年龄和版本
1.3 查看资源的详细信息
使用 kubectl describe 命令可以查看特定资源的详细信息,包括 Events 相关事件。
- 命令:kubectl describe <资源类型> <资源名称>
kubectl describe node k8s-master-1-71
该命令会输出节点的详细信息,包括 CPU、内存、存储等资源的使用情况,以及最近的事件(Events)
1.4 查看资源信息
使用 kubectl get 命令可以查看资源的简要信息,通过添加 -o wide 或 -o yaml 参数可以输出更详细的信息或导出 YAML 文件。
- 命令:kubectl get <资源类型> <资源名称> //-o wide、-o yaml
-o wide 输出详细信息
-o yaml 导出YAML文件
kubectl get pod my-pod
NAME READY STATUS RESTARTS AGE
my-pod 1/1 Running 0 5mkubectl get pod my-pod -o wide ## 详细信息
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
my-pod 1/1 Running 0 5m 10.244.1.2 k8s-node1-1-72 <none> <none>kubectl get pod my-pod -o yaml ## 导出 YAML 文件
apiVersion: v1
kind: Pod
metadata:name: my-podnamespace: default...
spec:containers:- name: my-containerimage: my-image:latest...
status:phase: Running...
1.5 查看集群组件命令的缩写
通过使用 kubectl api-resources 命令可以查看 Kubernetes 中所有资源的缩写和详细信息。
kubectl api-resources
NAME SHORTNAMES APIVERSION NAMESPACED KIND
bindings v1 true Binding
componentstatuses cs v1 false ComponentStatus
configmaps cm v1 true ConfigMap
endpoints ep v1 true Endpoints
events ev v1 true Event
limitranges limits v1 true LimitRange
namespaces ns v1 false Namespace
nodes no v1 false Node
persistentvolumeclaims pvc v1 true PersistentVolumeClaim
persistentvolumes pv v1 false PersistentVolume
pods po v1 true Pod
...
该命令列出所有 Kubernetes 资源的名称、缩写、API 版本、是否命名空间化以及资源类型
2、监控集群资源利用率
在 Kubernetes 集群中,监控集群资源利用率是非常重要的,可以帮助你了解集群中各个节点和 Pod 的资源消耗情况。kubectl top 命令是一个非常有用的工具,但默认情况下,Kubernetes 集群并不会自动安装 Metrics Server,因此需要手动部署。
2.1 查看 Node 和 Pod 资源消耗
① 查看Node资源消耗:
- 命令:kubectl top node <node name>
② 查看Pod资源消耗:
- 命令:kubectl top pod <pod name>
注意:执行时会提示错误 ” error: Metrics API not available “,因该命令需要由metric-server服务提供数据,而这个服务默认没 有安装,还需要手动部署下。
2.2 metric-server
Metrics Server 是一个集群范围的资源使用情况的数据聚合器,作为一 个应用部署在集群中。Metric Server从每个节点上Kubelet API收集指 标,通过Kubernetes聚合器注册在Master APIServer中,为集群提供Node、Pods资源利用率指标。

项目地址:https://github.com/kubernetes-sigs/metrics-server
1)Metrics Server工作流程:
kubectl top -> apiserver -> metric-server(pod) -> kubelet(cadvisor)

备注:实质上采集数据的是由kubelet上的内嵌的(cadvisor)进行收集,而容器化部署的metric-server主要负责数据聚合,metric-server携带CA证书通过内网访问kubelet的cadvisor采集,需要声明取消证书验证
2)Metrics Server部署:
增加 kubelet-insecure-tls 参数,作用是告诉metrics-server不验证kubelet提供的https证书
下载 Metrics Server 的 YAML 文件:
[root@k8s-master-1-71 ~]# wget https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.7/components.yaml编辑 YAML 文件,添加 kubelet-insecure-tls 参数:
[root@k8s-master-1-71 ~]# vi components.yaml
...containers:- args:- --cert-dir=/tmp- --secure-port=4443- --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname- --kubelet-use-node-status-port- --metric-resolution=15s- --kubelet-insecure-tls //不验证kubelet提供的https证书image: lizhenliang/metrics-server:v0.6.1 //转存国内镜像地址
...应用 YAML 文件:
[root@k8s-master-1-71 ~]# kubectl apply -f metrics-server.yaml
检查是否部署成功:
[root@k8s-master-1-71 ~]# kubectl get apiservices |grep metrics
v1beta1.metrics.k8s.io kube-system/metrics-server True 4m13s[root@k8s-master-1-71 ~]# kubectl get --raw /apis/metrics.k8s.io/v1beta1/nodes
{"kind": "NodeMetricsList","apiVersion": "metrics.k8s.io/v1beta1","metadata": {},"items": [{"metadata": {"name": "k8s-master","creationTimestamp": "2023-04-03T06:30:53Z","labels": {"beta.kubernetes.io/arch": "amd64","beta.kubernetes.io/os": "linux","kubernetes.io/arch": "amd64","kubernetes.io/hostname": "k8s-master","kubernetes.io/os": "linux","node-role.kubernetes.io/control-plane": "","node.kubernetes.io/exclude-from-external-load-balancers": ""}},"timestamp": "2023-04-03T06:30:45Z","window": "11.07s","usage": {"cpu": "230752793n","memory": "1218328Ki"}},{"metadata": {"name": "k8s-node1","creationTimestamp": "2023-04-03T06:30:53Z","labels": {"beta.kubernetes.io/arch": "amd64","beta.kubernetes.io/os": "linux","kubernetes.io/arch": "amd64","kubernetes.io/hostname": "k8s-node1","kubernetes.io/os": "linux"}},"timestamp": "2023-04-03T06:30:45Z","window": "11.059s","usage": {"cpu": "131423522n","memory": "960948Ki"}},{"metadata": {"name": "k8s-node2","creationTimestamp": "2023-04-03T06:30:53Z","labels": {"beta.kubernetes.io/arch": "amd64","beta.kubernetes.io/os": "linux","kubernetes.io/arch": "amd64","kubernetes.io/hostname": "k8s-node2","kubernetes.io/os": "linux"}},"timestamp": "2023-04-03T06:30:46Z","window": "21.871s","usage": {"cpu": "150204652n","memory": "975844Ki"}}]
}
如果状态True并能返回数据说明Metrics Server服务工作正常。
3、管理K8s组件日志
在 Kubernetes 集群中,管理和查看组件日志是非常重要的,这有助于诊断和解决集群中的问题。以下是一些常见的日志管理方法和命令。
3.1 K8S 系统的组件日志
Kubernetes 系统的组件日志,包括 Master 节点上的组件(如 API Server、Controller Manager、Scheduler)和 Worker 节点上的组件(如 kubelet、kube-proxy)。
1)systemd 守护进程管理的组件 查看相关日志
对于由 systemd 守护进程管理的组件(如 kubelet),可以使用 journalctl 命令查看相关日志
journalctl -u kubelet
journalctl -u kubelet -f //-f实时查看
# kublete 如果有问题,可以重启kubelete服务
systemctl restart kubelet
2)Pod部署的组件 查看相关日志:
对于以 Pod 形式部署的组件(如 kube-proxy、etcd 等),可以使用 kubectl logs 命令查看相关日志
kubectl logs kube-proxy-btz4p -n kube-system
kube-proxy-btz4p 是 kube-proxy 的 Pod 名称。
-n kube-system 指定命名空间为 kube-system。
3)系统日志 查看相关日志:
系统日志通常存储在 /var/log/messages 文件中
/var/log/messages
3.2 K8S Cluster 里面部署的应用程序日志
Kubernetes 集群中部署的应用程序日志可以分为两种类型:标准输出(stdout)和日志文件。
1)标准输出(stdout)日志:
应用程序的标准输出日志可以通过 kubectl logs 命令查看
- 查看 Pod 的标准输出日志:kubectl logs <pod-name>
kubectl logs my-app-pod
2)日志文件:
如果应用程序将日志写入文件,可以通过挂载 Volume 的方式将日志文件存储到宿主机或共享存储中,然后通过 kubectl exec 命令进入容器查看日志文件。
挂载 Volume 示例:
apiVersion: v1
kind: Pod
metadata:name: my-app-pod
spec:containers:- name: my-appimage: my-app-imagevolumeMounts:- name: log-volumemountPath: /var/log/my-appvolumes:- name: log-volumehostPath:path: /var/log/my-apptype: DirectoryOrCreate
查看日志文件:
kubectl exec -it my-app-pod -- cat /var/log/my-app/app.log
4、管理K8s应用日志
在 Kubernetes 集群中,管理和查看应用程序日志是非常重要的,这有助于监控应用程序的运行状态和排查问题。以下是一些常见的日志管理方法和命令。
1)查看容器标准输出日志:
- 命令:kubectl logs <Pod名称>
- 命令:kubectl logs -f <Pod名称> //实时查看容器标准输出日志
kubectl logs my-pod
kubectl logs -f my-pod
2)标准输出在宿主机的路径:
标准输出日志在宿主机上的路径通常是 /var/lib/docker/containers/<container-id>/<container-id>-json.log。你可以通过 kubectl describe 命令查看容器的 ID。
- 命令:kubectl describe pod <Pod名称>
- cat /var/lib/docker/containers/<container-id>/<container-id>-json.log
kubectl describe pod my-pod //在输出中找到 Container ID
Containers:my-container:Container ID: docker://abcdef123456...## 查看标准输出日志文件:
cat /var/lib/docker/containers/abcdef123456/abcdef123456-json.log
3)查看日志文件,进入到终端日志目录查看:
如果你的应用程序将日志写入到文件中,可通过 kubectl exec 命令进入容器的终端,然后查看日志文件。
- 命令:kubectl exec -it <Pod名称> -- bash
- cat /var/log/myapp.log
kubectl exec -it my-pod -- bash
cat /var/log/myapp.log
4)使用日志收集工具
在生产环境中,通常会使用日志收集工具(如 Fluentd、Fluent Bit、ELK Stack 等)来集中管理和分析日志。这些工具可以将日志从各个节点和容器中收集起来,并存储到中央日志存储系统中,方便查询和分析。
- Fluentd: 一个开源的数据收集器,可以收集、处理和转发日志数据。
- Fluent Bit: Fluentd 的轻量级版本,适用于资源受限的环境。
- ELK Stack: 由 Elasticsearch、Logstash 和 Kibana 组成的日志分析平台。
5、收集K8s日志思路
收集 Kubernetes 日志的思路包括:确定日志源、选择合适的日志收集工具、配置日志收集、选择日志存储和分析平台、配置日志监控和报警机制,以及制定日志保留和清理策略。通过这些步骤,可以有效地收集、存储、分析和监控 Kubernetes 集群中的日志,确保系统的稳定性和可维护性。
需要明确收集的日志类型和来源,Kubernetes 中的日志主要分为以下几类:
- 容器日志:每个容器的标准输出(stdout)和标准错误(stderr)日志。
- Pod 日志:Pod 级别的日志,通常是容器日志的集合。
- 节点日志:Kubernetes 节点(Node)上的系统日志,包括 kubelet、kube-proxy 等组件的日志。
- API 服务器日志:Kubernetes API 服务器的日志,记录 API 请求和响应。
- 控制器管理器日志:Kubernetes 控制器管理器的日志,记录控制器的行为。
- 调度器日志:Kubernetes 调度器的日志,记录 Pod 的调度决策。
- 应用程序日志:应用程序自定义的日志,通常通过文件或网络输出。
扩展实践
1、查看pod日志,并将日志中Error的行记录到指定文件
- pod名称:web
- 文件:/opt/web
2、查看指定标签使用cpu最高的pod,并记录到到指定文件
- 标签:app=web
- 文件:/opt/cpu
小结:
本篇为 【Kubernetes CKA认证 Day2】的学习笔记,希望这篇笔记可以让您初步了解到 K8s内部监控与日志,课后还有扩展实践,不妨跟着我的笔记步伐亲自实践一下吧!
Tip:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。
相关文章:
CKA认证 | Day2 K8s内部监控与日志
第三章 Kubernetes监控与日志 1、查看集群资源状态 在 Kubernetes 集群中,查看集群资源状态和组件状态是非常重要的操作。以下是一些常用的命令和解释,帮助你更好地管理和监控 Kubernetes 集群。 1.1 查看master组件状态 Kubernetes 的 Master 组件包…...
电信网关配置管理系统 upload_channels.php 文件上传致RCE漏洞复现
0x01 产品简介 中国电信集团有限公司(英文名称“China Telecom”、简称“中国电信”)成立于2000年9月,是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员实现对网关设备的远…...
ubuntu更改max_map_count
在Ubuntu系统中,max_map_count是一个内核参数,用于限制每个进程可以拥有的内存段的数量。对于Elasticsearch等需要大量内存映射的应用,可能需要增加这个值。 执行以下步骤来更改max_map_count的值: 打开终端。 输入以下命令以编…...
《NPU、CPU、GPU 算力定义和计算方式》
一、引言 在人工智能时代,算力成为了推动技术发展的关键因素之一。不同类型的处理器,如中央处理器(CPU)、图形处理器(GPU)和神经网络处理器(NPU),在算力方面有着各自的特…...
初级数据结构——顺序表
目录 前言一、定义与特点二、类型三、基本操作四、应用场景五、优缺点六、元素插入和删除动态图解插入删除 七、代码模板八、使用顺序表的经典例题1.求奇数的乘积代码题解 2.数值统计代码题解 九、总结结语 前言 顺序表示最基础的数据结构之一,它也是我们学习开始学…...
游戏引擎学习第五天
这节貌似没讲什么 视频参考:https://www.bilibili.com/video/BV1Gmm2Y5EwE/ uint8 *A somewhere in memory; uint8 *B somewhere in memory;//BEFORE WE GOT TO HERE int Y *B; // whatever was actually there before the 5 *A 5; int X *B; // 5 //Obviously! Y and …...
智能社区服务小程序+ssm
智能社区服务小程序 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了智能社区服务小程序的开发全过程。通过分析智能社区服务小程序管理的不足,创建了一个计算机管理智能社区服务小程序的方案。文…...
glide性能优化实战
glide性能优化实战 前言 项目使用glide加载图片之前也只是会基本api,这次项目有非常多的图片需要展示,而且设备是一个android12的版本,但是性能不太理想,分给APP的资源不太多,所以需要优化现有图片加载逻辑,读者可以…...
Python 环境搭建和安装(保姆级教程)
本章节我们将向大家介绍如何在本地搭建Python开发环境。 Python可应用于多平台包括 Linux 和 Mac OS X。 你可以通过终端窗口输入 "python" 命令来查看本地是否已经安装Python以及Python的安装版本。 Unix (Solaris, Linux, FreeBSD, AIX, HP/UX, SunOS, IRIX, 等…...
Java并发编程(二):同步机制与多线程是否矛盾
同步机制与多线程是否矛盾 0 纠正对异步和多选误解1 概述2 为什么要引入同步机制3 为什么多线程依然有意义3 总结 大家好,我是欧阳方超,可以关注我的公众号“欧阳方超”,后续内容将在公众号首发。 0 纠正对异步和多选误解 行文之前先纠正一下…...
golang分布式缓存项目 Day2 单机并发缓存
注:该项目原作者:https://geektutu.com/post/geecache-day1.html。本文旨在记录本人做该项目时的一些疑惑解答以及部分的测试样例以便于本人复习。 支持并发读写 接下来我们使用 sync.Mutex 封装 LRU 的几个方法,使之支持并发的读写。在这之…...
一个百度、必应搜索引擎图片获取下载的工具包
前言:前段时间需要一大批图片,跑去百度搜图下载,发现特别麻烦,于是用了一天时间写了一个工具库,方便后续使用,这里分享给大家 imagecapture 是一个用 Go 语言编写的库,旨在从百度和必应等搜索引…...
安全见闻(网络安全篇)
笔记仅供学习,切勿触碰法律红线! 以下笔记学习来自B站泷羽Sec:https://space.bilibili.com/350329294?spm_id_from333.337.search-card.all.click 如涉及侵权马上删除文章 1.编程语言 C语言:一种通用的、面向过程的编程语言&am…...
手写一些方法
模拟new方法 function Otaku(name,age) {this.name name;this.age age; this.habit Games}Otaku.prototype.strength 60;Otaku.prototype.sayName function () {console.log("I am " this.name);};function myNew(fn, ...args) {const obj Object.create(f…...
仅需三步!用AI工具免费打造10w+抖音爆款烟火秀视频教程
抖音上的烟火秀视频总能唤起人们对节日的温馨回忆,它们不仅视觉效果震撼,还自带流量属性。我自己在刷到这类视频时,也不禁回想起童年放烟花的快乐时光,那种浓厚的年味让人怀念。这些视频通常伴随着合适的音乐,能够迅速…...
基于redis实现API接口访问次数限制
一,概述 日常开发中会有一个常见的需求,需要限制接口在单位时间内的访问次数,比如说某个免费的接口限制单个IP一分钟内只能访问5次。该怎么实现呢,通常大家都会想到用redis,确实通过redis可以实现这个功能,…...
[ Linux 命令基础 3 ] Linux 命令详解-文件和目录管理命令
🍬 博主介绍 👨🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…...
npm i 的时候报错: npm ERR! Error: EPERM: operation not permitted, rename
文章目录 噩梦解决办法总结 噩梦 最近改漏洞,这个项目删掉了 node_modules文件夹 重新安装依赖,结果安装一半的时候就一直报这个错。 然后查了很多方法,基本都是下面这些: 权限不够,以管理员运行cmd重新安装。清除 n…...
如何迁移剪映源文件
1、打开剪映,打开全局设置 2、查看草稿位置。把要迁移的文件拷贝到这个路径下面。 3、关闭文件,返回上一层界面,可以看到拷贝到目录下的文件。...
Go语言中的`io.Copy`函数:高效的数据复制解决方案
在Go语言中,io.Copy函数是一个强大而高效的工具,用于将数据从一个io.Reader复制到一个io.Writer。这篇文章将深入探讨io.Copy函数的工作原理、使用方法及其在实际应用中的优势。无论您是后端开发人员还是对Go语言感兴趣的程序员,这篇文章都将…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
WEB3全栈开发——面试专业技能点P7前端与链上集成
一、Next.js技术栈 ✅ 概念介绍 Next.js 是一个基于 React 的 服务端渲染(SSR)与静态网站生成(SSG) 框架,由 Vercel 开发。它简化了构建生产级 React 应用的过程,并内置了很多特性: ✅ 文件系…...
