容器编排技术 -- Kubernetes kubectl 概述
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命令。