Kubectl 是管理kubernetes的命令行工具,kubectl在$HOME/.kube目录下查找config配置文件。可以通过设置KUBECONFIG环境变量或设置--kubeconfig参数指定其他kubeconfig文件。
本文介绍kubectl语法和命令操作描述,并提供常见示例。包括支持的参数和子命令。
kubectl使用以下语法,在终端运行命令:
kubectl [command] [TYPE] [NAME] [flags]
其中:
例如:以下三个命令输出结果相同
kubectl get pod nginx-1635820653-568f555cfd-fmvr2
kubectl get pods nginx-1635820653-568f555cfd-fmvr2
kubectl get po nginx-1635820653-568f555cfd-fmvr2
kubectl get pods
1)要按类型和名称指定资源
a) 要对所有类型相同的资源进行分区,执行以下操作: TYPE1 name1 name2 name<#>,例如:
kubectl get pod nfs-client-provisioner-6fd5756874-qkwwq sentinel-0
b) 分别指定多个资源类型: TYPE1/name TYPE1/name2 TYPE2/name1 TYPE<#>/name<#>,例如:
kubectl get pod/nfs-client-provisioner-6fd5756874-qkwwq service/nginx-1635820653
2)用一个或多个文件指定资源: -f file1 -f file2 -f file<#>
a) 使用YAML而不是JSON,因为YAML更容易使用,特别是用于配置文件。例如:
kubectl get -f ./pod.yaml
- -n 后跟 namespace, 查看指定的命名空间
- -o
注意:从命令行指定的参数会覆盖默认值和任何相应的环境变量。
如果需要帮助,可以使用kubectl的help命令
kubectl -h
基础命令
命令 | 说明 |
---|---|
create | 通过文件名或者标准输入创建资源 |
expose | 将一个资源公开为一个新的Service |
run | 在集群中运行一个特定的镜像 |
set | 在对象上设置特定的功能 |
expiain | 文档参考资料 |
get | 显示一个或多个资源 |
edit | 使用默认的编辑器编辑一个资源 |
delete | 通过文件名、标准输入、资源名称或标签选择器来删除资源 |
集群部署命令
命令 | 说明 |
---|---|
rollout | 管理资源的发布 |
rolling-update | 对给定的复制控制器滚动更新 |
scale | 扩容或缩容Pod数量,Deployment、ReplicaSet、RC或Job |
autoscale | 创建一个自动选择扩容或缩容并设置Pod数量 |
集群管理命令
命令 | 说明 |
---|---|
certificate | 修改证书资源 |
cluster-info | 显示集群信息 |
top | 显示资源(CPU/Memory/Storage)使用。需要Heapster运行 |
cordon | 标记节点不可调度 |
uncordon | 标记节点可调度 |
drain | 驱逐节点上的应用,准备下线维护 |
taint | 修改节点taint标记 |
故障和调试命令
命令 | 说明 |
---|---|
describe | 显示特定资源或资源组的详细信息 |
logs | 在一个Pod中打印一个容器日志。如果Pod只有一个容器,容器名称是可选的 |
attach | 附加到一个运行的容器 |
exec | 执行命令到容器 |
port-forward | 转发一个或多个本地端口到一个pod |
proxy | 运行一个proxy到kubernetes API server |
cp | 拷贝文件或目录到容器中 |
auth | 检查授权 |
高级命令
命令 | 说明 |
---|---|
apply | 通过文件名或标准输入对资源应用配置 |
patch | 使用补丁修改、更新资源的字段 |
replace | 通过文件名或标准输入替换一个资源 |
convert | 不同的API版本之间转换配置文件 |
设置命令
命令 | 说明 |
---|---|
label | 更新资源上的标签 |
annotate | 更新资源上的注释 |
completion | 用于实现kubectl工具自动不全 |
其他命令
命令 | 说明 |
---|---|
api-versions | 打印支持的API版本 |
api-resources | 打印支持的服务器资源API |
config | 修改kubeconfig文件(用于访问API,比如配置认证信息) |
help | 所有命令帮助 |
plugin | 运行一个命令行插件 |
version | 打印客户端和服务版本信息 |
下表包含所有kubectl操作的描述和语法
操作 | 语法 | 描述 |
---|---|---|
alpha |
kubectl alpha SUBCOMMAND [flags] |
列出与 alpha 特性对应的可用命令,这些特性在 Kubernetes 集群中默认情况下是不启用的。 |
annotate |
kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [—overwrite] [—all] [—resource-version=version] [flags] |
添加或更新一个或多个资源的注解。 |
api-resources |
kubectl api-resources [flags] |
列出可用的 API 资源。 |
api-versions |
kubectl api-versions [flags] |
列出可用的 API 版本。 |
apply |
kubectl apply -f FILENAME [flags] |
从文件或 stdin 对资源应用配置更改。 |
attach |
kubectl attach POD -c CONTAINER [-i] [-t] [flags] |
附加到正在运行的容器,查看输出流或与容器(stdin)交互。 |
auth |
kubectl auth [flags] [options] |
检查授权。 |
autoscale |
kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [—min=MINPODS] —max=MAXPODS [—cpu-percent=CPU] [flags] |
自动伸缩由副本控制器管理的一组 pod。 |
certificate |
kubectl certificate SUBCOMMAND [options] |
修改证书资源。 |
cluster-info |
kubectl cluster-info [flags] |
显示有关集群中主服务器和服务的端口信息。 |
completion |
kubectl completion SHELL [options] |
为指定的 shell (bash 或 zsh)输出 shell 补齐代码。 |
config |
kubectl config SUBCOMMAND [flags] |
修改 kubeconfig 文件。有关详细信息,请参阅各个子命令。 |
convert |
kubectl convert -f FILENAME [options] |
在不同的 API 版本之间转换配置文件。配置文件可以是 YAML 或 JSON 格式。 |
cordon |
kubectl cordon NODE [options] |
将节点标记为不可调度。 |
cp |
kubectl cp |
在容器之间复制文件和目录。 |
create |
kubectl create -f FILENAME [flags] |
从文件或 stdin 创建一个或多个资源。 |
delete |
kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | —all]) [flags] |
从文件、标准输入或指定标签选择器、名称、资源选择器或资源中删除资源。 |
describe |
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] |
显示一个或多个资源的详细状态。 |
diff |
kubectl diff -f FILENAME [flags] |
将 live 配置和文件或标准输入做对比 (BETA) |
drain |
kubectl drain NODE [options] |
腾空节点以准备维护。 |
edit |
kubectl edit (-f FILENAME | TYPE NAME | TYPE/NAME) [flags] |
使用默认编辑器编辑和更新服务器上一个或多个资源的定义。 |
exec |
kubectl exec POD [-c CONTAINER] [-i] [-t] [flags] [— COMMAND [args…]] |
对 pod 中的容器执行命令。 |
explain |
kubectl explain [—recursive=false] [flags] |
获取多种资源的文档。例如 pod, node, service 等。 |
expose |
kubectl expose (-f FILENAME | TYPE NAME | TYPE/NAME) [—port=port] [—protocol=TCP|UDP] [—target-port=number-or-name] [—name=name] [—external-ip=external-ip-of-service] [—type=type] [flags] |
将副本控制器、服务或 pod 作为新的 Kubernetes 服务暴露。 |
get |
kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [—watch] [—sort-by=FIELD] [[-o | —output]=OUTPUT_FORMAT] [flags] |
列出一个或多个资源。 |
kustomize |
kubectl kustomize |
列出从 kustomization.yaml 文件中的指令生成的一组 API 资源。参数必须是包含文件的目录的路径,或者是 git 存储库 URL,其路径后缀相对于存储库根目录指定了相同的路径。 |
label |
kubectl label (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 … KEY_N=VAL_N [—overwrite] [—all] [—resource-version=version] [flags] |
添加或更新一个或多个资源的标签。 |
logs |
kubectl logs POD [-c CONTAINER] [—follow] [flags] |
在 pod 中打印容器的日志。 |
options |
kubectl options |
全局命令行选项列表,适用于所有命令。 |
patch |
kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) —patch PATCH [flags] |
使用策略合并 patch 程序更新资源的一个或多个字段。 |
plugin |
kubectl plugin [flags] [options] |
提供用于与插件交互的实用程序。 |
port-forward |
kubectl port-forward POD [LOCAL_PORT:]REMOTE_PORT […[LOCAL_PORT_N:]REMOTE_PORT_N] [flags] |
将一个或多个本地端口转发到一个 pod。 |
proxy |
kubectl proxy [—port=PORT] [—www=static-dir] [—www-prefix=prefix] [—api-prefix=prefix] [flags] |
运行 Kubernetes API 服务器的代理。 |
replace |
kubectl replace -f FILENAME |
从文件或标准输入中替换资源。 |
rollout |
kubectl rollout SUBCOMMAND [options] |
管理资源的部署。有效的资源类型包括:Deployments, DaemonSets 和 StatefulSets。 |
run |
kubectl run NAME —image=image [—env=”key=value”] [—port=port] [—dry-run=server | client | none] [—overrides=inline-json] [flags] |
在集群上运行指定的镜像。 |
scale |
kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) —replicas=COUNT [—resource-version=version] [—current-replicas=count] [flags] |
更新指定副本控制器的大小。 |
set |
kubectl set SUBCOMMAND [options] |
配置应用程序资源。 |
taint |
kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 … KEY_N=VAL_N:TAINT_EFFECT_N [options] |
更新一个或多个节点上的污点。 |
top |
kubectl top [flags] [options] |
显示资源(CPU/内存/存储)的使用情况。 |
uncordon |
kubectl uncordon NODE [options] |
将节点标记为可调度。 |
version |
kubectl version [—client] [flags] |
显示运行在客户端和服务器上的 Kubernetes 版本。 |
wait |
kubectl wait ([-f FILENAME] | resource.group/resource.name | resource.group [(-l label | —all)]) [—for=delete|—for condition=available] [options] |
实验性:等待一种或多种资源的特定条件。 |
更多有关命令操作的信息,请参阅kubectl参考文档。
下表列出所有支持的资源类型及其缩写名:
提示:以下输出可以通过kubectl api-resources获取
资源名 | 缩写名 | API 分组 | 按命名空间 | 资源类型 |
---|---|---|---|---|
bindings |
true | Binding | ||
componentstatuses |
cs |
false | ComponentStatus | |
configmaps |
cm |
true | ConfigMap | |
endpoints |
ep |
true | Endpoints | |
events |
ev |
true | Event | |
limitranges |
limits |
true | LimitRange | |
namespaces |
ns |
false | Namespace | |
nodes |
no |
false | Node | |
persistentvolumeclaims |
pvc |
true | PersistentVolumeClaim | |
persistentvolumes |
pv |
false | PersistentVolume | |
pods |
po |
true | Pod | |
podtemplates |
true | PodTemplate | ||
replicationcontrollers |
rc |
true | ReplicationController | |
resourcequotas |
quota |
true | ResourceQuota | |
secrets |
true | Secret | ||
serviceaccounts |
sa |
true | ServiceAccount | |
services |
svc |
true | Service | |
mutatingwebhookconfigurations |
admissionregistration.k8s.io | false | MutatingWebhookConfiguration | |
validatingwebhookconfigurations |
admissionregistration.k8s.io | false | ValidatingWebhookConfiguration | |
customresourcedefinitions |
crd,crds |
apiextensions.k8s.io | false | CustomResourceDefinition |
apiservices |
apiregistration.k8s.io | false | APIService | |
controllerrevisions |
apps | true | ControllerRevision | |
daemonsets |
ds |
apps | true | DaemonSet |
deployments |
deploy |
apps | true | Deployment |
replicasets |
rs |
apps | true | ReplicaSet |
statefulsets |
sts |
apps | true | StatefulSet |
tokenreviews |
authentication.k8s.io | false | TokenReview | |
localsubjectaccessreviews |
authorization.k8s.io | true | LocalSubjectAccessReview | |
selfsubjectaccessreviews |
authorization.k8s.io | false | SelfSubjectAccessReview | |
selfsubjectrulesreviews |
authorization.k8s.io | false | SelfSubjectRulesReview | |
subjectaccessreviews |
authorization.k8s.io | false | SubjectAccessReview | |
horizontalpodautoscalers |
hpa |
autoscaling | true | HorizontalPodAutoscaler |
cronjobs |
cj |
batch | true | CronJob |
jobs |
batch | true | Job | |
certificatesigningrequests |
csr |
certificates.k8s.io | false | CertificateSigningRequest |
leases |
coordination.k8s.io | true | Lease | |
endpointslices |
discovery.k8s.io | true | EndpointSlice | |
events |
ev |
events.k8s.io | true | Event |
ingresses |
ing |
extensions | true | Ingress |
flowschemas |
flowcontrol.apiserver.k8s.io | false | FlowSchema | |
prioritylevelconfigurations |
flowcontrol.apiserver.k8s.io | false | PriorityLevelConfiguration | |
ingressclasses |
networking.k8s.io | false | IngressClass | |
ingresses |
ing |
networking.k8s.io | true | Ingress |
networkpolicies |
netpol |
networking.k8s.io | true | NetworkPolicy |
runtimeclasses |
node.k8s.io | false | RuntimeClass | |
poddisruptionbudgets |
pdb |
policy | true | PodDisruptionBudget |
podsecuritypolicies |
psp |
policy | false | PodSecurityPolicy |
clusterrolebindings |
rbac.authorization.k8s.io | false | ClusterRoleBinding | |
clusterroles |
rbac.authorization.k8s.io | false | ClusterRole | |
rolebindings |
rbac.authorization.k8s.io | true | RoleBinding | |
roles |
rbac.authorization.k8s.io | true | Role | |
priorityclasses |
pc |
scheduling.k8s.io | false | PriorityClass |
csidrivers |
storage.k8s.io | false | CSIDriver | |
csinodes |
storage.k8s.io | false | CSINode | |
storageclasses |
sc |
storage.k8s.io | false | StorageClass |
volumeattachments |
storage.k8s.io | false | VolumeAttachment |
介绍如何格式化或排序某些命令的输出信息。
1)格式化输出
kubectl命令的默认输出格式是可读的纯文本格式。要以特定格式向终端窗口输出详细信息,可以将-o或--output参数添加到kubectl命令中。
语法:
kubectl [command] [TYPE] [NAME] -o=
根据kubectl操作,支持以下输出格式:
Output format | Description |
---|---|
-o custom-columns= |
使用逗号分隔的自定义列列表打印表。 |
-o custom-columns-file= |
使用 文件中的自定义列模板打印表。 |
-o json |
输出 JSON 格式的 API 对象 |
-o jsonpath= |
打印 jsonpath 表达式定义的字段 |
-o jsonpath-file= |
打印 文件中 jsonpath 表达式定义的字段。 |
-o name |
仅打印资源名称而不打印任何其他内容。 |
-o wide |
以纯文本格式输出,包含任何附加信息。对于 pod 包含节点名。 |
-o yaml |
输出 YAML 格式的 API 对象。 |
示例
在此示例中,将单个pod的详细信息输出为YAML格式的对象:
kubectl get pods web-59ff48c4b4-p7d4l -o yaml
2)自定义列
可以自定义列并仅将所需的详细信息输出到表中,可以使用该custom-columns选项。可以使用内联定义自定义列或使用模板文件: -o=custom-columns=
示例:
内联
kubectl get pods -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
模板文件:
kubectl get pods -o custom-columns-file=template.txt
其中,template.txt文件包含:
NAME RSRC
metadata.name metadata.resourceVersion
运行命令,结果如下:
NAME RSRC
web-59ff48c4b4-p7d4l 73277318
3)Server-side列
kubectl支持从服务器接收关于对象的特定列信息。对于任何给定的资源,服务器将返回与该资源相关的列和行,以便客户端打印。通过让服务器封装打印的细节,允许在针对统一集群使用的客户端之间提供一直的可读输出。
此功能默认启用。要禁用它,将参数--server-print=false参数添加到kubectl get 命令中
例子:
要打印有关pod状态的信息,请使用如下命令:
kubectl get pods --server-print=false
输出类似于
NAME AGE
pod-name 1m
4)排序列表对象
要将对象排序后输出到终端窗口,可以将--sort-by参数添加到支持的kubectl命令。通过使用--sort-by参数指定任何数字或字符串来对对象进行排序。要指定字段,请使用jsonpath表达式。
语法:
kubectl [command] [TYPE] [NAME] --sort-by=
示例:
要打印按名称排序的pod列表,请运行:
kubectl get pods --sort-by=.metadata.name
使用以下示例来帮助你熟悉运行常用kubectl操作
1)kubectl apply -以文件或标准输入为准应用或更新资源
# 使用 example-service.yaml 中的定义创建服务。
kubectl apply -f example-service.yaml
# 使用 example-controller.yaml 中的定义创建 replication controller。
kubectl apply -f example-controller.yaml
# 使用 路径下的任意 .yaml, .yml, 或 .json 文件 创建对象。
kubectl apply -f
2)kubectl get - 列出一个或多个资源
# 以纯文本输出格式列出所有 pod。
kubectl get pods
# 以纯文本输出格式列出所有 pod,并包含附加信息(如节点名)。
kubectl get pods -o wide
# 以纯文本输出格式列出具有指定名称的副本控制器。提示:你可以使用别名 'rc' 缩短和替换 'replicationcontroller' 资源类型。
kubectl get replicationcontroller
# 以纯文本输出格式列出所有副本控制器和服务。
kubectl get rc,services
# 以纯文本输出格式列出所有守护程序集,包括未初始化的守护程序集。
kubectl get ds --include-uninitialized
# 列出在节点 server01 上运行的所有 pod
kubectl get pods --field-selector=spec.nodeName=server01
3)kubectl describe - 显示一个或多个资源的详细状态,默认情况下包含未初始化的资源
# 显示名称为 的节点的详细信息。
kubectl describe nodes
# 显示名为 的 pod 的详细信息。
kubectl describe pods/
# 显示由名为 的副本控制器管理的所有 pod 的详细信息。
# 记住:副本控制器创建的任何 pod 都以复制控制器的名称为前缀。
kubectl describe pods
# 描述所有的 pod,不包括未初始化的 pod
kubectl describe pods
说明:
kubectl get 命令通常用于检索同一类型的一个或多个资源。它具有丰富的参数,允许使用-o或--output参数自定义输出格式。可以指定-w或--watch参数以开始观察特定对象的更新。
kubectl describe命令更侧重于描述指定资源的相关方面。可以调用对API服务器的多个API调用来为用户构建视图。例如,kubectl describe node命令不仅检索有关节点的信息,还检索在其上运行的pod的摘要,为节点生成的事件等。
3)kubectl delete - 从文件、stdin或指定的标签选择器、名称、资源选择器或资源中删除资源。
# 使用 pod.yaml 文件中指定的类型和名称删除 pod。
kubectl delete -f pod.yaml
# 删除所有带有 '=' 标签的 Pod 和服务。
kubectl delete pods,services -l =
# 删除所有 pod,包括未初始化的 pod。
kubectl delete pods --all
4)kubectl exec - 对pod中的容器执行命令
# 从 pod 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
kubectl exec -- date
# 运行输出 'date' 获取在容器的 中 pod 的输出。
kubectl exec -c -- date
# 获取一个交互 TTY 并运行 /bin/bash 。默认情况下,输出来自第一个容器。
kubectl exec -ti -- /bin/bash
5)kubectl logs -打印pod中的日志
# 从 pod 返回日志快照。
kubectl logs
# 从 pod 开始流式传输日志。这类似于 'tail -f' Linux 命令。
kubectl logs -f
参考地址:
命令行工具 (kubectl) | Kubernetes