我想查看命名空间中的所有资源。
尽管有名称,但kubectl get all
仍然不会列出服务和入口等内容。
如果我知道我可以明确要求该类型的类型,但似乎也没有列出所有可能类型的命令。 (特别是kubectl get
例如没有列出自定义类型。)
知道如何在删除该命名空间之前显示所有资源吗?
答案 0 :(得分:15)
这可能无法获得所有 资源,但可能是某人正在寻找的
kubectl get all,cm,secret,ing -A
这似乎获得了大多数资源,并以类型作为前缀。
至少,它得到:
这不会获取自定义资源,但会获取服务。
否则,它会执行类似的操作:
for i in `kubectl api-resources | awk '{print $1}'` do ; kubectl get $i
运行v1.13
答案 1 :(得分:10)
基于this comment,列出所有资源的受支持方式是遍历kubectl api-resources
列出的所有api版本:
kubectl api-resources枚举群集中可用的资源类型。
这意味着您可以将其与kubectl get结合使用以实际列出名称空间中每种资源类型的每个实例:
kubectl api-resources --verbs=list --namespaced -o name \
| xargs -n 1 kubectl get --show-kind --ignore-not-found -l <label>=<value> -n <namespace>
答案 2 :(得分:3)
如果您使用的是kubectl krew插件,我建议您使用get-all。它可以获得近90%的资源。包括configmap,secret,端点,istio等
答案 3 :(得分:1)
所有kubernetes对象都存储在etcd中。
所有对象都以下列方式存储在ETCD v3中:
/registry/<object_type>/<namespace>/<name>
我建议直接从etcd v3获取某些命名空间的所有资源列表:
ETCDCTL_API=3 etcdctl --endpoints=<etcd_ip>:2379 get / --prefix --keys-only | grep -E "^/\w+/\w+/<namespace>/+"
答案 4 :(得分:1)
由于失败的Helm部署使残留在特定名称空间中,我最终需要相同的功能。您可以在bash个人资料中添加以下功能:
function kubectlgetall {
for i in $(kubectl api-resources --verbs=list --namespaced -o name | grep -v "events.events.k8s.io" | grep -v "events" | sort | uniq); do
echo "Resource:" $i
kubectl -n ${1} get --ignore-not-found ${i}
done
}
用法:kubectlgetall <namespace>
示例:从kafka
命名空间获取所有资源:
kubectlgetall kafka
答案 5 :(得分:1)
这不是100%的解决方案,但对我来说,以下工作
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
然后打电话
kgetall='kubectl get namespace,replicaset,secret,nodes,job,daemonset,statefulset,ingress,configmap,pv,pvc,service,deployment,pod --all-namespaces'
但是显然我希望这种行为来自
kgetall
首先。
答案 6 :(得分:0)
rcorre's answer的Powershell实现看起来像
kubectl api-resources --verbs=list --namespaced -o name | `
%{ kubectl get $_ --show-kind --ignore-not-found -l <label>=<value> -n <namespace> }
答案 7 :(得分:0)
Answer of rcorre是正确的,但是对于N个资源,它会发出N个集群请求(因此,对于很多资源,此方法非常慢)。此外,使用kubectl get
获取找不到实例的资源(没有实例)非常慢。
有一种更好的方法来请求多个资源:
kubectl get pods,svc,secrets
代替
kubectl get pods
kubectl get svc
kubectl get secrets
所以答案是:
#!/usr/bin/env bash
# get all names and concatenate them with comma
NAMES="$(kubectl api-resources \
--namespaced \
--verbs list \
-o name \
| tr '\n' ,)"
# ${NAMES:0:-1} -- because of `tr` command added trailing comma
# --show-kind is optional
kubectl get "${NAMES:0:-1}" --show-kind
或
#!/usr/bin/env bash
# get all names
NAMES=( $(kubectl api-resources \
--namespaced \
--verbs list \
-o name) )
# Now join names into single string delimited with comma
# Note *, not @
IFS=,
NAMES="${NAMES[*]}"
unset IFS
# --show-kind is enabled implicitly
kubectl get "$NAMES"
答案 8 :(得分:0)
仅涵盖一些基础知识:
kubectl get
命令获取资源。-n [NAMESPACE]
或 --namespace [NAMESPACE]
标志按命名空间过滤资源。
-A
(与 --all-namespaces
相同)标志。其他一些答案显示了如何列出可用资源类型:
kubectl api-resources --verbs=list -o name
考虑到这一点,我们可以获得所有资源,利用 xargs
和 sed
:
kubectl get "all,$(kubectl api-resources --verbs=list -o name | xargs | sed 's/ /,/g')" -A
xargs
的替代方法是使用 tr
:
kubectl get "$(kubectl api-resources --verbs=list -o name | tr '\n' ',')all" -A
答案 9 :(得分:-3)
对我来说,检索名称空间所有内容的简单方法是 kubectl全部获取-n