CKA认证 | Day2 K8s内部监控与日志

news2024/11/24 9:02:20

第三章 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          5m

kubectl 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-pod
  namespace: default
  ...
spec:
  containers:
  - name: my-container
    image: 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-app
    image: my-app-image
    volumeMounts:
    - name: log-volume
      mountPath: /var/log/my-app
  volumes:
  - name: log-volume
    hostPath:
      path: /var/log/my-app
      type: 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.coloradmin.cn/o/2246572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

概念解读|K8s/容器云/裸金属/云原生...这些都有什么区别?

随着容器技术的日渐成熟&#xff0c;不少企业用户都对应用系统开展了容器化改造。而在容器基础架构层面&#xff0c;很多运维人员都更熟悉虚拟化环境&#xff0c;对“容器圈”的各种概念容易混淆&#xff1a;容器就是 Kubernetes 吗&#xff1f;容器云又是什么&#xff1f;容器…

JDBC编程---Java

目录 一、数据库编程的前置 二、Java的数据库编程----JDBC 1.概念 2.JDBC编程的优点 三.导入MySQL驱动包 四、JDBC编程的实战 1.创造数据源&#xff0c;并设置数据库所在的位置&#xff0c;三条固定写法 2.建立和数据库服务器之间的连接&#xff0c;连接好了后&#xff…

移动充储机器人“小奥”的多场景应用(上)

在当前现代化城市交通体系中&#xff0c;移动充储机器人“小奥”发挥着至关重要的作用。该机器人不仅是一个简单的设备&#xff0c;而是一个集成了高科技的移动充电站&#xff0c;为新能源汽车提供了一种前所未有的便捷充电解决方案。该机器人配备了先进的电池管理系统&#xf…

element dialog会隐藏body scroll 导致tab抖动 解决方案如下

element dialog会隐藏body scroll 导致tab抖动 解决方案如下 在dialog标签添加 :lockScroll"false"搞定

Android 功耗分析(底层篇)

最近在网上发现关于功耗分析系列的文章很少&#xff0c;介绍详细的更少&#xff0c;于是便想记录总结一下功耗分析的相关知识&#xff0c;有不对的地方希望大家多指出&#xff0c;互相学习。本系列分为底层篇和上层篇。 大概从基础知识&#xff0c;测试手法&#xff0c;以及案例…

Bugku CTF_Web——my-first-sqli

Bugku CTF_Web——my-first-sqli 进入靶场 随便输一个看看 点login没有任何回显 方法一&#xff1a; 上bp抓包 放到repeter测试 试试万能密码&#xff08;靶机过期了重新开了个靶机&#xff09; admin or 11--shellmates{SQLi_goeS_BrrRrRR}方法二&#xff1a; 拿包直接梭…

BUUCTF—Reverse—easyre(1)

非常简单的逆向 拿到exe文件先查下信息&#xff0c;是一个64位程序&#xff0c;没有加壳&#xff08;壳是对代码的加密&#xff0c;起混淆保护的作用&#xff0c;一般用来阻止逆向&#xff09;。 然后拖进IDA(64位)进行反汇编 打开以后就可以看到flag flag{this_Is_a_EaSyRe}

全面击破工程级复杂缓存难题

目录 一、走进业务中的缓存 &#xff08;一&#xff09;本地缓存 &#xff08;二&#xff09;分布式缓存 二、缓存更新模式分析 &#xff08;一&#xff09;Cache Aside Pattern&#xff08;旁路缓存模式&#xff09; 读操作流程 写操作流程 流程问题思考 问题1&#…

React基础知识一

写的东西太多了&#xff0c;照成csdn文档编辑器都开始卡顿了&#xff0c;所以分篇写。 1.安装React 需要安装下面三个包。 react:react核心包 react-dom:渲染需要用到的核心包 babel:将jsx语法转换成React代码的工具。&#xff08;没使用jsx可以不装&#xff09;1.1 在html中…

Vue3中使用:deep修改element-plus的样式无效怎么办?

