一、背景
在日常运维工作中,我们需要管理和操作大量的配置文件,这在使用 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 数组和对象进行高级操作
排序和唯一化文章来源:https://www.toymoban.com/news/detail-813687.html
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)'
分组和分类文章来源地址https://www.toymoban.com/news/detail-813687.html
kubectl get pods --all-namespaces -o json | jq '[.items | group_by(.metadata.namespace)[] | {namespace: (.[0].metadata.namespace), pods: map(.metadata.name)}]'
到了这里,关于kubectl与 jq的用法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!