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:毕竟两个人的智慧大于一个人的智慧,如果你不理解本章节的内容或需要相关笔记、视频,可私信小安,请不要害羞和回避,可以向他人请教,花点时间直到你真正的理解。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

111 - Lecture 10

File I/O and GUI with JavaFX 文件输入/输出与JavaFX图形用户界面 一、Overview 1. File I/O &#xff08;1&#xff09; learning Java File I/O mechanism &#xff08;2&#xff09; writing into and reading from a file 使用文件I/O进行数据读取和…

分享一下arr的意义(c基础)(必看)(牢记)

arr 即数组名 一般指数组首元素地址 在两种情况下不是 1&#xff1a;sizeof&#xff08;arr&#xff09; arr指整个数组简单讲解一下strlen与sizeof&#xff08;c基础&#xff09;_strzeof在c语言中什么意思-CSDN博客 2&#xff1a;printf&#xff08;"%p",&…

大数据基于Spring Boot的化妆品推荐系统的设计与实现

摘 要 随着大数据时代的到来&#xff0c;人们对于个性化服务的需求越来越高。化妆品推荐系统作为一个认知智能模型段&#xff0c;在为消费者提供更好的购物体验方面发挥了重要作用。本研究基于大数据技术设计了一个高效准确的化妆品推荐系统。通过对海量数据的分析和处理&…

NUXT3学习日记四(路由中间件、导航守卫)

前言 在 Nuxt 3 中&#xff0c;中间件&#xff08;Middleware&#xff09;是用于在页面渲染之前或导航发生之前执行的函数。它们允许你在路由切换时执行逻辑&#xff0c;像是身份验证、重定向、权限控制、数据预加载等任务。中间件可以被全局使用&#xff0c;也可以只在特定页…

在Unity环境中读取Excel配置文件(入门)

使用Excel作为配置的优势 使用Excel作为配置文件有相对普通的文本文档/json等类型的配置文件有一个更好的优点,更易于编辑,更易读.譬如上面的例子,我可以制作一个人员名单,可以记录它们的姓名,年龄等信息,每一行就是一个对象,该表就是一个List. 环境准备 GitHub - ExcelDataR…

Maven maven项目构建的生命周期 Maven安装配置 IDEA 配置 Maven

一&#xff0c;Maven的概述 Maven的作用&#xff1a;专门用于管理和构建Java项目的工具&#xff0c;它的主要功能有&#xff1a; 提供了一套标准化的项目结构提供了一套标准化的构建流程&#xff08;编译&#xff0c;测试&#xff0c;打包&#xff0c;发布……&#xff09;提…

VM虚拟机装MAC后无法联网,如何解决?

✨在vm虚拟机上&#xff0c;给虚拟机MacOS设置网络适配器。选择NAT模式用于共享主机的IP地址 ✨在MacOS设置中设置网络 以太网 使用DHCP ✨回到本地电脑上&#xff0c;打开 服务&#xff0c;找到VMware DHCP和VMware NAT&#xff0c;把这两个服务打开&#xff0c;专一般问题就…

day06(单片机高级)PCB设计

目录 PCB设计 PCB设计流程 元器件符号设计 原理图设计 元器件封装设计 元器件库使用 PCB设计 目的&#xff1a;学习从画原理图到PCB设计的整个流程 PCB设计流程 元器件符号设计 元器件符号&#xff1a;这是电子元器件的图形表示&#xff0c;用于在原理图中表示特定的元器件。例…

向量数据库FAISS之一:官方简单教程

1.安装 1.conda安装 # CPU-only version --> Linux (x86_64 and arm64), OSX (arm64 only), and Windows (x86_64) $ conda install -c pytorch faiss-cpu1.8.0# GPU(CPU) version --> Linux (x86_64 only) for CUDA 11.4 and 12.1 $ conda install -c pytorch -c nvid…

VMware Workstation 17.6.1

