kubectl与 jq的用法

一、背景
在日常运维工作中,我们需要管理和操作大量的配置文件,这在使用 Kubernetes 集群管理应用时尤为常见。Kubernetes 提供了一个名为 ConfigMap 的资源对象,它用于存储应用的配置信息。有时,我们需要查找哪些 ConfigMap 包含特定的配置值,例如一个特定的 IP 地址或者字符串。

二、使用 kubectl 和 jq 搜索 ConfigMaps
kubectl 是 Kubernetes 的命令行工具,使用者可以通过它与 Kubernetes 集群进行交互。jq 是一个轻量级且灵活的命令行 JSON 处理器。结合这两个工具可以让我们更加方便地处理 JSON 格式的输出。

[root@master1 ~]# kubectl get cm --all-namespaces -o json | jq -r '.items[] | select(.data and (.data[] | "\(.metadata.namespace) \(.metadata.name)"'kubectl get cm -n mynamespace -o json | jq -r '.items[] | select(.data and (.data[] | contains("10.0.4.65"))) | .metadata.name'
jq: Unknown option -o
Use jq --help for help with command-line options,
or see the jq manpage, or online docs  at https://stedolan.github.io/jq

三、查找使用特定镜像的 Deployment
可能我们还想知道正在哪些 Deployment 中使用了特定的镜像:

[root@master1 ~]# kubectl get deploy --all-namespaces -o json | jq -r '.items[] | select(.spec.template.spec.containers[].image | contains("minio")) | "\(.metadata.namespace) \(.metadata.name)"'
minio minio

四、检查资源限制

[root@master1 ~]# kubectl get po --all-namespaces -o json | jq -r '
>   .items[] |
>   select(
>     .spec.containers[]?.resources?.limits?.memory // "" | contains("500Mi")
>   ) | "\(.metadata.namespace) \(.metadata.name)"'

此处我们搜索那些内存限制设为 “500Mi” 的 Pod。 jq 是一个功能强大的轻量级命令行 JSON 处理器,它在 Kubernetes 环境管理中充当了一个不可或缺的角色。通过结合 kubectl 的输出和 jq 的处理能力,可以快速发现和处理集群中的数据。

五、使用 jq 过滤和映射数据

[root@master1 ~]# kubectl get cm --all-namespaces -o json | jq -r '.items[] | {name: .metadata.name, creationTime: .metadata.creationTimestamp}'

六、使用 jq 函数
jq 有一组内建的函数可以用来处理数据。若要对时间戳进行格式化,我们可以使用 fromdate 函数:

[root@master1 ~]# kubectl get cm --all-namespaces -o json | jq -r '.items[] | {name: .metadata.name, creationTime: (.metadata.creationTimestamp | fromdate)}'

七、过滤特定的字段
jq 允许您选择性地查看所需的特定字段。例如,若要在输出中只包含特定名称的 ConfigMaps:

kubectl get cm --all-namespaces -o json | jq -r '.items[] | select(.metadata.name | test("deploy.*")) | .metadata.name'

八、统计数量
如果想统计匹配特定条件的 ConfigMaps 的数量,可以使用 jq:

kubectl get cm --all-namespaces -o json | jq '[.items[] | select(.data and (.data[] | contains("10.0.4.65")))] | length'

九、对 JSON 数组和对象进行高级操作
排序和唯一化

kubectl get pods --all-namespaces -o json | jq '[.items[] | {name: .metadata.name, namespace: .metadata.namespace, timestamp: .metadata.creationTimestamp}] | unique_by(.name, .namespace) | sort_by(.timestamp)'

分组和分类

kubectl get pods --all-namespaces -o json | jq '[.items | group_by(.metadata.namespace)[] | {namespace: (.[0].metadata.namespace), pods: map(.metadata.name)}]'

相关推荐

  1. kubectl jq

    2024-01-22 20:12:01       55 阅读
  2. js 扩展运算符(...)

    2024-01-22 20:12:01       42 阅读
  3. js 中toLocaleString

    2024-01-22 20:12:01       29 阅读
  4. jsnew Map

    2024-01-22 20:12:01       44 阅读
  5. js arguments对象由来和

    2024-01-22 20:12:01       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-22 20:12:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-22 20:12:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-22 20:12:01       82 阅读
  4. Python语言-面向对象

    2024-01-22 20:12:01       91 阅读

热门阅读

  1. 力扣(leetcode)第66题加一(Python)

    2024-01-22 20:12:01       54 阅读
  2. ICMP控制消息 汇总

    2024-01-22 20:12:01       49 阅读
  3. MySQL中对日期时间的处理

    2024-01-22 20:12:01       74 阅读
  4. Python3 如何定位错误:段错误 (核心已转储)

    2024-01-22 20:12:01       58 阅读
  5. 数据结构——基本计算器的实现

    2024-01-22 20:12:01       48 阅读
  6. Redis相关知识

    2024-01-22 20:12:01       61 阅读
  7. 2024.Python

    2024-01-22 20:12:01       55 阅读
  8. ffmpeg使用手册

    2024-01-22 20:12:01       69 阅读
  9. leetcode 122双周赛 解题思路+代码

    2024-01-22 20:12:01       50 阅读
  10. HJ6 质数因子【C语言】

    2024-01-22 20:12:01       52 阅读
  11. kingbase常用SQL总结之统计大小

    2024-01-22 20:12:01       50 阅读
  12. 链表--简单学习

    2024-01-22 20:12:01       54 阅读
  13. pwn前置基础

    2024-01-22 20:12:01       59 阅读
  14. Nginx动静分离

    2024-01-22 20:12:01       42 阅读