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语言感兴趣的程序员,这篇文章都将…...
mysql视图和用户管理
视图 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。视图很简单,就是把我们后面的select之前我们使用的时候是形成一…...
Unity UI性能优化实战:UGUI Canvas重建与FGUI渲染控制深度解析
1. 这不是UI框架对比,而是我在三个项目里用烂UGUI、摸透FGUI后写下的血泪清单“Unity UI开发”这六个字,听上去平平无奇,可只要你在实际项目里做过超过两个版本的界面迭代,就会发现:它根本不是拖几个Image和Text出来排…...
HTTPS静态资源403/404根因排查:从Nginx配置到SELinux权限
1. 这不是SSL证书的问题,而是HTTP服务配置的“隐身故障”你刚在云服务商控制台花了几十块钱买了张正规CA签发的SSL证书,上传到Nginx或Apache,配好了443端口,https://yourdomain.com打开首页也绿锁高亮,一切看起来都对—…...
JWT认证深度解析:从签名原理到密钥轮换与灰度升级
1. 这不是“加个Token就完事”的流程,而是身份信任的完整传递链JWT认证流程(JSON Web Token)——这七个字在今天几乎成了后端接口开发的标配术语。但你有没有遇到过这样的情况:前端传了token,后端校验通过,…...
Unity InputSystem避坑指南:用Shift+1实现组合键,为什么我的数字键1会触发两次?
Unity InputSystem组合键触发异常解析:从现象到解决方案的深度实践刚接触Unity InputSystem的开发者,在实现组合键功能时经常会遇到一个令人困惑的现象:明明只按下了Shift1组合键,为什么数字键1对应的Action会被触发两次ÿ…...
Qwen-Agent:企业级AI智能体框架的架构深度解析与实战指南
Qwen-Agent:企业级AI智能体框架的架构深度解析与实战指南 【免费下载链接】Qwen-Agent Agent framework and applications built upon Qwen>3.0, featuring Function Calling, MCP, Code Interpreter, RAG, Chrome extension, etc. 项目地址: https://gitcode.…...
Chat2DB AI SQL技术解析:智能数据查询效率提升300%的架构实现
Chat2DB AI SQL技术解析:智能数据查询效率提升300%的架构实现 【免费下载链接】Chat2DB AI-driven database tool and SQL client, The hottest GUI client, supporting MySQL, Oracle, PostgreSQL, DB2, SQL Server, DB2, SQLite, H2, ClickHouse, and more. 项目…...
【DeepSeek边缘部署实战指南】:20年架构师亲授5大避坑法则与3步极简上线法
更多请点击: https://codechina.net 第一章:DeepSeek边缘部署的演进逻辑与核心挑战 随着大模型从云端向终端下沉,DeepSeek系列模型在边缘侧的部署正经历从“能跑”到“稳跑”、从“单点适配”到“全栈协同”的范式跃迁。这一演进并非单纯的技…...
容器化与Kubernetes
容器化与Kubernetes 1. 技术分析 1.1 容器化概述 容器化是现代应用部署的核心技术: 容器化优势轻量级: 共享内核一致性: 环境一致可移植: 跨平台隔离性: 资源隔离容器技术:Docker: 容器引擎containerd: 容器运行时CRI-O: Kubernetes兼容1.2 Kubernetes概述 Kubernet…...
【Java EE】IPv6
IPv6引言IPv6 地址表示IPv6 地址类型地址范围详解多播地址结构IPv6 与 IPv4 的主要区别IPv6 首部格式扩展首部IPv6 地址配置方式无状态地址自动配置(SLAAC)有状态配置(DHCPv6)手动配置邻居发现协议(NDP)IPv…...