概述 目前 VMware Workstation Pro 发布了最新版 v17.6.1&#xff1a; 本月11号官宣&#xff1a;针对所有人免费提供&#xff0c;包括商业、教育和个人用户。 使用说明 软件安装 获取安装包后&#xff0c;双击默认安装即可&#xff1a; 一路单击下一步按钮&#xff1a; 等待…

java实现小程序接口返回Base64图片

文章目录 引言I java 接口返回Base64图片接口设计获取验证码图片-base64字符串获取验证码图片-二进制流arraybufferII 小程序端代码过期代码: 显示文件流图片(arraybuffer)知识扩展:微信小程序下载后端返回的文件流引言 场景: 图形验证码 背景: 接口返回arraybuffer的格式…

transformer.js(一):这个前端大模型运行框架的可运行环境、使用方式、代码示例以及适合与不适合的场景

随着大模型的广泛应用&#xff0c;越来越多的开发者希望在前端直接运行机器学习模型&#xff0c;从而减少对后端的依赖&#xff0c;并提升用户体验。Transformer.js 是一个专为前端环境设计的框架&#xff0c;它支持运行基于 Transformer 架构的深度学习模型&#xff0c;尤其是…

xiaolin coding 图解网络笔记——HTTP篇

1. HTTP 是什么&#xff1f; HTTP 是超文本传输协议&#xff08;HyperText Transfer Protocol&#xff09;&#xff0c;一个用在计算机世界里专门在【两点】之间【传输】文字、图片、音频、视频等【超文本】数据的【约定和规范】。 2. HTTP 常见的状态码有哪些&#xff1f; …

23种设计模式-模板方法(Template Method)设计模式

文章目录 一.什么是模板方法模式&#xff1f;二.模板方法模式的特点三.模板方法模式的结构四.模板方法模式的应用场景五.模板方法模式的优缺点六.模板方法模式的C实现七.模板方法模式的JAVA实现八.代码解析九.总结 类图&#xff1a; 模板方法设计模式类图 一.什么是模板方法模…

力扣 LeetCode 235. 二叉搜索树的最近公共祖先(Day10:二叉树)

解题思路&#xff1a; 方法一&#xff1a;递归 递归法没有中的逻辑 class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {return recur(root, p, q);}public TreeNode recur(TreeNode root, TreeNode p, TreeNode q) {if (root…

Python数据结构day2

一、链表 1.1目的 解决顺序表存储数据有上限&#xff0c;并且插入和删除操作效率低的问题 1.2概念 链表&#xff1a;链式存储的线性表&#xff0c;使用随机物理内存存储逻辑上连续的数据 链表的组成&#xff1a;由一个个结点组成 结点&#xff1a;由数据域和链接域组成&a…

Java-06 深入浅出 MyBatis - 一对一模型 SqlMapConfig 与 Mapper 详细讲解测试

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

Flink Lookup Join(维表 Join)

Lookup Join 定义&#xff08;支持 Batch\Streaming&#xff09; Lookup Join 其实就是维表 Join&#xff0c;比如拿离线数仓来说&#xff0c;常常会有用户画像&#xff0c;设备画像等数据&#xff0c;而对应到实时数仓场景中&#xff0c;这种实时获取外部缓存的 Join 就叫做维…

LeetCode 101题集(随时更新)

题集来源&#xff1a;GitHub - changgyhub/leetcode_101: LeetCode 101&#xff1a;力扣刷题指南 使用C完成相关题目&#xff0c;以训练笔试 贪心 采用贪心的策略&#xff0c;保证每次操作都是局部最优的&#xff0c;从而使最后得到的结果是全局最优的。 分配问题 455. 分发饼…

百度主动推送可以提升抓取,它能提升索引量吗?

站长在建站SEO的时候&#xff0c;需要用到百度站长平台&#xff08;资源平台&#xff09;的工具&#xff0c;在站长工具中【普通收录】-【资源提交】-【API提交】这个功能&#xff0c;对网站的抓取进行一个提交。 这里估计很多站长就有疑问&#xff0c;如果我主动推送&#xf…