kubectl是用于针对Kubernetes集群运行命令的命令行接口。本概述涵盖kubectl语法,描述命令操作,并提供常见的示例。有关每个命令的详细信息,包括所有支持的flags和子命令,请参考kubectl相关文档。有关安装说明,请参阅安装kubectl

语法

从您的终端窗口使用以下语法运行kubectl命令:

kubectl [command] [TYPE] [NAME] [flags]

其中command,TYPE,NAME,和flags分别是:

NAME:指定资源的名称。名称区分大小写。如果省略名称,则会显示所有资源的详细信息,比如$ kubectl get pods

在多个资源上执行操作时,可以按类型和名称指定每个资源,或指定一个或多个文件:

如果您需要帮助,只需从终端窗口运行kubectl help

操作

下表包括所有kubectl操作的简短描述和一般语法:

Operation Syntax Description
annotate kubectl annotate (-f FILENAME | TYPE NAME | TYPE/NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--overwrite] [--all] [--resource-version=version] [flags] 添加或更新一个或多个资源的注解。
api-versions kubectl api-versions [flags] 列出可用的API版本。
apply kubectl apply -f FILENAME [flags] 对文件或标准输入流更改资源应用配置。
attach kubectl attach POD -c CONTAINER [-i] [-t] [flags] attach 到正在运行的容器来查看输出流或与容器(stdin)进行交互。
autoscale kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] 自动弹性伸缩一组被replication controller管理的pods。
cluster-info kubectl cluster-info [flags] 显示有关集群中master节点和服务的端点信息。
config kubectl config SUBCOMMAND [flags] 修改kubeconfig文件。有关详细信息,请参阅各个子命令。
create kubectl create -f FILENAME [flags] 从文件或stdin创建一个或多个资源。
delete kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | --all]) [flags] 从文件,stdin或指定selector,名称,资源选择器或资源中删除资源。
describe kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] 显示一个或多个资源的详细状态。
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 [--include-extended-apis=true] [--recursive=false] [flags] 获取各种资源的文档。例如 pods, nodes, services 等.
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] 将暴露replication controller, service, 或者pod为新的Kubernetes服务。
get kubectl get (-f FILENAME | TYPE [NAME | /NAME | -l label]) [--watch] [--sort-by=FIELD] [[-o | --output]=OUTPUT_FORMAT] [flags] 列出一个或多个资源。
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的容器中打印日志。
patch kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] 使用strategic merge patch程序更新资源的一个或多个字段。
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 从文件或stdin替换资源。
rolling-update kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags] 通过逐步替换指定的replication controller及其pod来执行滚动更新。
run kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [flags] 在集群上运行指定的镜像。
scale kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] 更新指定replication controller的副本数量。
stop kubectl stop 已弃用: 相应的, 请查看 kubectl delete.
version kubectl version [--client] [flags] 显示在客户端和服务器上运行的Kubernetes版本。

请记住:有关命令操作的更多信息,请参阅kubectl参考文档。

资源类型

下表包括所有支持的资源类型及其缩写别名的列表:

资源类型 缩写别名
apiservices  
certificatesigningrequests csr
clusters  
clusterrolebindings  
clusterroles  
componentstatuses cs
configmaps cm
controllerrevisions  
cronjobs  
customresourcedefinition crd
daemonsets ds
deployments deploy
endpoints ep
events ev
horizontalpodautoscalers hpa
ingresses ing
jobs  
limitranges limits
namespaces ns
networkpolicies netpol
nodes no
persistentvolumeclaims pvc
persistentvolumes pv
poddisruptionbudget pdb
podpreset  
pods po
podsecuritypolicies psp
podtemplates  
replicasets rs
replicationcontrollers rc
resourcequotas quota
rolebindings  
roles  
secrets  
serviceaccounts sa
services svc
statefulsets  
storageclasses  

输出选项

请使用以下部分查看如何格式化或排序某些命令的输出的信息,有关哪些命令支持各种输出选项的详细信息,请参阅kubectl参考文档。

格式化输出

所有kubectl命令的默认输出格式是可读的纯文本格式。要以特定格式将详细信息输出到终端窗口,您可以将一个-o或多个-output标志添加到支持的kubectl命令中。

语法

kubectl [command] [TYPE] [NAME] -o=<output_format>

根据kubectl操作,支持以下输出格式:

