Kubernetes kubectl 概述

kubectl用于运行Kubernetes集群命令的管理工具。本文概述涵盖了kubectl语法,对命令操作的描述,并列举的常见例子。有关每个命令的详细信息,包括支持的所有flags和子命令。

语法

在管理工具界面使用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

使用以下部分来了解如何格式化或对某些命令的输出进行排序。关于哪些命令支持什么输出选项。

格式化输出 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>