前言&#xff1a;当我们用 vue3 :deep() 处理 elementui 中 el-dialog_body和el-dislog__header 的时候样式一直无法生效&#xff0c;遇到这种情况怎么办&#xff1f; 解决办法&#xff1a; 1.直接在 dialog 上面增加class 我试过&#xff0c;也不起作用&#xff0c;最后用这种…

鸿蒙进阶-状态管理

大家好啊&#xff0c;这里是鸿蒙开天组&#xff0c;今天我们来学习状态管理。 开始组件化开发之后&#xff0c;如何管理组件的状态会变得尤为重要&#xff0c;咱们接下来系统的学习一下这部分的内容 状态管理机制 在声明式UI编程框架中&#xff0c;UI是程序状态的运行结果&a…

leetcode:129. 求根节点到叶节点数字之和

给你一个二叉树的根节点 root &#xff0c;树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字&#xff1a; 例如&#xff0c;从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。 计算从根节点到叶节点生成的 所有数字之和 。…

(南京观海微电子)——GH7006+BOE2.6_GV026WVQ-N81-1QP0_800RGB480_MIPI_LVDS_RGB原理介绍

1. 原理介绍 2. 代码 // Model - GV026WVQ-1QP0 // IC - GH7006 // Width - 800 // Height - 480 // REV: - V01 // DATA - 20240507 // INTERFACE- MIPI //"Vfp" value"16" /> //"…

速度革命:esbuild如何改变前端构建游戏 (1)

什么是 esbuild&#xff1f; esbuild 是一款基于 Go 语言开发的 JavaScript 构建打包工具&#xff0c;以其卓越的性能著称。相比传统的构建工具&#xff08;如 Webpack&#xff09;&#xff0c;esbuild 在打包速度上有着显著的优势&#xff0c;能够将打包速度提升 10 到 100 倍…

Excel的图表使用和导出准备

目的 导出Excel图表是很多软件要求的功能之一&#xff0c;那如何导出Excel图表呢&#xff1f;或者说如何使用Excel图表。 一种方法是软件生成图片&#xff0c;然后把图片写到Excel上&#xff0c;这种方式&#xff0c;因为格式种种原因&#xff0c;导出的图片不漂亮&#xff0c…

自动化运维-Linux通用性日志切割脚本

一、公司提供的参考脚本&#xff1a; #!/bin/bash # 定义需要清理的文件 log_file("/mpjava/ly.mp.dfpv.acc.biz/bin/nohup.out""/mpjava/ly.mp.dfpv.acc.service/bin/nohup.out"# 添加更多微服务的日志目录路径 ) # 获取当天日期 date_now$(date %Y%m%d)…

Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书

目录 一、CA机构 二、Lets Encrypt特点 三、申请SSL 一、CA机构 ‌Lets Encrypt‌是一个由非营利组织Internet Security Research Group (ISRG)运营的证书颁发机构&#xff08;CA&#xff09;&#xff0c;旨在通过自动化和开放的方式为全球网站提供免费、可靠的SSL/TLS证书。…

Java连接MySQL数据库进行增删改查操作

Test 1 首先去查看一下MySQL的版本&#xff1a;mysql -V&#xff08;在cmd中&#xff09;记得要启动MySQL服务在cmd中验证是否可以登录数据库成功&#xff1a;mysql -u root -p&#xff08;然后输入密码&#xff1a;root&#xff09;Test 2 在IDEA创建项目在SQLyog中创建数据…

从搭建uni-app+vue3工程开始

技术栈 uni-app、vue3、typescript、vite、sass、uview-plus、pinia 一、项目搭建 1、创建以 typescript 开发的工程 npx degit dcloudio/uni-preset-vue#vite-ts my-vue3-project2、安装sass npm install -D sass// 安装sass-loader&#xff0c;注意需要版本10&#xff0c;…

React (三)

文章目录 项目地址十二、性能优化12.1 使用useMemo避免不必要的计算12.2 使用memo缓存组件,防止过度渲染12.3 useCallBack缓存函数12.4 useCallBack里访问之前的状态(没懂)十三、Styled-Components13.1 安装13.2给普通html元素添加样式13.3 继承和覆盖样式13.4 给react组件添…