列出Kubernetes集群中包含SIZE的容器图像(如停靠器图像)

1wnzp6jl  于 2022-12-22  发布在  Kubernetes
关注(0)|答案(5)|浏览(111)

在Kubernetes文档列出集群中运行的所有容器映像中,我们可以按以下方式列出所有容器:

kubectl get pods --all-namespaces -o jsonpath="{..image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c

下面是一个输出示例:
不幸的是,docker图像的大小丢失了。有没有办法获得容器图像的大小?非常类似于docker image ls。为了方便起见,复制example的输出:

$ docker image ls
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
docker.io/ubuntu            latest              3556258649b2        7 days ago          64.2 MB
docker.io/alpine            latest              b7b28af77ffe        2 weeks ago         5.58 MB
docker.io/centos            latest              9f38484d220f        4 months ago        202 MB
docker.io/hello-world       latest              fce289e99eb9        7 months ago        1.84 kB
qgzx9mmu

qgzx9mmu1#

如果您有正确的权限,请获取节点而不是pod。

kubectl get nodes -o json | jq '.items[].status.images[] | .names[1], .sizeBytes'
o4hqfura

o4hqfura2#

在我的k8s系统上,kubectl describe pod ABC不显示图像大小,但您可以创建一个脚本:
1.获取图像的名称(我假设pod中有一个容器,否则脚本会稍微复杂一些,这取决于实际要打印的内容)
1.在同一台机器上运行docker image ls。这里假设你在运行这个命令的机器上有这个docker image。
1.您可以稍微格式化该命令的输出以“捕捉”图像大小
总而言之,它看起来是这样的:

docker image ls `kubectl get pod YOUR_POD_NAME_GOES_HERE  -o jsonpath='{.spec.containers[0].image}'` --format='{{println .Size}}'
qyswt5oh

qyswt5oh3#

Kubernetes在其输出中不提供映像大小信息。即使我们能够获得集群中运行的映像的列表,但要获得多节点集群中映像的大小并不是一个简单的过程。但在运行单节点集群的情况下,我们可以通过运行docker或DinD来实现这一点(Docker in Docker)容器在Kubernetes集群中。尽管如此,它仍然是一个仅用于测试目的的好方法。关于在关键环境中运行这个我没什么可说的。这要看情况而定。
通过在内部装载主机的/var/lib/docker.sock文件并执行命令,启动Pod,如下所示。

apiVersion: v1
kind: Pod
metadata:
  labels:
    run: dind
  name: dind
spec:
  containers:
  - image: docker:dind
    name: dind
    command: ["cat"]
    tty: true
    resources: {}
    volumeMounts:
    - mountPath: /var/run/docker.sock
      name: docker
      readOnly: true
  volumes:
  - name: docker
    hostPath:
      path: /var/run/docker.sock
      type: File
  dnsPolicy: ClusterFirst
  restartPolicy: Never
status: {}
$ kubectl exec -i dind -n dev sh -- docker images nginx 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              4571e56e27f0        11 hours ago        132MB

$kubectl exec -i dind -n dev sh -- docker image ls
REPOSITORY                                                       TAG                 IMAGE ID            CREATED             SIZE
nginx                                                            latest              4571e56e27f0        21 hours ago        132MB
5m1hhzi4

5m1hhzi44#

检查Kubernetes平台中是否使用了哪个容器运行时。例如,如果使用“microk8s”,则命令如下:

sudo microk8s ctr image ls
uyhoqukh

uyhoqukh5#

我需要类似的东西(但主要是列出图像和哪些pod正在使用它们)。所以我创建了kubectl插件,它列出了图像(和它们的大小以及)和使用它们的pod/容器。这是链接-https://github.com/pete911/kubectl-image

kubectl image list -A

registry: registry.k8s.io
  coredns/coredns
    Tag/ID: v1.9.3      Size: 13.42MB
    ID:     sha256:b19406328e70dd2f6a36d6dbe4e867b0684ced2fdeb2f02ecb54ead39ec0bac0
            [namespace] kube-system [container] coredns [pod] coredns-565d847f94-kfs8m [pod-phase] Running
            [namespace] kube-system [container] coredns [pod] coredns-565d847f94-r9wvh [pod-phase] Running
...

相关问题