输出格式 描述
-o=custom-columns=<spec> 输入使用逗号分隔的列表打印表格 custom columns
-o=custom-columns-file=<filename> 使用文件中的自定义列模板打印表<filename>
-o=json 输出JSON格式的API对象。
-o=jsonpath=<template> 打印在jsonpath表达式中定义的字段
-o=jsonpath-file=<filename> 打印由文件中的jsonpath表达式定义的字段<filename>
-o=name 仅打印资源名称,没有其他的。
-o=wide 以纯文本格式输出任何附加信息。对于pod,包括节点名称。
-o=yaml 输出YAML格式的API对象。

例子

在此示例中,以下命令将单个pod的详细信息作为YAML格式化对象输出: $ kubectl get pod web-pod-13je7 -o=yaml 记住:有关每个命令支持哪种输出格式的详细信息,请参阅kubectl参考文档。

自定义列

要定义自定义列并仅将所需的详细信息输出到表中,可以使用该custom-columns选项。您可以选择内联定义自定义列或使用模板文件:-o=custom-columns=<spec>-o=custom-columns-file=<filename>

例子

一致:

$ kubectl get pods <pod-name> -o=custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion

模版文件:

$ kubectl get pods <pod-name> -o=custom-columns-file=template.txt

template.txt文件包含:

NAME                    RSRC
metadata.name           metadata.resourceVersion

运行任一命令的结果是:

NAME           RSRC
submit-queue   610995

排序列表对象

要将对象输出到终端窗口中的排序列表,可以将该--sort-by标志添加到支持的kubectl命令中。通过使用--sort-by标志指定任何数字或字符串字段来对对象进行排序。要指定一个字段,请使用jsonpath表达式。

语法

kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
例子

打印按名称排序的列表,请运行:

$ kubectl get pods --sort-by=.metadata.name

示例:常用操作

使用以下一组示例来帮助您熟悉运行常用kubectl操作:

// 使用在example-service.yaml中的定义创建一个service.
$ kubectl create -f example-service.yaml

// 使用在example-controller.yaml中的定义创建一个replication controller.
$ kubectl create -f example-controller.yaml

// 使用在<directory>目录下的any .yaml, .yml, or .json文件创建对象.
$ kubectl create -f <directory>

kubectl get - 列出一个或更多资源.

// 使用文本格式列出所有的pods.
$ kubectl get pods

// 使用文本格式列出所有的信息,包含一些额外的信息(比如节点名称).
$ kubectl get pods -o wide

// 使用文本格式列出指定名称的replicationcontroller. 注: 你可以缩短 'replicationcontroller' 资源类型使用别名 'rc'.
$ kubectl get replicationcontroller <rc-name>

// 使用文本格式列出所有的rc,services.
$ kubectl get rc,services
`kubectl describe` - 显示一个或多个资源的详情状态.

```shell
// 显示指定节点名称的详情信息.
$ kubectl describe nodes <node-name>

// 显示指定pods名称的详情信息.
$ kubectl describe pods/<pod-name>

// 显示所有被名称为<rc-name>的replication controller管理的所有pods的详情信息.
// 请记住: 任何被replication controller的pod的名称前缀为replication controller的名称.
$ kubectl describe pods <rc-name>

kubectl delete - 从文件, stdin,或者指定的label selectors, 名称,资源选择器, 或者资源去删除资源.

// 通过 pod.yaml 文件中的资源类型和名称删除一个pod.
$ kubectl delete -f pod.yaml

// 删除所有label名称为name=<label-name>的pods和services.
$ kubectl delete pods,services -l name=<label-name>

// 删除所有pods.
$ kubectl delete pods --all

kubectl exec - 针对pod中的某个容器执行命令.

// 在名称为<pod-name>的pod允许 'date' 命令获得输出. 默认返回的是pod中第一个容器的终端.
$ kubectl exec <pod-name> date

// 在<pod-name>的pod中的<container-name>容器中运行'date'获取输出.
$ kubectl exec <pod-name> -c <container-name> date

// 从名称为<pod-name>的pod获取一个交互的终端和运行/bin/bash. 默认返回的是pod中第一个容器的终端.
$ kubectl exec -ti <pod-name> /bin/bash

kubectl logs - 输出一个pod的容器日志.

// 从名称为<pod-name>的pod返回日志快照.
$ kubectl logs <pod-name>

// 从名称为<pod-name>的pod中获取日志流. 这个和Linux命令'tail -f'相似.
$ kubectl logs -f <pod-name>

下一步

开始使用kubectl命令。