In the Kubernetes documentation List All Container Images Running in a Cluster we can list all containers by:
kubectl get pods --all-namespaces -o jsonpath="{..image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
Here is an example of output:
1 cdkbot/addon-resizer-amd64:1.8.1
1 cdkbot/hostpath-provisioner-amd64:1.0.0
1 cdkbot/registry-amd64:2.6
1 coredns/coredns:1.6.6
1 docker.io/cdkbot/addon-resizer-amd64:1.8.1
1 docker.io/cdkbot/hostpath-provisioner-amd64:1.0.0
1 docker.io/cdkbot/registry-amd64:2.6
1 docker.io/coredns/coredns:1.6.6
1 docker.io/grafana/grafana:6.4.3
2 docker.io/istio/citadel:1.5.1
2 docker.io/istio/examples-bookinfo-details-v1:1.15.0
2 docker.io/istio/examples-bookinfo-productpage-v1:1.15.0
2 docker.io/istio/examples-bookinfo-ratings-v1:1.15.0
2 docker.io/istio/examples-bookinfo-reviews-v1:1.15.0
2 docker.io/istio/examples-bookinfo-reviews-v2:1.15.0
2 docker.io/istio/examples-bookinfo-reviews-v3:1.15.0
2 docker.io/istio/galley:1.5.1
4 docker.io/istio/kubectl:1.5.1
4 docker.io/istio/mixer:1.5.1
2 docker.io/istio/pilot:1.5.1
34 docker.io/istio/proxyv2:1.5.1
2 docker.io/istio/sidecar_injector:1.5.1
2 docker.io/jaegertracing/all-in-one:1.16
1 docker.io/kubernetesui/dashboard:v2.0.0
1 docker.io/kubernetesui/metrics-scraper:v1.0.4
2 docker.io/library/nginx:latest
2 docker.io/prom/prometheus:v2.12.0
1 docker.io/radial/busyboxplus:curl
1 grafana/grafana:6.4.3
2 k8s.gcr.io/metrics-server-amd64:v0.2.1
1 kubernetesui/dashboard:v2.0.0
1 kubernetesui/metrics-scraper:v1.0.4
2 nginx
2 quay.io/kiali/kiali:v1.9
1 radial/busyboxplus:curl
Unfortunately the size of the docker image is missing. Is there a way to get the container image size? Pretty much like docker image ls
. Copy of the output from this example for convenience:
$ 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
If you have the correct permissions, get the nodes not the pods.
kubectl get nodes -o json | jq '.items[].status.images[] | .names[1], .sizeBytes'
On my k8s system kubectl describe pod ABC doesn't show the image size, but you can create a script that:
All-in-all it looks like this:
docker image ls `kubectl get pod YOUR_POD_NAME_GOES_HERE -o jsonpath='{.spec.containers[0].image}'` --format='{{println .Size}}'
Kubernetes doesn't provide image size information in its outputs. Even though we able to get a list of images running in a cluster, it is not a straight forward process to get the size of an image in a multi-node cluster. But in such cases where we run a single node cluster, we could achieve this by running a docker or DinD (Docker in Docker) container in Kubernetes cluster. Still, it is a good approach for testing purposes only. I have nothing to say about running this on critical environments. It depends.
Spin up a pod by mounting host's /var/lib/docker.sock
file inside and exec as shown below.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With