kubectl用于运行Kubernetes集群命令的管理工具。本文概述涵盖了kubectl语法,对命令操作的描述,并列举的常见例子。有关每个命令的详细信息,包括支持的所有flags和子命令,请查阅kubectl命令参考文档。有关安装说明,请参阅安装kubectl。
语法
在管理工具界面使用kubectl语法运行如下命令:
- kubectl [command] [TYPE] [NAME] [flags]
其中command,TYPE,NAME,和flags都是: command:指定要在一个或多个资源执行的操作,例如操作create,get,describe,delete。 TYPE:指定资源类型Resource types。Resource types会区分大小写,也可以指定单数,复数或缩写的形式。例如,以下命令将输出相同的结果:
shell $ kubectl get pod pod1 $ kubectl get pods pod1 $ kubectl get po pod1 * NAME:指定Resource的Name。Name区分大小写,如果省略Name,则显示所有资源的详细信息,例如:$ kubectl get pods。
当在多个资源上执行操作时,可以通过type和name 指定每个资源,或者指定一个或多个file:通过type和name指定的资源:如果它们都是相同的type,就可以对资源进行分组TYPE1 name1 name2 name<#>
- 例:$ kubectl get pod example-pod1 example-pod2 *单独指定多种资源type:TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>
- 例:$ kubectl get pod/example-pod1 replicationcontroller/example-rc1 *使用一个或多个file来指定资源:-f file1 -f file2 -f file<#> 使用YAML而不是JSON,因为YAML往往更容易掌握也对用户更友好,特别是对于配置文件。
- 例:$ kubectl get pod -f ./pod.yaml * flags:指定可选flags。例如,你可以使用-s或—server flag来指定Kubernetes API Server的地址和端口。
提示:命令行指定的flags将覆盖默认值和任何相应的环境变量。
如果需要更多相关帮助,只需从终端命令窗口运行 kubectl help
Operations
下表包括了所有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] | 对文件或stdin的资源进行配置更改。 | ||||
attach | kubectl attach POD -c CONTAINER [-i] [-t] [flags] | 连接到一个运行的容器,既可以查看output stream,也可以与容器(stdin)进行交互。 | ||||
autoscale | kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [—min=MINPODS] —max=MAXPODS [—cpu-percent=CPU] [flags] | 自动扩容/缩容由replication controller管理的一组pod。 | ||
cluster-info | kubectl cluster-info [flags] | 显示有关集群中master和services的终端信息。 | ||||
config | kubectl config SUBCOMMAND [flags] | 修改kubeconfig文件。有关详细信息,请参阅各个子命令。 | ||||
create | kubectl create -f FILENAME [flags] | 从file或stdin创建一个或多个资源。 | ||||
delete | kubectl delete (-f FILENAME | TYPE [NAME | /NAME | -l label | —all]) [flags] | 从file,stdin或指定label 选择器,names,resource选择器或resources中删除resources。 |
describe | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] | 显示一个或多个resources的详细状态。 | |
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] | 获取各种资源的文档。例如pod,node,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 service显示。 | |
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] | 添加或更新一个或多个资源的flags。 | ||
logs | kubectl logs POD [-c CONTAINER] [—follow] [flags] | 在pod中打印容器的日志。 | ||||
patch | kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) —patch PATCH [flags] | 使用strategic merge 补丁程序更新资源的一个或多个字段。 | ||
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 | 从file或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参考文档。
Resource types
下表列出了所有支持的资源类型及其缩写:
Resource type | Abbreviated alias |
---|---|
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 |
输出选项 Output options
使用以下部分来了解如何格式化或对某些命令的输出进行排序。关于哪些命令支持什么输出选项,请查阅kubectl参考文档。
格式化输出 Formatting output
所有kubectl命令输出的默认格式是可读的纯文本格式。要以特定的格式向终端窗口输出详细信息,可以将-o或-output flags 添加到支持的kubectl命令中。
语法:
- kubectl [command] [TYPE] [NAME] -o=<output_format>
根据kubectl操作,支持以下输出格式:
输出格式 | 描述 |
---|---|
-o=custom-columns=<spec> | 使用逗号分隔的custom columns列表打印一个表。 |
-o=custom-columns-file=<filename> | 使用文件中的custom columns模板打印表<filename>。 |
-o=json | 输出JSON格式的API对象。 |
-o=jsonpath=<template> | 打印在jsonpath表达式中定义的字段。 |
-o=jsonpath-file=<filename> | 打印由 file中的jsonpath表达式定义的字段<filename>。 |
-o=name | 仅打印资源名称,而不打印其他内容。 |
-o=wide | 以纯文本格式输出任何附加信息。对于pod,包括node名称。 |
-o=yaml | 输出YAML格式的API对象。 |
例如:
在此示例中,以下命令将单个pod的详细信息作为YAML格式化对象输出:
- $ kubectl get pod web-pod-13je7 -o=yaml
注意:有关每个命令支持哪种输出格式的详细信息,请参阅kubectl参考文档。
Custom columns
要定义custom columns并仅将所需的详细信息输出,可以使用该custom-columns选项,选择Inline定义custom columns或使用模板文件定义:-o=custom-columns=<spec>或-o=custom-columns-file=<filename>。
例如
Inline方式:
- $ 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
Sorting list objects
要将对象输出到终端窗口中的排序列表,可以将—sort-by标志添加到kubectl支持的命令中,通过使用—sort-by标志指定任何数字或字符串字段来对对象进行排序,要指定字段,请使用jsonpath表达式。
命令:
- kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
例如
要打印按名称排序的pod列表,请运行:
- $ kubectl get pods --sort-by=.metadata.name
示例:常用操作
使用以下一组示例来帮助你熟悉运行kubectl常用操作:
kubectl create - 从file或stdin中创建资源。
- // Create a service using the definition in example-service.yaml.
- $ kubectl create -f example-service.yaml
- // Create a replication controller using the definition in example-controller.yaml.
- $ kubectl create -f example-controller.yaml
- // Create the objects that are defined in any .yaml, .yml, or .json file within the <directory> directory.
- $ kubectl create -f <directory>
kubectl get 列出一个或多个资源。
- // List all pods in plain-text output format.
- $ kubectl get pods
- // List all pods in plain-text output format and includes additional information (such as node name).
- $ kubectl get pods -o wide
- // List the replication controller with the specified name in plain-text output format. Tip: You can shorten and replace the 'replicationcontroller' resource type with the alias 'rc'.
- $ kubectl get replicationcontroller <rc-name>
- // List all replication controllers and services together in plain-text output format.
- $ kubectl get rc,services
kubectl describe - 显示一个或多个资源的详细状态。
- // Display the details of the node with name <node-name>.
- $ kubectl describe nodes <node-name>
- // Display the details of the pod with name <pod-name>.
- $ kubectl describe pods/<pod-name>
- // Display the details of all the pods that are managed by the replication controller named <rc-name>.
- // Remember: Any pods that are created by the replication controller get prefixed with the name of the replication controller.
- $ kubectl describe pods <rc-name>
kubectl delete - 从file、stdin或指定label选择器,names,resource选择器或resources中删除resources资源。
- // Delete a pod using the type and name specified in the pod.yaml file.
- $ kubectl delete -f pod.yaml
- // Delete all the pods and services that have the label name=<label-name>.
- $ kubectl delete pods,services -l name=<label-name>
- // Delete all pods.
- $ kubectl delete pods --all
kubectl exec - 对pod中的容器执行命令。
- // Get output from running 'date' from pod <pod-name>. By default, output is from the first container.
- $ kubectl exec <pod-name> date
- // Get output from running 'date' in container <container-name> of pod <pod-name>.
- $ kubectl exec <pod-name> -c <container-name> date
- // Get an interactive TTY and run /bin/bash from pod <pod-name>. By default, output is from the first container.
- $ kubectl exec -ti <pod-name> /bin/bash
kubectl logs - 打印pod中的容器的日志。
- // Return a snapshot of the logs from pod <pod-name>.
- $ kubectl logs <pod-name>
- // Start streaming the logs from pod <pod-name>. This is similar to the 'tail -f' Linux command.
- $ kubectl logs -f <pod-name>
下一步
开始了解kubectl命令。