2021-04-27go on
2021-04-28 本文已影响0人
文茶君
继续拉取镜像,昨天的其实有一点小bug
就是拉取仓库docker没有相应的仓库,修改仓库名即可
这个较为轻松,今天就开始学习一些知识
列出所有命名空间下的所有容器
- 使用
kubectl get pods --all-namespaces
获取所有命名空间下的所有 Pod - 使用
-o jsonpath={..image}
来格式化输出,以仅包含容器镜像名称。 这将以递归方式从返回的 json 中解析出image
字段。- 参阅 jsonpath 说明 获取更多关于如何使用 jsonpath 的信息。
- 使用标准化工具来格式化输出:
tr
,sort
,uniq
- 使用
tr
以用换行符替换空格 - 使用
sort
来对结果进行排序 - 使用
uniq
来聚合镜像计数
- 使用
kubectl get pods --all-namespaces -o jsonpath="{..image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
上面的命令将递归获取所有返回项目的名为 image
的字段。
作为替代方案,可以使用 Pod 的镜像字段的绝对路径。这确保即使字段名称重复的情况下也能检索到正确的字段,例如,特定项目中的许多字段都称为 name
:
kubectl get pods --all-namespaces -o jsonpath="{.items[*].spec.containers[*].image}"
jsonpath 解释如下:
-
.items[*]
: 对于每个返回的值 -
.spec
: 获取 spec -
.containers[*]
: 对于每个容器 -
.image
: 获取镜像
说明: 按名字获取单个 Pod 时,例如
kubectl get pod nginx
,路径的.items[*]
部分应该省略, 因为返回的是一个 Pod 而不是一个项目列表。
列出 Pod 中的容器
可以使用 range
操作进一步控制格式化,以单独操作每个元素。
kubectl get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.containers[*]}{.image}{", "}{end}{end}' |\
sort
列出以标签过滤后的 Pod 的所有容器
要获取匹配特定标签的 Pod,请使用 -l 参数。以下匹配仅与标签 app=nginx
相符的 Pod。
kubectl get pods --all-namespaces -o=jsonpath="{..image}" -l app=nginx
列出以命名空间过滤后的 Pod 的所有容器
要获取匹配特定命名空间的 Pod,请使用 namespace 参数。以下仅匹配 kube-system
命名空间下的 Pod。
kubectl get pods --namespace kube-system -o jsonpath="{..image}"
输出太多自动换行
root@i-f1or71kf:~# kubectl get pods --all-namespaces -o jsonpath="{.items[].spec.containers[].image}" |xargs ls -l
https://www.runoob.com/linux/linux-comm-xargs.html
docker image exec进入容器
docker container exec -it xxxxx /bin/bash
docker container ls -a 查看容器