按大小列出Kubernetes集群中的容器图像(如docker图像ls)
在Kubernetes文档中,我们可以通过以下方式列出所有容器:按大小列出Kubernetes集群中的容器图像(如docker图像ls),kubernetes,kubectl,Kubernetes,Kubectl,在Kubernetes文档中,我们可以通过以下方式列出所有容器: kubectl get pods --all-namespaces -o jsonpath="{..image}" |\ tr -s '[[:space:]]' '\n' |\ sort |\ uniq -c 以下是一个输出示例: 1 cdkbot/addon-resizer-amd64:1.8.1 1 cdkbot/hostpath-provisioner-amd64:1.0.0 1 cdkbot/registry
kubectl get pods --all-namespaces -o jsonpath="{..image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
以下是一个输出示例:
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
不幸的是,docker图像的大小丢失。有没有办法获得容器图像大小?非常类似于docker image ls。为方便起见,此文件的输出副本:
$ 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
在我的k8s系统上,kubectl ABC不显示图像大小,但您可以创建一个脚本:
docker image ls `kubectl get pod YOUR_POD_NAME_GOES_HERE -o jsonpath='{.spec.containers[0].image}'` --format='{{println .Size}}'
在我的k8s系统上,kubectl ABC不显示图像大小,但您可以创建一个脚本:
docker image ls `kubectl get pod YOUR_POD_NAME_GOES_HERE -o jsonpath='{.spec.containers[0].image}'` --format='{{println .Size}}'
Kubernetes在其输出中不提供图像大小信息。即使我们能够获取集群中运行的图像列表,但获取多节点集群中图像的大小并不是一个简单的过程。但在运行单节点集群的情况下,我们可以通过在Kubernetes集群中运行docker或DinD(docker in docker)容器来实现这一点。尽管如此,它仍然是一种仅用于测试目的的好方法。对于在关键环境中运行此功能,我无话可说。视情况而定 通过将主机的
/var/lib/docker.sock
文件装入和exec中来启动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: {}
Kubernetes在其输出中不提供图像大小信息。即使我们能够获取集群中运行的图像列表,但获取多节点集群中图像的大小并不是一个简单的过程。但在运行单节点集群的情况下,我们可以通过在Kubernetes集群中运行docker或DinD(docker in docker)容器来实现这一点。尽管如此,它仍然是一种仅用于测试目的的好方法。对于在关键环境中运行此功能,我无话可说。视情况而定 通过将主机的
/var/lib/docker.sock
文件装入和exec中来启动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: {}
如果您拥有正确的权限,请获取节点而不是POD
kubectl get nodes -o json | jq '.items[].status.images[] | .names[1], .sizeBytes'
如果您拥有正确的权限,请获取节点而不是POD
kubectl get nodes -o json | jq '.items[].status.images[] | .names[1], .sizeBytes'
嗨,你想得到什么资源?中央处理器?只有记忆?两者都有?@yAzou列出了容器图像和每个图像的大小。我之前发布了一个关于你问题的答案,但我意识到它会给你豆荚内存中的大小…而不是每个豆荚承载的图像的大小…即使我认为它们之间的差异不是那么重要…我在注意到它不会给你答案后删除了我的答案你问题的确切答案……如果你想让我展示,请告诉我anyway@yAzou当然,我非常感兴趣。即使这不能完全回答问题。这有助于我学习新的技巧。谢谢。我取消删除它…请让我知道它是否有帮助。你想获得哪些资源?中央处理器?只有记忆?两者都有?@yAzou列出了容器图像和每个图像的大小。我之前发布了一个关于你问题的答案,但我意识到它会给你豆荚内存中的大小…而不是每个豆荚承载的图像的大小…即使我认为它们之间的差异不是那么重要…我在注意到它不会给你答案后删除了我的答案你问题的确切答案……如果你想让我展示,请告诉我anyway@yAzou当然,我非常感兴趣。即使这不能完全回答问题。这有助于我学习新的技巧。谢谢。我取消删除它…请让我知道它是否有帮助。我使用的豆荚里面有1,2,3个容器。以2、3例居多。我使用的应用程序类型在部署应用程序时注入了侧车容器。在这种情况下,您必须稍微修改脚本并使用
-o jsonpath='{.spec.containers[1].image}'
或('2'或'3',具体取决于您需要)。kubectl get-pod my-nginx-5dc4865748-8cm8m-o jsonpath='{.spec containers[0].image}“
返回nginx
作为docker图像名。但是,当我按照您的建议将docker image ls环绕在它周围时,结果是空的。仅供参考,我的K8S是microk8s。在运行命令的节点中,Nginx可能不可用。尝试查看nginx pod实际部署在哪些节点上……我已通过运行kubectl get pod my-nginx-5dc4865748-8cm8m-o jsonpath='{.spec.containers[0].image}'验证了映像是否存在。
。这是一个单节点设置(microk8s)。所有命令都在这个节点上运行(Ubuntu20.04)。我使用的pod中有1、2、3个容器。以2、3例居多。我使用的应用程序类型在部署应用程序时注入了侧车容器。在这种情况下,您必须稍微修改脚本并使用-o jsonpath='{.spec.containers[1].image}'
或('2'或'3',具体取决于您需要)。kubectl get-pod my-nginx-5dc4865748-8cm8m-o jsonpath='{.spec containers[0].image}“
返回nginx
作为docker图像名。但是,当我按照您的建议将docker image ls环绕在它周围时,结果是空的。仅供参考,我的K8S是microk8s。在运行命令的节点中,Nginx可能不可用。试着看一看