Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按大小列出Kubernetes集群中的容器图像(如docker图像ls)_Kubernetes_Kubectl - Fatal编程技术网

按大小列出Kubernetes集群中的容器图像(如docker图像ls)

按大小列出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

在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-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不显示图像大小,但您可以创建一个脚本:

  • 获取图像的名称(我假设pod中有一个容器,否则脚本会稍微复杂一些,具体取决于您想要打印的内容)
  • 在同一台计算机上运行docker image ls。这假设您在运行此命令的计算机上实际拥有该docker映像
  • 您可以设置该命令输出的格式以“捕获”图像大小
  • 总而言之,它看起来是这样的:

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

    在我的k8s系统上,kubectl ABC不显示图像大小,但您可以创建一个脚本:

  • 获取图像的名称(我假设pod中有一个容器,否则脚本会稍微复杂一些,具体取决于您想要打印的内容)
  • 在同一台计算机上运行docker image ls。这假设您在运行此命令的计算机上实际拥有该docker映像
  • 您可以设置该命令输出的格式以“捕获”图像大小
  • 总而言之,它看起来是这样的:

    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可能不可用。试着看一看