get 子命令
概述
参考:
展示对象的信息,get 获得的是该对象的个性信息,describe 获得的是该对象的集群信息
Syntax(语法)
kubectl get (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME …) [FLAGS]
FLAGS Note:在 kubectl 命令中的 全局 flags 中还有很多有用的 flags 可以用于 get 子命令。比如 -v 指定 debug 等级,-n 指定要操作的 namespace,等等
- -A, –all-namespaces # 列出在所有名称空间中的对象。
- –allow-missing-template-keys=true: If true, ignore any errors in templates when a field or map key is missing in the template. Only applies to golang and jsonpath output formats.
- –field-selector=STRING # 使用字段选择器根据一个或多个资源字段的值筛选 Kubernetes 对象。支持
=
,==
, and!=
(比如--field-selector key1=value1,key2=value2
)。- 注意,仅支持部分字段筛选
- -f, –filename=[]: Filename, directory, or URL to files identifying the resource to get from a server.
- –ignore-not-found=false: If the requested object does not exist the command will return exit code 0.
- -k, –kustomize=<DIR> # 处理指定的 Kustomize 目录。这个标志不能与 -f 或 -R 同时使用。
- -L, –label-columns=[] # 显示所有展示出的对象具有 KEY 这个键所对应的值(KEY=VAL,显示那个 VAL)Accepts a comma separated list of labels that are going to be presented as columns. Names are case-sensitive. You can also use multiple flag options like -L label1 -L label2…
- –no-headers # 当使用 默认的 或者 custom-column 格式输出信息时,不显示标题(标题就是 NAME 那一行)。
- -o, –output=FORMAT # 指定输出信息的输出格式
- FORMAT 包括 json|yaml|wide|name|custom-columns=…|custom-columns-file=…|go-template=…|go-template-file=…|jsonpath=…|jsonpath-file=…
- yaml | json # 输出 yaml 或 json 格式的信息
- wide # 多显示该对象的 IP 和所在 NODE 两个信息
- name # 仅打印对象名称,而不打印其他任何内容。Note:资源名称格式为:资源类型/名字
- custom-columns=<HEADER>:<JSON-PATH-EXPR> # 自定义以一列一列的形式显示列表。参考:[http://kubernetes.io/docs/user-guide/kubectl-overview/#custom-columns]
- golang template[http://golang.org/pkg/text/template/#pkg-overview]
- jsonpath template # 使用 json 格式里的路径来查看某个字段的状态,样例如下,
.
符号是字符分隔符。用法详见官方文档- e.g.
-o jsonpath="{.status.phase}"
- e.g.
- –output-watch-events=false: Output watch event objects when –watch or –watch-only is used. Existing objects are output as initial ADDED events.
- –raw <URL Path> # 从 API Server 请求原始 URI。显示指定 URL Path 路径下的原始 URI 信息,默认输出为 JSON 格式
- -R, –recursive=false: Process the directory used in -f, –filename recursively. Useful when you want to manage related manifests organized within the same directory.
- -l, –selector=KEY[=VAL,KEY2=VAL2,…] # 根据标签对输出进行过滤。可以只指定标签中的 key,或者指定多个 key,或者指定 key 不匹配的 value
- e.g. # -l key1=value1,key2=value2,Note:k/v 中的 = 还可以使用 == 和 !=
- –server-print=true: If true, have the server return the appropriate table output. Supports extension APIs and CRDs.
- –show-kind=false # 列出所请求对象的资源类型。
- –show-labels # 输出信息时,在最后一列显示该对象的 label。(默认不显示)
- –sort-by=’’: If non-empty, sort list types using this field specification. The field specification is expressed as a JSONPath expression (e.g. ‘{.metadata.name}’). The field in the API resource specified by this JSONPath expression must be an integer or a string.
- –template=’’: Template string or path to template file to use when -o=go-template, -o=go-template-file. The template format is golang templates [http://golang.org/pkg/text/template/#pkg-overview].
- -w, –watch # 实时监控。类似于在命令前加 wathch。只有当资源状态变化时,才会显示
- –watch-only # Watch for changes to the requested object(s), without listing/getting first.
EXAMPLE
获取原始 URL,显示 /
下的资源
- kubectl get –raw /
查看所有名称空间下的所有资源
- kubectl get all -A
显示 myapp-pod 这个 pod 的信息
- kubectl get pod/myapp-pod
自定义显示内容,仅显示 node 名字 和 标签
- kubectl get nodes -o custom-columns=NAME:.metadata.name,LABELS:.metadata.labels
]# kubectl get nodes -o custom-columns=NAME:.metadata.name,LABELS:.metadata.labels
NAME LABELS
master-test-1 map[beta.kubernetes.io/arch:amd64 beta.kubernetes.io/os:linux kubernetes.io/arch:amd64 kubernetes.io/hostname:master-test-1 kubernetes.io/os:linux node-role.kubernetes.io/controlplane:true node-role.kubernetes.io/etcd:true]
node-test-1 map[beta.kubernetes.io/arch:amd64 beta.kubernetes.io/os:linux kubernetes.io/arch:amd64 kubernetes.io/hostname:node-test-1 kubernetes.io/os:linux node-role.kubernetes.io/worker:true]
node-test-2 map[beta.kubernetes.io/arch:amd64 beta.kubernetes.io/os:linux kubernetes.io/arch:amd64 kubernetes.io/hostname:node-test-2 kubernetes.io/os:linux node-role.kubernetes.io/worker:true]
获取所有节点的污点
- kubectl get nodes –template=’{{range .items}}{{.metadata.name}}{{"\t"}}{{.spec.taints}}{{"\n"}}{{end}}’
列出事件(Events),按时间戳排序
- kubectl get events -A –sort-by=’{.metadata.creationTimestamp}'
删除所有名称空间中标签为 authz.cluster.cattle.io/rtb-owner-updated 的 rolebinding 对象
- for k in $(kubectl get ns -o name | awk -F/ ‘{print $2}’); do for i in $(kubectl get -n $k rolebindings.rbac.authorization.k8s.io -l “authz.cluster.cattle.io/rtb-owner-updated” -o name); do kubectl delete -n $k $i; done;done
从 kubernetes-dashboard 这个 deployment 中获取 SA,并从 SA 中提取 Token。
export APPNAME=$(kubectl get deployments.apps -n kubernetes-dashboard -o name)
export SA=$(kubectl get ${APPNAME} -n kubernetes-dashboard -ojsonpath='{.spec.template.spec.serviceAccountName}')
kubectl get secrets -n kubernetes-dashboard -o jsonpath="{.items\[?(@.metadata.annotations\['kubernetes.io/service-account.name']=='${SA}')].data.token}" | base64 -d
获取 admin TOKEN
查看 replicaset 的历史版本号
- kubectl get replicasets.apps -n bluestore-console -ojsonpath=’{range .items[*]}{.metadata.annotations.deployment.kubernetes.io/revision}{"\t"}{.metadata.name}{"\n"}{end}’
列出集群中所有运行容器的镜像
参考:https://kubernetes.io/zh-cn/docs/tasks/access-application-cluster/list-all-running-container-images/
列出所有名称空间下的所有容器镜像
~]# kubectl get pods -A -o jsonpath="{.items[*].spec.containers[*].image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
3 ghcr.io/kube-vip/kube-vip:v0.5.10
1 percona:8.0
3 percona/percona-xtradb-cluster:8.0.29-21.1
1 percona/percona-xtradb-cluster-operator:1.12.0
6 percona/percona-xtradb-cluster-operator:1.12.0-haproxy
6 percona/percona-xtradb-cluster-operator:1.12.0-logcollector
1 percona/percona-xtradb-cluster-operator:1.12.0-pxc8.0-backup
1 rancher/local-path-provisioner:v0.0.23
1 rancher/mirrored-coredns-coredns:1.9.4
1 rancher/mirrored-metrics-server:v0.6.2
1 registry.ehualu.com/common/redis:4.0
查询 Pod 中的信息
显示 pod 的名字及其启动时间。
~]# kubectl get pods -A -o=jsonpath='{range .items[*]}{.metadata.name}{"\t"}{.status.startTime}{"\n"}{end}'
myapp-pod 2020-08-21T15:57:35Z
default-http-backend-598b7d7dbd-xrp6s 2020-08-17T05:04:41Z
nginx-ingress-controller-7b9mp 2020-08-17T05:04:40Z
nginx-ingress-controller-lhbgl 2020-08-22T08:17:10Z
coredns-849545576b-7xt9p 2020-08-17T07:27:43Z
列出 Pod 中的所有容器名称
export NAMESPACE="mysql"
export POD="mysql"
kubectl get pods -n ${NAMESPACE} ${POD} -o=jsonpath='{.spec.containers[*].name}' | tr -s '[[:space:]]' '\n' | sort
过滤 Pod
获取 kube-system 名称空间下,标签 k8s-app 的值为 kube-dns 的所有 pod。
- kubectl get pod -n kube-system –selector=“k8s-app=kube-dns”
获取 node-1 节点上的所有 Pods
- kubectl get pods –all-namespaces -o wide –field-selector spec.nodeName=node-1
获取指定状态的 pod。(Succeeded 就是 Completed)
- kubectl get pods -A –field-selector status.phase=Running
- kubectl get pod -A –field-selector status.phase=Succeeded
获取 Evicted 状态的 Pod
kubectl get pods -A -o json | jq '.items[] | select(.status.reason == "Evicted") | {name: .metadata.name, reason: .status.reason}'
kubectl get pods | grep Evicted | awk '{print $1}' | xargs kubectl delete pod
获取 test 名称空间下所有资源
kubectl api-resources -o name --verbs=list --namespaced | xargs -n 1 kubectl get --show-kind --ignore-not-found -n test
获取正在使用 pvc 的 pod
kubectl get pods --all-namespaces -o=json | jq -c '.items\[] | {name: .metadata.name, namespace: .metadata.namespace, claimName:.spec.volumes\[] | select( has ("persistentVolumeClaim") ).persistentVolumeClaim.claimName }'
获取 Pod 在 Node 上的分布数量
kubectl get pods -A -o wide -l app="flannel" | awk '{print $8}'|\
awk '{ count[$0]++ }
END {
printf("%-35s: %s\n","Word","Count");
for(ind in count){
printf("%-35s: %d\n",ind,count[ind]);
}
}'
若是指定了名称空间,awk 则应筛选 $7 列。
获取指定状态的 Pod,并删除
获取 Pod 状态为 Pending 的所有 Pod 并生成删除指令
export PodStatus="Pending"
kubectl get pods --all-namespaces --field-selector status.phase=${PodStatus} -o json | \
jq '.items[] | "kubectl get pods \(.metadata.name) -o wide -n \(.metadata.namespace)"'
!!!注意:执行 xargs -n 1 bash -c
删除操作前,需要详细调试命令
最后加上 xargs -n 1 bash -c
以执行生成的删除 Pod 指令
kubectl get pods --all-namespaces --field-selector status.phase=Pending -o json | \
jq '.items[] | "kubectl delete pods \(.metadata.name) -n \(.metadata.namespace)"' | \
xargs -n 1 bash -c
如果只是获取单一 Namespace 下的 Pods,直接只用 grep 命令筛选更快~
- kubectl -n default get pods | grep Completed | awk ‘{print $1}’ | xargs kubectl -n default delete pods
finalizers 字段处理
快速清空对象中的 finalizers 字段
kubectl get namespace test -o json \
| tr -d "\n" | sed "s/\"finalizers\": \[[^]]\+\]/\"finalizers\": []/" \
| kubectl replace --raw /api/v1/namespaces/test/finalize -f -
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.