Skip to content

kubectl CLI — Kubernetes

VodkaSoul edited this page Nov 25, 2019 · 1 revision

1. kubectl 用法概述

kubectl 命令行的语法如下:

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

其中,command,TYPE、NAME、flags的含义如下:

  1. command:子命令,用于操作 Kubernetes 集群资源对象的命令,例如 create、delete、describe、get、apply等;

  2. TYPE:资源对象的类型,区分大小写,能以单数形式、复数形式或者简写形式表示。一下三种TYPE等价:

    $ kuebctl get pod pod1
    $ kubectl get pods pod1
    $ kubectl get po pod1
    
  3. NAME:资源对象的名称,区分大小写。如果不指定名称,则系统将返回属于 TYPE 的全部对象的列表,例如 $ kubectl get pods 将返回所有 Pod 的列表;

  4. flags:kubectl 子命令 的可选参数,例如使用”-s“指定 apiserver 的 URL 地址而不用默认值。

kubectl 可操作的资源对象类型如下:

资源对象的名称 缩写
componentstatuses cs
daemonsets ds
deployments
enviroment ev
endpoints ep
horizontalpodautoscalers hpa
ingress ing
jobs
limitranges limits
nodes no
namespaces ns
pods po
persistencevolumes pv
persistencevolumeclaims pvc
resourcequotas quota
replicationcontrollers rc
secrets
serviceaccounts
services svc

2. kubectl 子命令详解

kuenctl 的子命令涵盖了对 Kubernetes 集群的主要操作,包括资源对象的创建、删除、查看、修改、配置、运行等,详细子命令如下:

子命令 语法 说明
annotate kubectl annotate [--overwrite] (-FILENAME | TYPE NAME) KEY_1=VAL_1...KEY_N=VAL_N [--resource-version=version] [flags] 添加或更新资源对象的 annotation 信息
api-versions kubectl versions [flags] 列出当前系统支持的 API 版本列表
apply kubectl apply -f CONTAINER [flags] 从配置文件或 stdin 中对资源对象进行配置更新
attach kubectl attach POD -c CONTAINER [flags] 附着到一个正在运行的容器上
cluster-info kubectl cluster-info [flags] or kubectl cluster-info [command] 显示集群信息
config kubectl config [command] [flags] 修改 kubeconfig 文件
cordon kubectl cordon NODE [flags] 将 Node 标记为 unschedulable,即隔离出集群调度范围
create kubectl create -f FILENAME [flags] or kubectl create [command] 从配置文件或 stdin 中创建资源对象
delete kubectl delete ([-f FILENAME | TYPE | (NAME | -l label | --all)]) [flags] 根据配置文件、stdin、资源名称或label selector 删除资源对象
describe kubectl delete ([-f FILENAME | TYPE [NAME_PREFIX | /NAME | -l label]) [flags] 描述一个或多个资源对象的详细信息
edit kubectl edit (RESOURCE/NAME | -f FILENAME) [flags] 编辑资源对象的属性,在线更新
exec kubectl exec POD [-c CONTAINER] --COMMAND [args...][flags] 执行一个容器中的命令
explain kubectl explain RESOURCE [flags] 对资源对象属性的详细说明
expose kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UP] [--target-port=number-or-name] [--name=name] [external-ip=external-ip-of-service] [--type=type] [flags] 将已经存在的一个 RC、Service、Deployment 或 Pod 暴露为一个新的 Service
get kubectl get [(-o|--output=)json|yaml|wide|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE [NAME | -l label] | TYPE/NAME ...) [flags] 显示一个或多个资源对象的概要信息
label kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1...KEY_N=VAL_N [--resource-version=version] [flags] 设置或更新资源对象的label
logs kubectl logs [-f] [-p] POD [-c CONTAINER] [flags] 屏幕打印一个容器的日志
proxy kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [flags] 将本机的某个端口映射到 apiserver
run kubectl run NAME --image=image [--env="key=value"] [--port=port] 基于一个镜在 Kubernetes 集群上启动一个 Deployment
scale kubectl scale [--resorce-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME) [flags] 扩容、缩容一个 Deployment、ReplicaSet、RC 或 Job 中的 Pod 的数量
set kubectl set SUBCOMMAND [flags] or kubectl set [command] 设置资源的某个特定信息,支持修改容器镜像
uncordan kubectl uncordon NODE [flags] 将 Node 设置为 scedule
version kubectl version [flags] 打印系统的版本信息

3. kubectl 参数列表

kubectl 命令行的公共启动参数如下图所示:

参数名和取值示例 说明
--alsologtostderr[=false] 设置为 true 表示将日志文件输出到文件的同时输出到 stderr
--as="" 设置本次操作的用户名
--certificate-authority="" 用于 CA 授权的 cat 文件路径
--client-certificate="" 用于 TLS 的客户端证书文件路径
--client-key="" 用于 TLS 的客户端 key 文件路径
--cluster="" 设置要使用的 kubeconfig 中的 cluster 名
--context="" 设置要使用的 kubeconfig 中的 context 名
--insecure-skip-tls-verify[=flase] 设置为 true 表示跳过 TLS 安全验证模式,将使得 HTTPS 链接不安全
--kubeconfig="" kubeconfig 配置文件路径,配置文件包括 Master 地址信息及必要认证信息
--log-backtrace-at=:0 记录日志每到 ”file:行号“ 时打印一次 stack trace
--log-dir="" 日志文件路径
--log-flush-frequency=5s 设置 flush 日志文件的时间间隔
--logtostderr[=true] 设置为 true 表示将日志输出到 stderr,不输出到日志文件
--match=server=version[=false] 设置为 true 表示客户端版本需要与服务端一致
--namespace="" 设置本次操作所在的 namespace
--password="" 设置 apiserver 的 basic authentication 的密码
-s, --server="" 设置 apiserver 的 URL 地址,默认为 localhost:8080
--stderrthreshold=2 在该 threshold 级别之上的日志输出到 stderr
--token="" 设置访问 apiserver 的安全 token
--user="" 指定 kubeconfig 用户名
--username="" 设置 apiserver 的basic authentication 的用户名
--v=0 glog 日志级别
--vmodule= glog 基于模块的详细日志级别

4. kubectl 输出格式

kubectl 命令可以用多种格式对结果进行显示,输出的格式通过 -o 参数指定:

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

根据不同子命令的输出结果,可选的输出格式如下:

输出格式 说明
-o=custom-columns=<spec> 根据自定义列名进行输出,以逗号分隔
-o=custom-columns-file=<flilename> 从文件中获取自定义列名进行输出
-o=json 以 JSON 格式显示结果
-o=jsonpath=<template> 输出 jsonpath 表达式定义的字段信息
-o=jsonpath-file=<filename> 输出 jsonpath 表达式定义的字段信息,来源于文件
-o=name 仅输出资源对象的名称
-o=wide 输出额外信息,对于Pod,将输出 Pod 所造的 Node 名
-o=yaml 以 yaml 格式显示结果