# kubectl 概述
kubectl 用于运行 k8s 集群命令的管理工具。本文概述涵盖了 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
来指定 k8s 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 作为一个新的 k8s 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] | 在 k8s 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] | 显示客户端和服务器上运行的 k8s 版本。 |
提示:有关更多命令信息,请参阅 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>