如何在Kubernetes部署中获取映像/容器的映像ID(docker sha256哈希)?
这样的事情可以解决问题(您必须已jq
安装):
$ kubectl get pod --namespace=xx yyyy -o json | jq '.status.containerStatuses[] | { "image": .image, "imageID": .imageID }'
{
"image": "nginx:latest",
"imageID": "docker://sha256:b8efb18f159bd948486f18bd8940b56fd2298b438229f5bd2bcf4cedcf037448"
}
{
"image": "eu.gcr.io/zzzzzzz/php-fpm-5:latest",
"imageID": "docker://sha256:6ba3fe274b6110d7310f164eaaaaaaaaaa707a69df7324a1a0817fe3b475566a"
}
我爱
jq
; 作为一个附加技巧(因为发布者专门询问了有关sha的问题),您的版本jq
是否足够新:{the_sha: .imageID|capture("docker://(?<s>sha256.+)").s}
,或者您可以match("docker://(sha256.+)").captures[0].string
在较旧的版本中使用;最后,在您使用的特定示例中,它jq
是ecma5-esque,因为如果您的目标键和源键的名称相同,则语法{image, imageID}
将按照您的想法进行哦,像我爱
jq
,不要忘记,kubectl
有两种不同的输出模板语言,所以如果你只拥有kubectl
,这将是海拉冗长,但你可以使用-o go-template='{{a ton of text here}}'
或-o jsonpath='more text with bizarre syntax'
似乎JSON已更改为最新版本。以下似乎现在可以代替工作:
kubectl get pods -o json | jq '.items[] .status.containerStatuses[] | { "image": .image, "imageID": .imageID }'