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

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

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

相关文章

EasyExcel级联下拉

代码 package com.xc.excel.select;import com.alibaba.excel.EasyExcel; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream; import java.i…

快速入门CSS

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗 如有错误&#xff0c;欢迎指出~ 目录 CSS css的三种引入方式 css书写规范 选择器分类 标签选择器 class选择器 id选择器 复合选择器 通配符选择器 color颜色设置 border边框设置 width/heigth 内/外边距 C…

界面控件DevExpress WPF中文教程:Data Grid——卡片视图设置

DevExpress WPF拥有120个控件和库&#xff0c;将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序&#xff0c;这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

RWKV-5/6 论文被 COLM 2024 收录

由 Bo PENG 和 RWKV 开源社区共同完成的 RWKV-5/6架构论文《Eagle and Finch: RWKV with Matrix-Valued States and Dynamic Recurrence》被顶级会议 COLM 2024 收录。 这是继 RWKV-4 架构论文《RWKV: Reinventing RNNs for the Transformer Era》被 EMNLP 2023 收录之后&…

Spring底层源码(三)

invokeBeanFactoryPostProcessors(beanFactory) 这个方法里面会进行配置类的扫描.具体源码如下. 进入到 invokeBeanFactoryPostProcessors方法中,直接找invokeBeanDefinitionRegistryPostProcessors(currentRegistryProcessors, registry)这个方法进去,然后找实现类Configura…

vue3+vite 前端打包不缓存配置

最近遇到前端部署后浏览器得清缓存才能出现最新页面效果得问题 所以…按以下方式配置完打包就没啥问题了&#xff0c;原理很简单就是加个时间戳 /* eslint-disable no-undef */ import {defineConfig, loadEnv} from vite import path from path import createVitePlugins from…

【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进

文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…

FFmpeg存放压缩后的音视频数据的结构体:AVPacket简介,结构体,函数

如下图的解码流程&#xff0c;AVPacket中的位置 FFmpeg源码中通过AVPacket存储压缩后的音视频数据。它通常由解复用器&#xff08;demuxers&#xff09;输出&#xff0c;然后作为输入传递给解码器。 或者从编码器作为输出接收&#xff0c;然后传递给多路复用器&#xff08;mux…

Jmeter系统入门教程(安装、组件使用、Demo展示、连接数据库、压测报告)

​压测工具实际项目中接触过ab&#xff0c;ab算一个常用而又直接的工具&#xff0c;jmeter以前自己测试过&#xff0c;但如此系统&#xff0c;细致的测试还是第一次&#xff0c;这个博主很多文章都很细致&#xff0c;问题解答及时一jmeter简介jmeter 是一款专门用于功能测试和压…

D3入门:概念、主要特点、基本功能、常见应用场景

D3.js&#xff08;Data-Driven Documents&#xff09;是一个JavaScript库&#xff0c;用于基于数据操作文档。它利用了HTML、SVG和CSS等Web标准技术&#xff0c;使得开发者可以创建丰富的交互式图表和数据可视化。D3.js的强大之处在于其灵活的数据绑定机制和对DOM元素的高效操作…

人工智能在智能家居中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 人工智能在智能家居中的应用 人工智能在智能家居中的应用 人工智能在智能家居中的应用 引言 人工智能概述 定义与原理 发展历程 …

GESP4级考试语法知识(贪心算法(一))

海盗船代码&#xff1a; #include<iostream> #include<algorithm> using namespace std; int data[21]; int main() {int n;cin>>n;for(int i0;i<n;i)cin>>data[i];sort(data,datan);int temp0,sum0;for(int i0;i<n;i){tempdata[i];if(temp>…

了解sessionStorage 和 localStorage:浏览器存储的差异与用途

在Web开发中&#xff0c;localStorage、cookies 和 sessionStorage 是三种常用的客户端数据存储方式&#xff0c;通俗的来理解就是存储在浏览器前端的非关系型数据库&#xff0c;它们各自有不同的特点和用途&#xff1a; localStorage 持久性&#xff1a;数据在页面会话结束时…

微信自动化加好友

在职场中&#xff0c;拓展人脉是成功的关键。手动添加好友不仅耗时&#xff0c;还容易出错。 试试这个批量自动添加的必备方法&#xff0c;告别手动添加客户的繁琐&#xff0c;私域运营也能如此高效! 再也不用一个个统计数据&#xff0c;浪费时间又累心。 具体操作如下&#…

ctfshow-web入门-反序列化(web260-web264)

目录 1、web260 2、web261 3、web262 4、web263 5、web264 1、web260 要求传入的内容序列化后包含指定内容即可&#xff0c;在 PHP 序列化中&#xff0c;如果键名或值包含 ctfshow_i_love_36D&#xff0c;那么整个序列化结果也会包含这个字符串。 payload&#xff1a; ?…

编写第一个 Appium 测试脚本:从安装到运行!

前言 最近接到一个测试项目&#xff0c;简单描述一下&#xff0c;需求就是&#xff1a;一端发送指令&#xff0c;另一端接受指令并处理指令。大概看了看有上百条指令&#xff0c;点点点岂不是废了&#xff0c;而且后期迭代&#xff0c;每次都需要点点点&#xff0c;想想就头大…

攻防世界36-fakebook-CTFWeb

攻防世界36-fakebook-CTFWeb 没发现什么&#xff0c;随便join发现blog有过滤&#xff0c;dirsearch扫描一下&#xff0c;发现robots.txt&#xff0c;和flag.php(不能直接看)&#xff0c;发现源码泄露&#xff0c;下载得源码&#xff1a; <?phpclass UserInfo{public $nam…

【Vue】简易博客项目跟做

项目框架搭建 1.使用vue create快速搭建vue项目 2.使用VC Code打开新生成的项目 端口号简单配置 修改vue.config.js文件&#xff0c;内容修改如下 所需库安装 npm install vue-resource --save --no-fund npm install vue-router3 --save --no-fund npm install axios --save …

delphi fmx android 自动更新(一)

12.2 android10测试通过 一,安卓权限设置 1,REQUEST_INSTALL_PACKAGES 权限 2,INTERNET 权限 3,READ_EXTERNAL_STORAGE 权限 4,WRITE_EXTERNAL_STORAGE 权限 5,READ_PHONE_STATE 二,安卓下载过程 一般是从http下载安装包 apk 所以,如果是http 则,manife…

VSCode本地C/C++环境配置

基本环境下载 1.我的系统是windows&#xff0c;自己先下载安装VSCode&#xff0c;网上视频实在太多&#xff0c;我建议跟着B站视频操作。 2.下载安装好后你需要明白&#xff1a;VSCode只是一个编辑工具&#xff0c;我们要写C/C代码得编译运行&#xff0c;所以我们要配置它在w…