kubectl获取命名空间下所有configmap集合的方法

前言:

获取单个configmap并忽略特定字段的操作可参照:kubectl获取ConfigMap导出YAML时如何忽略某些字段。
要获取命名空间下所有ConfigMap并忽略特定字段,你可以使用kubectl命令与例如yq这样的工具结合使用来忽略或删除不需要的字段。以下是一个步骤和示例,展示了如何结合使用这些工具来实现你的目标。

方案一:使用yq处理YAML文件

依然以default命名空间为例:

kubectl get cm
NAME               DATA   AGE
kube-root-ca.crt   1      2y149d
mail               4      2y133d
mysql-config       1      138d

首先安装yq。如你提到的,对于Ubuntu系统,可以使用以下命令安装:

sudo apt-get install yq

导出default namespace下所有configmap:

然后,使用查找并删除操作来过滤掉不需要的字段。例如,如果你想要移除所有ConfigMap的metadata.annotationsmetadata.creationTimestampmetadata.resourceVersion,和metadata.uid字段,可以执行如下命令:

kubectl get cm -o yaml | yq e 'del(.items[].metadata.creationTimestamp, .items[].metadata.resourceVersion, .items[].metadata.uid, .items[].metadata.annotations)' - > default-configmaps.yaml

image.png
这个命令会获取所有命名空间下的配置映射(ConfigMap),并输出成一个单一的YAML文件,其中已经删去了所有制定的字段。

但是这里还有一个问题,如何忽略某一个或者多个configmap呢比如上面的**kube-root-ca.crt **configmap呢?

如何导出namespace下除kube-root-ca.crt cm下的所有configmap

kubectl get cm -o yaml | yq e 'del(.items[] | select(.metadata.name == "kube-root-ca.crt")) | del(.items[].metadata.creationTimestamp, .items[].metadata.resourceVersion, .items[].metadata.uid, .items[].metadata.annotations)'

image.png
在这条命令中,首先使用 del 函数删除名为kube-root-ca.crt的configmap。这是通过 select 函数和比较运算符实现的。当.metadata.name等于kube-root-ca.crt时,这个configmap会从列表中删除。接着,其他的删除操作会应用到剩余的configmaps上。最后,改变后的YAML内容将被重定向到 default-configmaps.yaml 文件中。
注:请确保你安装了 yq 版本 4 或以上,因为 yq 的语法在不同版本间有较大差异。上述示例是基于 yq 版本 4 的语法。如果你的 yq 版本与此不同,请根据你的版本调整语法。

如何实现匹配屏蔽多个configmap呢?继续屏蔽mail configmap:

kubectl get cm -o yaml | yq e 'del(.items[] | select(.metadata.name == "kube-root-ca.crt"  or .metadata.name == "mail")) | del(.items[].metadata.creationTimestamp, .items[].metadata.resourceVersion, .items[].metadata.uid, .items[].metadata.annotations)' - > default-configmaps.yaml

image.png
这里使用**or **可以匹配多个,突然觉得这里也可以改变一下方法只导出两个 mail与mysql-config cm的方式是不是and 变通一下:

kubectl get cm -o yaml | yq e 'del(.items[] | select(.metadata.name != "mail" and .metadata.name != "mysql-config")) | del(.items[].metadata.creationTimestamp, .items[].metadata.resourceVersion, .items[].metadata.uid, .items[].metadata.annotations)'

image.png

方案二:自定义Go模板

此方法比较高级,你可以创建一个自定义的Go模板来精确控制哪些字段会被展示。下面是一个例子,获取所有命名空间下的ConfigMap但会忽略metadata.annotationsmetadata.creationTimestampmetadata.resourceVersionmetadata.uid字段:

kubectl get cm  -o go-template-file=template.txt

在上述命令中,template.txt是一个包含Go模板内容的文件,可以如下编写(确保文件路径和名称与命令中的相匹配):

{{- range .items }}
---
apiVersion: v1
kind: ConfigMap
metadata:name: {{ .metadata.name }}namespace: {{ .metadata.namespace }}
data:
{{- range $key, $value := .data }}{{ $key }}: |-{{ $value | indent 4 }}
{{- end }}
{{- end }}

