Kubernetes:通过轻量化工具 kubespy 实时观察YAML资源变更

news/2025/1/11 23:52:55/

写在前面


  • 分享一个小工具 kubespy 给小伙伴
  • 博文内容涉及:
    • 工具的简单介绍
    • 下载安装
    • kubectl 插件方式使用 Demo
  • 理解不足小伙伴帮忙指正

我所渴求的,無非是將心中脫穎語出的本性付諸生活,為何竟如此艱難呢 ------赫尔曼·黑塞《德米安》


简单介绍

偶然的机会看个这样一个小工具,分享给小伙伴,kubespy 可以实时观察 Kubernetes 资源如何变化,运行 kubespy,它会持续观察和报告有关 Kubernetes 资源的信息。简单来讲,是一个可以观察 资源对象 YAML 文件变化,和一个可以监控 deploy,svc 中 pod 调度变化的工具。它会把监控信息实时打印在当前终端标准输出的。

kubespy 可以单独使用。也可以整合为 kubectl 插件来使用。kubespy 有 三个命令:

  • status : 它实时发出对任意 Kubernetes .status 资源字段所做的所有更改.
  • changes : 它实时发出对 Kubernetes 资源中任何字段 的所有更改
  • trace : 它 跟踪 一个 Kubernetes 资源在 整个集群中所做的更改,并将它们 聚合成一个实时更新的高级摘要

下载安装

具体可以参考文档:https://github.com/pulumi/kubespy

二进制版本: https://github.com/pulumi/kubespy/releases

这里网络问题,我们直接本地下载

┌──[root@vms81.liruilongs.github.io]-[~/kubectl-plu]
└─$wget https://github.com/pulumi/kubespy/releases/download/v0.6.1/kubespy-v0.6.1-linux-amd64.tar.gz

解压

┌──[root@vms81.liruilongs.github.io]-[~/kubectl-plu]
└─$tar -zxvf kubespy-v0.6.1-linux-amd64.tar.gz
LICENSE
README.md
kubespy

配置作为 kubectl 插件使用,需要修改原来的插件名字,拷贝到 可执行文件目录处,然后就可以通过 kubectl 命名来调用,查看版本测试

┌──[root@vms81.liruilongs.github.io]-[~/kubectl-plu]
└─$mv kubespy kubectl-spy
┌──[root@vms81.liruilongs.github.io]-[~/kubectl-plu]
└─$mv kubectl-spy /usr/local/bin/
┌──[root@vms81.liruilongs.github.io]-[~/kubectl-plu]
└─$kubectl spy  version
v0.6.1

命令 Demo

status <apiVersion> <kind> [<namespace>/]<name>,它实时发出对 .status 任意 Kubernetes 资源字段所做的所有更改,作为 JSON diff

┌──[root@vms81.liruilongs.github.io]-[~]
└─$kubectl delete -n kube-system pods   kube-apiserver-vms81.liruilongs.github.io
pod "kube-apiserver-vms81.liruilongs.github.io" deleted

这里我们删除一个静态 pod 来观察下 对 .status 对象的状态监听

可以看下,整个过程 pod 状态为

-  "phase": "Running",
+  "phase": "Pending",

-  "phase": "Pending",
+  "phase": "Running",

先是创建状态,然后我删除 静态 pod 之后,对应的 .status 对象属性发现变动,属性全部消失,这个时候说明 静态 pod 已经被干掉了,然后受 k8s 机制影响,会周期扫描 静态 pod 目录,发现 yaml 文件还在,又会重新拉起 静态 pod, 在所以对应的 .status 字段在一次发生变动,属性添加。

