使用 kubectl 或 Azure Kubernetes 服务门户,如何检查某个配置映射或机密是否被任何资源使用?
答案1
据我所知,它们至少可以出现在 3 个位置:
- 作为卷
- 通过
env:
valueFrom:
- 在
envFrom:
然后,它们可以出现在当前正在运行的 pod 中,以及“未来的 pod”定义中,例如 CronJob 或缩小版的 Deployment、StatefulSet,甚至与任何当前节点都不匹配的 DaemonSet
这个答案将只关注当前正在运行的 pod,因为 SO 中要输入的文本较少,但自省其他资源类型在概念上是相似的。这也将只关注containers[]
虽然initContainers[]
也是候选者,但与 so 共享结构,container[]
因此在文本上是相似的
那么,最糟糕的情况是通过集群中可能正在使用的任何自定义资源定义对象引用的情况,我认为在一般情况下不可能找到这些情况
卷参考
kubectl get po -A -o json | \
jq '.items[].spec.volumes[] as $v | select($v.configMap) | $v.configMap.name'
替换.secret
以查找对Secret
s 的引用
环境值
kubectl get po -A -o json | \
jq '.items[].spec.containers[] as $c
| select($c.env) | $c.env[] as $e
| select($e.valueFrom.configMapKeyRef) | $e.valueFrom.configMapKeyRef.name'
envFrom 引用
kubectl get po -A -o json | \
jq '.items[].spec.containers[] as $c
| select($c.envFrom) | $c.envFrom[] as $e
| select($e.configMapRef) | $e.configMapRef.name'
我将把这个作为社区 Wiki 保留,以便其他人可以参与进来,如果我忽略了一些