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

news2024/11/19 13:40:53

写在前面


  • 分享一个小工具 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/liruilong
    Rolling 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/liruilong
    Rolling 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.coloradmin.cn/o/147846.html

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

相关文章

详解二分查找的两种写法以及二分查找的六种变形

目录 一、二分查找的两种写法 1.1 - 第一种写法&#xff08;左闭右闭&#xff09; 1.2 - 第二种写法&#xff08;左闭右开&#xff09; 二、二分查找的六种变形 2.1 - 查找第一个 target 的元素位置 2.2 - 查找第一个 > target 的元素位置 2.3 - 查找第一个 > ta…

JS类型转换机制

概述 JS中有六种简单数据类型&#xff1a;undefined、null、boolean、string、number、symbol&#xff0c;以及引用类型&#xff1a;object 但是我们在声明的时候只有一种数据类型&#xff0c;只有到运行期间才会确定当前类型let x y ? 1 : a; &#xff0c;x的值在编译阶段…

FPGA基础之内置逻辑门

verilog语言中&#xff0c;针对逻辑门&#xff0c;有许多内置可直接使用的逻辑门&#xff0c;从输入输出数量可分为多输入门和多输出门。 一、多输入门 有单个或多个输入&#xff0c;只有单个输出的逻辑门&#xff0c;包含and(与)&#xff0c;or(或)&#xff0c;xor(异或)&am…

在训练心脏数据集时碰到的问题汇总

在训练心脏数据集时碰到的问题汇总&#xff1a; 1.nii数据处理问题 心脏CT数据集采用的是医学图像常用的压缩文件格式nii&#xff0c;且储存的图像为3D图像&#xff0c;不能直接使用。 首先应导入SimpleITK包&#xff0c;利用如下三个函数进行nii格式文件的提取。 sitk.ReadI…

vlan间的通信

vlan之间要通过三层通信实现互访&#xff0c;三层通信需借助三层设备 如果之前配置了 hybrid模式想删除 命令 undo port link-type hybrid vlan all [Huawei-GigabitEthernet0/0/3]dis this interface GigabitEthernet0/0/3 undo port hybrid vlan 1 这里可以理解为多删了一个…

【python】【数据分析】2022年全国大学生数据分析大赛题解-医药电商销售数据分析

文章目录一、前言二、题目三、题解1&#xff0e;对店铺进行分析&#xff0c;一共包含多少家店铺&#xff0c;各店铺的销售额占比如何&#xff1f;给出销售额占比最高的店铺&#xff0c;并分析该店铺的销售情况。2.对所有药品进行分析&#xff0c;一共包含多少个药品&#xff0c…

Promise和async/await

1、回调地狱 多层回调函数的相互嵌套&#xff0c;就形成了回调地狱。示例代码如下&#xff1a; 回调地狱的缺点&#xff1a; 代码耦合性太强&#xff0c;牵一发而动全身&#xff0c;难以维护大量冗余的代码相互嵌套&#xff0c;代码的可读性变差 1.1、如何解决回调地狱的问题…

手把手实现邮件分类 《Getting Started with NLP》chap2:Your first NLP example

《Getting Started with NLP》chap2&#xff1a;Your first NLP example 感觉这本书很适合我这种菜菜,另外下面的笔记还有学习英语的目的&#xff0c;故大多数用英文摘录或总结 文章目录《Getting Started with NLP》chap2&#xff1a;Your first NLP example2.1 Introducing N…

数据结构与算法【树】

二叉树性质 满二叉树 深度为k&#xff0c;有2k−12^{k}-12k−1个结点的二叉树&#xff0c;为满二叉树。 完全二叉树 完全二叉树的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面…

CSDN第22期周赛(记录一下,不是题解)

希望23年能收获一两本程序员杂志 前言 发现一个问题&#xff0c;codeblocks上编译没问题&#xff0c;在CSDN比赛时&#xff0c;会报错&#xff1a; 1&#xff0c;size()和length()属于unsigned int&#xff0c;所以与之比较大小或者赋值的 i, j 也要用unsigned int&#xf…

