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.mzph.cn/news/199702.shtml

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

相关文章

「实用场景教程」如何用日程控件DHTMLX Scheduler制作酒店预订日历?(三)

dhtmlxScheduler是一个类似于Google日历的JavaScript日程安排控件,日历事件通过Ajax动态加载,支持通过拖放功能调整事件日期和时间,事件可以按天,周,月三个种视图显示。 DHTMLX Scheduler正式版下载 在本教程中&…

t-SNE方法:

使用t-SNE时,除了指定你想要降维的维度(参数n_components),另一个重要的参数是困惑度(Perplexity,参数perplexity) 困惑度: 困惑度大致表示如何在局部或者全局位面上平衡关注点&am…

BearPi Std 板从入门到放弃 - 后天篇(2)(I2C1读写EEPROM)

简介 基于 BearPi Std 板从入门到放弃 - 后天篇(1)(I2C1 读取 光照强度), 使用同一个I2C接口访问EEPROM, 同时读取光照亮度 主芯片: STM32L431RCT6 LED : PC13 \ 推挽输出即可 \ 高电平点亮 串口: Usart1 I2C : I2C1 光照强度传感器&#xf…

金蝶云星空和管易云接口打通对接实战

金蝶云星空和管易云接口打通对接实战 对接系统金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践,面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司,提供一个通用的ERP服务平台。K/3Cloud支持的协同应用包括但不…

在python的Scikit-learn库中,可以使用train_test_split函数来划分训练集和测试集。

文章目录 一、在Scikit-learn库中,可以使用train_test_split函数来划分训练集和测试集总结 一、在Scikit-learn库中,可以使用train_test_split函数来划分训练集和测试集 在Scikit-learn库中,可以使用train_test_split函数来划分训练集和测试…

【yolov8】与yolov5的区别及改进详解

图像识别技术在物联网、智能监控等领域广泛应用。而深度学习中的目标检测技术,能够帮助我们对图像中的目标进行识别,进而实现自动化控制。目前,Yolov8和Yolov5是目标检测领域热门的模型。 yolo目标检测原理yolov5详解yolov8yolov8结构图Conv模…

智能优化算法应用:基于学校优化算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于学校优化算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于学校优化算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.学校优化算法4.实验参数设定5.算法结果6.参考…

Linux中shell的运行原理

在Linux中,每次输入命令时,前面都会出现一串字母,我们称之为命令行提示符 实际上,命令行提示符是一种外壳程序 外壳程序的概念: 前面我们提到过,在Linux中,一切皆文件,所谓的命令就…

UE Windows平台下Linux的交叉编译项目打包

UE Windows平台下Linux的交叉编译项目打包 交叉编译(Cross-compilation) 使得在以Windows为中心的工作流程中工作的游戏开发者能够以Linux为目标对项目进行打包。目前,只有Windows支持交叉编译。 交叉编译支持的平台 Windows | Linux-x86_…

每日3道PWN(第二天)

ciscn_2019_n_1 参考: [BUUCTF-pwn]——ciscn_2019_n_1-CSDN博客 [BUUCTF]PWN5——ciscn_2019_n_1_ciscn_2019_n_4-CSDN博客 BUUCTF—ciscn_2019_n_1 1-CSDN博客 checksec一下 64位栈溢出 按f5查看main函数,双击可疑函数 发现含有命令执行的且发现fl…

SOCKET、TCP、HTTP之间的区别与联系

SOCKET、TCP、HTTP之间的区别与联系 一、 Socket 1、什么是socket2、为什么需要socket3、建立socket连接 二、HTTP(基于TCP) 1、HTTP的概念2、HTTP连接的特点 连接请求:一次连接连接请求:短连接(socket是长连接) 三、TCP/IP协议簇 四、HTTP、Socket…

30个Python小游戏,小白练手,我都能玩一天【内附源码】

给大家带来30个 Python 小游戏,一定要收藏! 文末获取完整代码 有手就行 1、吃金币 import os import cfg import sys import pygame import random from modules import *游戏初始化 def initGame():# 初始化pygame, 设置展示窗口pygame.init()screen…

C/C++---------------LeetCode第118. 杨辉三角

杨辉三角 题目及要求动态规划在mian内使用 题目及要求 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1]] 提示: 1 < numRow…

ActiveMQ 反序列化漏洞(CVE-2015-5254)

ActiveMQ 反序列化漏洞 Apache ActiveMQ是一种开源的消息代理&#xff08;message broker&#xff09;&#xff0c;被广泛用于应用程序之间的消息传递。它提供可靠的消息传递模式&#xff0c;如发布/订阅、点对点和请求/响应&#xff0c;非常适合构建分布式系统和应用程序集成…

1_控制系统总体结构

1、总体结构 控制系统结构图&#xff1a; 黑色块为参数、黄色块为计算模块 1.1 其中参数含义 车辆属性参数&#xff1a; 参数含义 C α f C_{\alpha f} Cαf​自行车模型总轮胎侧偏刚度&#xff08;前轮&#xff09; C α r C_{\alpha r} Cαr​自行车模型总轮胎侧偏刚度&a…

客户案例:SMC2威胁感知升级,保障金融行业邮件安全

客户背景 某基金公司是一家在业界享有广泛声誉的综合型资产管理公司&#xff0c;总部位于广州&#xff0c;在北京、上海、香港等地区均设有公司&#xff0c;业务范围遍布全球&#xff0c;凭借其卓越的投资业绩和专业的基金管理服务&#xff0c;赢得了广大投资者的高度认可。 该…

数据结构第二次作业——递归、树、图【考点罗列//错题正解//题目解析】

目录 一、选择题 ——递归—— 1.【单选题】 ——递归的相关知识点 2.【单选题】——递归的应用 3.【单选题】——递归的实现结构 4.【单选题】——递归的执行与实现 5.【单选题】 ——递归算法 ——树—— 6.【单选题】 ——树的结构 *7.【单选题】——树的知识点 …

【Maven】依赖管理

1. 依赖管理 1.1 依赖配置 依赖&#xff1a;指当前项目运行所需要的jar包。一个项目中可以引入多个依赖。 依赖引入步骤&#xff1a;在pom.xml中编写标签&#xff0c;在标签中使用引入坐标&#xff0c;定义坐标的 groupId、artifactId、version&#xff0c;最后点击刷新&…

17. 电话号码的字母组合 经典回溯组合题目

17. 电话号码的字母组合 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;参考代码&#xff1a;错误经验吸取 原题链接&#xff1a; 17. 电话号码的字母组合 https://leetcode.cn/problems/letter-combinations-of-a-phone-number/description/ 完成情况&…

c题目16:写一个递归函数,计算N阶乘

每日小语 一生中&#xff0c;最光辉的一天并非功成名就的那一天&#xff0c;而是从悲叹与绝望中产生对人生挑战与勇敢迈向意志的那一天。——福楼拜 自己思考 这个小语呢&#xff0c;我目前还达不到&#xff0c;只是顺其自然&#xff0c;很多东西做起来很有动力&#xff0c;…