┌──[root@vms81.liruilongs.github.io]-[~/kubectl-plu]
└─$kubectl spy status v1 Pod kube-system/kube-apiserver-vms81.liruilongs.github.io
Watching status of v1 Pod kube-system/kube-apiserver-vms81.liruilongs.github.io
CREATED
{......."containerStatuses": [{"containerID": "docker://3db7e6619f6b2bf4a764bb681394c1bd76369d04cb604c8a26574ba9a860bcf1","image": "registry.aliyuncs.com/google_containers/kube-apiserver:v1.22.2","imageID": "docker-pullable://registry.aliyuncs.com/google_containers/kube-apiserver@sha256:eb4fae890583e8d4449c1e18b097aec5574c25c8f0323369a2df871ffa146f41",...........},"name": "kube-apiserver","ready": true,"restartCount": 2,"started": true,"state": {"running": {"startedAt": "2022-12-24T13:56:43Z"}}}],
........"startTime": "2022-11-26T05:40:23Z"
}
MODIFIED
MODIFIED
DELETED
ADDED{
...............
-  ],
-  "hostIP": "192.168.26.81",
-  "phase": "Running",
+  "phase": "Pending",
-  "podIP": "192.168.26.81",
-  "podIPs": [
-    {
-      "ip": "192.168.26.81"
-    }
-  ],"qosClass": "Burstable",
-  "startTime": "2022-11-26T05:40:23Z"}MODIFIED{
-  "phase": "Pending",
+  "phase": "Running","qosClass": "Burstable"
+  "conditions": [
.........
+  "startTime": "2022-11-26T05:40:23Z"}

changes <apiVersion> <kind> [<namespace>/]<name>,它实时发出对 Kubernetes 资源中 任何字段 的所有更改,作为 JSON diff。 即他可以监控 yaml 资源的所有字段。

这里我们摘了一段出来, - 代表字段删除, + 代表字段添加。没有代表,为创建状态

.............
-        "lastTransitionTime": "2022-12-27T20:45:18Z",
+        "lastTransitionTime": "2022-12-27T21:51:59Z",
-        "status": "True",
+        "status": "False","type": "ContainersReady"
+        "message": "containers with unready status: [pause]"
+        "reason": "ContainersNotReady"},{"lastProbeTime": null,"lastTransitionTime": "2022-12-27T20:45:17Z","status": "True","type": "PodScheduled"}],"containerStatuses": [{"containerID": "docker://23c398096e1e625977d8dab9c267ac49aff457d68930aa6cdacb26644919f763","image": "registry.aliyuncs.com/google_containers/pause:3.5","imageID": "docker-pullable://registry.aliyuncs.com/google_containers/pause@sha256:1ff6c18fbef2045af6b9c16bf034cc421a29027b800e4f9b68ae9b1cb3e9ae07","lastState": {},"name": "pause",
-        "ready": true,
+        "ready": false,"restartCount": 0,
-        "started": true,
+        "started": false,"state": {
-          "running": {
-            "startedAt": "2022-12-27T20:45:18Z"
-          }
+          "terminated": {
+            "containerID": "docker://23c398096e1e625977d8dab9c267ac49aff457d68930aa6cdacb26644919f763",
+            "exitCode": 0,
+            "finishedAt": "2022-12-27T21:51:58Z",
+            "reason": "Completed",
+            "startedAt": "2022-12-27T20:45:18Z"
+          }
...................

trace <kind> [<namespace>/]<name>,它“跟踪”一个复杂的 Kubernetes 资源在整个集群中所做的更改,并将它们聚合成一个实时更新的高级摘要。简单讲,即会实时的把当前资源的 pod 的信息展示出来。可以清楚的看到 pod 调度。

下面为 当前的 deploy 的 状态,他会显示当前的 资源是否可用,对应的 pod 调度情况

┌──[root@vms81.liruilongs.github.io]-[~/kubectl-plu]
└─$kubectl spy trace  deployment liruilong
[ADDED apps/v1/Deployment]  liruilong-topo-namespace/liruilongRolling out Deployment revision 1✅ Deployment is currently available✅ Rollout successful: new ReplicaSet marked 'available'ROLLOUT STATUS:
- [Current rollout | Revision 1] [ADDED]  liruilong-topo-namespace/liruilong-744498fcbd✅ ReplicaSet is available [2 Pods available of a 2 minimum]- [Ready] liruilong-744498fcbd-2nbq2- [Ready] liruilong-744498fcbd-ffk4n

当修改副本数后

┌──[root@vms81.liruilongs.github.io]-[~/ansible/podtopolog]
└─$kubectl scale deployment liruilong  --replicas=3
deployment.apps/liruilong scaled

可以发现 pod 的实时变化。

┌──[root@vms81.liruilongs.github.io]-[~/kubectl-plu]
└─$kubectl spy trace deployment liruilong
[MODIFIED apps/v1/Deployment]  liruilong-topo-namespace/liruilongRolling out Deployment revision 1✅ Deployment is currently available✅ Rollout successful: new ReplicaSet marked 'available'ROLLOUT STATUS:
- [Current rollout | Revision 1] [MODIFIED]  liruilong-topo-namespace/liruilong-744498fcbd✅ ReplicaSet is available [3 Pods available of a 3 minimum]- [Ready] liruilong-744498fcbd-k6b5c- [Ready] liruilong-744498fcbd-kf9gq- [Ready] liruilong-744498fcbd-2nbq2

博文参考


https://github.com/pulumi/kubespy

https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/


http://www.ppmy.cn/news/10453.html

相关文章

Callable接口

目录 一、Callable接口的含义 二、Callable接口的使用 步骤一&#xff1a;明确执行任务的内容及其返回值 步骤二:把任务交给线程来执行 步骤三:获取任务的返回值 一、Callable接口的含义 Callable接口和runnable接口类似&#xff0c;本质上描述的也是任务。 但是&#xff0c;…

061-java中URL和HttpURLConnection使用方法详细介绍

【上一讲】060-MySQL数据库综合应用(实现登录及注册功能源代码)_CSDN专家-赖老师(软件之家)的博客-CSDN博客 【下一讲】062-TCP网络通讯ServerSocket及Socket类使用详解_CSDN专家-赖老师(软件之家)的博客-CSDN博客 在java.net包中定义了URL类,URL类封装了使用统一资源定…

WordPress 的“more”标签

隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观看!隐藏内容,订阅专栏可观…

第46章 Python urllib教程

Python urllib教程 库用于操作网页 URL,并对网页的内容进行抓取处理。 本文主要介绍 Python3 的 urllib。 urllib 包 包含以下几个模块: urllib.request - 打开和读取 URL。urllib.error - 包含 urllib.request 抛出的异常。urllib.parse - 解析 URL。urllib.robotparser -…

十大字符串函数与内存操作函数

前言&#xff1a;我们知道在C语言的库中有许许多多的库函数&#xff0c;今天我就来介绍一下自己对两大类库函数中一些常用函数的认识和理解&#xff0c;希望对大家有帮助。 说明&#xff1a;下文中会花较大篇幅实现这些库函数的模拟&#xff0c;请大家不要觉得库函数直接用就好…

Jackson_annotations注解使用

1、JsonIdentityInfo 英文说明: 1、JsonIdentityInfo is used when objects have parent child relationship. JsonIdentityInfo is used to indicate that object identity will be used during serialization/de-serialization. 2、中文翻译&#xff1a;JsonIdentityInfo 在对…

计算机网络复习之网络层

文章目录数据报与虚电路服务的对比IP 协议IP数据报格式IP地址NAT&#xff08;网络地址转换&#xff09;子网划分和子网掩码在支持子网划分的因特网中&#xff0c;路由器如何转发IP数据报无分类编制CIDR构成超网RIP协议OSPF协议ARP协议ICMP协议Ping和Traceroute参考路由选择是网…

C库函数:time.h

time.h C 标准库 – <time.h> | 菜鸟教程 (runoob.com) 库变量 下面是头文件 time.h 中定义的变量类型&#xff1a; 序号变量 & 描述1size_t 是无符号整数类型&#xff0c;它是 sizeof 关键字的结果。2clock_t 这是一个适合存储处理器时间的类型。3time_t is 这是一…