此模板文件迭代所有ConfigMap对象,只包含名称、命名空间以及数据字段。注意,模板语法可能根据你想要显示的确切内容和格式有所不同。
当然也可以写成下面的样子:

kubectl get cm -n default -o go-template='{{range .items}}{{printf "apiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: %s\nnamespace: %s\ndata:\n" .metadata.name .metadata.namespace}}{{range $key, $value := .data}}{{printf "  %s: |-\n    %s\n" $key $value}}{{end}}{{end}}'

image.png
这样导出的会有些强迫症,还是不太推荐!

方案三:结合文本处理工具

这是一个使用grep来实现的更基础的方法,可以从kubectl输出中筛选掉不需要的行。

kubectl get cm -n default -o yaml | grep -Ev '^\s*creationTimestamp:|^\s*annotations:|^\s*resourceVersion:|^\s*uid:' > all-configmaps.yaml

image.png
在上述命令中,grep -Ev用来排除包含特定字段的行,然后将输出重定向到文件all-configmaps.yaml中。这个方法适用于简单的过滤,但可能无法处理复杂的YAML结构。

上述方法可以根据你的具体需求进行调整,以适应特定字段的删除或忽略。

记住,某些字段,特别是涉及多行值的,可能需要更复杂的处理技巧,如使用yq或者自定义Go模板,以确保正确地解析和编辑YAML。

可以发散思维的:

  1. 只导出A and B cm
  2. 导出A and B之外所有的cm
  3. 导出 A and B命名空间下所有的cm?

…可以各种各样的组合,大家发散思维玩一下吧!
注:以上代码chatgpt辅助生成!

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

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

相关文章

MYSQL8用户权限配置详解

单位的系统性能问题需要把Mysql5升级到Mysql8,需要用到Mysql8的一些特性来提升系统的性能。 配置用户权限过程中发现一些问题,学习并记录一下。 目录 一、环境 二、MySQL8 用户权限 2.1 账号管理权限 2.1.1 连接数据库 2.1.2 账号权限配置 2.2 密码…

深信服AD负载均衡频繁掉线故障分析

一个由114.114.114.114引起的AD异常 客户反馈深信服负载均衡链路频繁掉线,具体故障现象如下 可以获取到IP地址、网关 两分钟掉一次,持续一个多月,求IT的心理阴影面积! 链路监视器只设置了一个114.114.114.114 处理流程&#xff…

15:00的面试,15:06就出来了,问的问题过于变态了。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

Web漏洞分析-SQL注入XXE注入(中下)

随着互联网的不断普及和Web应用的广泛应用,网络安全问题愈发引起广泛关注。在网络安全领域中,SQL注入和XXE注入是两个备受关注的话题,也是导致许多安全漏洞的主要原因之一。本博客将深入研究这两种常见的Web漏洞,带您探寻背后的原…

【数据结构】链表OJ题(顺序表)(C语言实现)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

Linux Spug自动化运维平台本地部署与公网远程访问

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台,整合了主机管理、主机批量执行、主机在线终端、文件…

分享66个在线客服JS特效,总有一款适合您

分享66个在线客服JS特效,总有一款适合您 66个在线客服JS特效下载 链接:https://pan.baidu.com/s/1VqM6ASgKRFdQ8RyzbsX4uA?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气&#xff0…

CubieBoard5(1)——烧录Linux镜像并远程登录

前言 最近项目使用CubieBoard5,但是网络资料甚少,官方文档资料放置得很零散。因此写下博客当做笔记。 准备 硬件 CubieBoard5开发板Windows PC配套电源线以及5V适配器Micro SD卡与读卡器网线 软件 XSHELL镜像文件烧录工具 烧录固件 从CubieBoard的…

【Unity动画】为一个动画片段添加事件Events

动画不管播放到那一帧,我们都可以在这里“埋伏”一个事件(调用一个函数并且给函数传递一个参数,参数在外部设置,甚至传递一个物体)! 嗨,亲爱的Unity小伙伴们!你是否曾想过为你的动画…

作业12.5

