kubectl [command] [TYPE] [NAME] [flags]
kubectl 常用语法如上,大部分都是由以下这些参数拼装来的
command可选为create
、get
、describe
、delete、applay、exec等,对资源进行操作
type:需要操作的资源类型,资源类型不区分大小写,您可以指定单数、复数或缩写形式,常用类型有node、pod、services、namespaces等
name:指定资源的名称。名称区分大小写。如果省略名称,则显示所有资源的详细信息。
flags
: 指定可选的参数。
command
create:创建资源
get:列出一个或多个资源
kubectl describe
- 显示一个或多个资源的详细状态,默认情况下包括未初始化的资源。
kubectl delete
- 从文件、stdin 或指定标签选择器、名称、资源选择器或资源中删除资源。
kubectl exec
- 对 pod 中的容器执行命令。
kubectl apply
- 以文件或标准输入为准应用或更新资源。
kubectl cp -复制文件或文件夹
name:
指定资源的名称。名称区分大小写。 如果省略名称,则显示所有资源的详细信息 kubectl get pods
。
在对多个资源执行操作时,你可以按类型和名称指定每个资源,或指定一个或多个文件:
- 要按类型和名称指定资源:
- 要对所有类型相同的资源进行分组,请执行以下操作:
TYPE1 name1 name2 name<#>
。
例子:kubectl get pod example-pod1 example-pod2
- 分别指定多个资源类型:
TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>
。
例子:kubectl get pod/example-pod1 replicationcontroller/example-rc1
- 用一个或多个文件指定资源:
-f file1 -f file2 -f file<#>
-
使用 YAML 而不是 JSON 因为 YAML 更容易使用,特别是用于配置文件时。 例子:
kubectl get -f ./pod.yaml
type:
kubectl api-resources 可以查询所有的资源类型,其中SHORTNAMES是简写,我们也可以通过简写来对资源类型咨询操作。也可通过NAMESPACED查看该资源类型是不是有命名空间
也可查看https://kubernetes.io/docs/reference/kubectl/overview/#resource-types查询所有类型
flags
常用flags有以下内容,如果需要查看每个操作支持哪些flag,可查看https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands官方文档
filename -f:指定资源的文件名、目录或 URL
container -c:容器名称,如果省略,则默认选择pod中的第一个
all-namespaces -A: 指定命令空间,如果省略,则查看默认命名空间的内容
selector -l:支持 '=', '==', and '!='。(例如. -l key1=value1,key2=value2)
stdin -i:标准输入到容器中
tty -t:标准是tty命令()
--sort-by 按xx排序
output -o:格式化输出,一般还需要加上其他参数,如下图
常用命令
# 以纯文本输出格式列出默认命令空间的所有 pod。
kubectl get pods
# 以纯文本输出格式列出所有 pod,并包含附加信息(如节点名)。
kubectl get pods -o wide
# 以纯文本输出格式列出所有命名空间的 pod,并包含附加信息
kubectl get pods -A -o wide
# 以纯文本输出格式列出具有指定名称的副本控制器。提示:你可以使用别名 'rc' 缩短和替换 'replicationcontroller' 资源类型。
kubectl get replicationcontroller <rc-name>
# 以纯文本输出格式列出所有副本控制器和服务。
kubectl get rc,services
# 以纯文本输出格式列出所有守护程序集,包括未初始化的守护程序集。
kubectl get ds --include-uninitialized
# 列出在节点 server01 上运行的所有 pod
kubectl get pods --field-selector=spec.nodeName=server01
#查询服务
kubectl get services
#查询服务对应的端口
kubectl get services -A
#查询集群节点(名称、状态、角色、版本等)
kubectl get nodes
#查询集群节点详细信息(CPU、当前节点的pod信息及cpu限制等)
kubectl describe nodes
# 显示名称为 <node-name> 的节点的详细信息。
kubectl describe nodes <node-name>
# 显示名为 <pod-name> 的 pod 的详细信息。
kubectl describe pods/<pod-name>
# 显示由名为 <rc-name> 的副本控制器管理的所有 pod 的详细信息。
# 记住:副本控制器创建的任何 pod 都以复制控制器的名称为前缀。
kubectl describe pods <rc-name>
# 描述所有的 pod,不包括未初始化的 pod
kubectl describe pods
# 使用 pod.yaml 文件中指定的类型和名称删除 pod。
kubectl delete -f pod.yaml
# 删除所有带有 '<label-key>=<label-value>' 标签的 Pod 和服务。
kubectl delete pods,services -l <label-key>=<label-value>
# 删除所有 pod,包括未初始化的 pod。
kubectl delete pods --all
# 从 pod <pod-name> 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
kubectl exec <pod-name> -- date
# 运行输出 'date' 获取在容器的 <container-name> 中 pod <pod-name> 的输出。
kubectl exec <pod-name> -c <container-name> -- date
# 获取一个交互 TTY 并运行 /bin/bash <pod-name >。默认情况下,输出来自第一个容器。
kubectl exec -ti <pod-name> -- /bin/bash
#递归查询容器镜像
- 使用
tr
将空格替换为新的行 - 使用
sort
对结果排序 - 使用
uniq
对镜像使用计数
kubectl get pods --all-namespaces -o jsonpath="{..image}" |\
tr -s '[[:space:]]' '\n' |\
sort |\
uniq -c
参考资料
https://kubernetes.io/docs/reference/kubectl/overview/
https://kuboard.cn/learning/k8s-practice/admin/list-images.html#%E5%89%8D%E6%8F%90%E6%9D%A1%E4%BB%B6