巧解 JavaScript 中的嵌套替换

网友 wys 提问&#xff1a;如何仅使用 JavaScript 支持的正则语法&#xff0c;将 <p> <table> <p> <p> </table> <table> <p> <p> </table> <p>中<table>...</table>之间的<p>都替换为<b…

C库函数:stdio.h

stdio.h C 标准库 – <stdio.h> | 菜鸟教程 (runoob.com) 下面是头文件 stdio.h 中定义的变量类型&#xff1a; 序号变量 & 描述1size_t 这是无符号整数类型&#xff0c;它是 sizeof 关键字的结果。2FILE 这是一个适合存储文件流信息的对象类型。3fpos_t 这是一个适…

组件的生命周期

一、组件的生命周期 1、组件的生命周期&#xff1a;至一个组件从 创建——>运行——>销毁的过程 2、声明周期函数&#xff1a;由Vue提供的内置函数&#xff0c;伴随组件生命周期按次序自动运行——>钩子函数 3、生命周期的阶段划分 &#xff08;1&#xff09;创建…

什么是链接?(动态链接库和静态链接库的对比)

什么是链接&#xff1f; 首先我们需要知道&#xff0c;一个源文件&#xff08;以.c为例&#xff09;是经过什么最后形成的一个可执行的文件&#xff08;windows下为.exe文件&#xff09;。 一个.c的源文件&#xff0c;要经历 1.预处理&#xff1a;头文件的展开替换 2.编译&…

skywalking解析-如何在idea中调试skywalking agent

当我从github上下载下来skywalking agent的代码后&#xff0c;面临的第一个问题就是如何调试。因为skywalking agent的运行模式与普通程序运行方式不一样&#xff0c;它是通过java agent方式运行的。本文接下来介绍如何在本地调试skywalking agent源码。 目录一、下载源码二、运…

leetcode_栈与队列

栈与队列栈与队列理论基础232.用栈实现队列225.用队列实现栈20.有效的括号1047.删除字符串中的所有相邻重复项150.逆波兰表达式求值239.滑动窗口最大值347.前k个高频元素栈与队列总结栈与队列理论基础 栈与队列理论基础 232.用栈实现队列 力扣题目链接 class MyQueue { pub…

Cadence PCB仿真使用Allegro PCB SI通过导入工艺文件配置层叠结构的方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,概述2,配置方法3,总结1,概述 本文简单介绍使用Allegro PCB SI通过导入工艺文件配置层叠结构的方法。 2,配置方法 第1步:打开待仿真的PCB文件,并确认软件为Allegro PCB SI 如果,打开软件不是Allegro PCB SI则…

【JavaScript】数组常用方法

冲突数组常用方法&#xff1a; 注&#xff1a; 以下方法都会对原数组进行改变&#xff1a; push&#xff1a;向数组后面追加元素&#xff0c;返回值是追加后的数组长度 pop&#xff1a;从数组后面删除元素&#xff0c;返回值是删除的元素内容 unshift:在数组前面添加元素&am…

CMMI之系统设计

系统设计&#xff08;System Design, SD&#xff09;是指设计软件系统的体系结构、用户界面、数据库、模块等&#xff0c;从而在需求与代码之间建立桥梁&#xff0c;指导开发人员去实现能满足用户需求的软件产品。系统设计过程域是SPP模型的重要组成部分。本规范阐述了系统设计…

第一章 Flink简介

Flink 系列教程传送门 第一章 Flink 简介 第二章 Flink 环境部署 第三章 Flink DataStream API 第四章 Flink 窗口和水位线 第五章 Flink Table API&SQL 第六章 新闻热搜实时分析系统 前言 流计算产品实时性有两个非常重要的实时性设计因素&#xff0c;一个是待计算…