1.定义一个基类 Animal&#xff0c;其中有一个虛函数perform&#xff08;)&#xff0c;用于在子类中实现不同的表演行为。 #include <iostream>using namespace std; class Animal { private:int weight; public:Animal(){}Animal(int weight):weight(weight){}virtual …

【MVP矩阵】裁剪空间、NDC空间、屏幕空间

裁剪空间概述 裁剪空间是一个顶点乘以MVP矩阵之后所在的空间&#xff0c;Vertex Shader的输出就是在裁剪空间上&#xff08;划重点&#xff09; NDC空间概述 接上面&#xff0c;由GPU自己做透视除法将顶点转到NDC空间 两者的转换 透视除法将Clip Space顶点的4个分量都除以…

C语言学习笔记之数组篇

数组是一组相同类型元素的集合。 目录 一维数组 数组的创建 数组的初始化 数组的使用 数组在内存中的存储 二维数组 数组的创建 数组的初始化 数组的使用 数组在内存中的存储 数组名 数组名作函数参数 一维数组 数组的创建 type_t arr_name [const_n]; //type_…

51单片机制作数字频率计

文章目录 简介设计思路工作原理Proteus软件仿真软件程序实验现象测量误差和范围总结 简介 数字频率计是能实现对周期性变化信号频率测量的仪器。传统的频率计通常是用很多的逻辑电路和时序电路来实现的&#xff0c;这种电路一般运行较慢&#xff0c;而且测量频率的范围较小。这…

java--抽象类的常见应用场景:模板方法设计模式

1.模板方法设计模式解决了什么问题&#xff1f; ①解决方法中存在重复代码的问题。 2.模板方法设计模式的写法 1、定义一个抽象类。 2、在里面定义2个方法 ①一个是模板方法&#xff1a;把相同代码放里面去。 ②一个是抽象方法&#xff1a;具体实现交给子类完成。 分析&…

前端项目环境的搭建

一、下载并且安装Node&#xff08;不安装node&#xff0c;就安装nvm。nvm安装教程&#xff09;&#xff1a; 1.官网下载Node&#xff1a;https://nodejs.org/en/ 2.测试nodejs安装是否成功&#xff1a; 在windows powerShell中输入node -v 和 npm -v&#xff0c;看到版本号就…

Python编程技巧:多层for循环的高级应用

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python的for循环结构是编程中最基础也是最常用的控制结构之一。通过for循环&#xff0c;可以轻松遍历数据集合和执行重复的操作。然而&#xff0c;当我们面对多层for循环时&#xff0c;性能和可读性可能会成为挑…

【Vue】Linux 运行 npm run serve 报错 vue-cli-service: Permission denied

问题描述 在Linux系统上运行npm run serve命令时&#xff0c;控制台报错&#xff1a; sudo npm run serve project50.1.0 serve vue-cli-service serve sh: 1: vue-cli-service: Permission denied错误截图如下&#xff1a; 原因分析 该错误是由于vue-cli-service文件权限不…

Java中的Future源码讲解

JAVA Future源码解析 文章目录 JAVA Future源码解析前言一、传统异步实现的弊端二、what is Future ?2.1 Future的基本概念2.2Future 接口方法解析2.2.1 取消任务执行cancel2.2.2 检索任务是否被取消 isCancelled2.2.3 检索任务是否完成 isDone2.2.3 检索任务计算结果 get 三、…

系统运维安全之病毒自检及防护

一、前言 Linux勒索病毒&#xff08;Linux ransomware&#xff09;是一种最令人恶心的计算机恶意病毒&#xff0c;它以侵入Linux系统&#xff0c;捆绑文件并要求支付赎金才能释放文件为主要目的&#xff0c;破坏用户的数据&#xff0c;造成数据讹诈。Linux勒索病毒它们的存在已…

全网最新最全面的Appium自动化:Appium常用操作之app操作

APP操作方法: appium支持对手机上的app进行管理和操作&#xff0c;有如下方法&#xff1a; 1、install_app(self,app_path,**options): 安装app,app_path为安装包路径 2、remove_app(self,app_id,**options): 卸载app&#xff0c;app_id为app包名 3、is_app_installed(self,b…