kubectl命令行工具
资源对象类型及缩写
资源对象类型 |
缩写 |
clusters |
|
componentstatuses |
cs |
configmaps |
cm |
daemonsets |
ds |
deployments |
deploy |
endpoints |
ep |
events |
ev |
horizontalpodautoscalers |
hpa |
ingresses |
ing |
Jobs |
|
limitranges |
limits |
nodes |
no |
namespaces |
ns |
networkpolicies |
|
statefulsets |
|
persistentvolumeclaims |
pvc |
persistentvolumes |
pv |
pods |
po |
podsecuritypolicies |
psp |
podtemplates |
|
replicasets |
rs |
replicationcontrollers |
rc |
resourcequotas |
quota |
cronjob |
|
secrets |
|
serviceaccounts |
|
services |
svc |
storageclasses |
sc |
thirdpartyresources |
|
# get
kubectl get pods [pod_name]
kubectl get pod [pod_name]
kubectl get po [pod_name]
# 获取多个
kubectl get pods [pod_name1] [pod_name2]
# 获取多种对象信息
kubectl get pod/pod1 rc/rc1
# 同时应用多个YAML文件,以file为示例
kubectl get pod -f pod1.yaml -f pod2.yaml
kubectl create pod -f pod1.yaml -f rc1.yaml -f service1.yml
kubectl子命令
子命令 |
语法 |
描述 |
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] |
附加到正在运行的容器,查看输出流或与容器(stdin)交互 |
autoscale |
kubectl autoscale (-f FILENAME |TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [flags] |
自动伸缩由副本控制器管理的一组 pod |
cluster-info |
kubectl cluster-info [flags] |
显示有关集群中主服务器和服务的端口信息 |
config |
kubectl config SUBCOMMAND [flags] |
修改 kubeconfig 文件 |
create |
kubectl create -f FILENAME [flags] |
从文件或 stdin 创建一个或多个资源 |
delete |
kubectl delete (-f FILENAME | TYPE [NAME | /NAME | --all]) [flags] |
从文件、标准输入或指定标签选择器、名称、资源选择器或资源中删除资源 |
describe |
kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | /NAME| -l label]) [flags] |
显示一个或多个资源的详细状态 |
diff |
kubectl diff -f FILENAME [flags] |
将 live 配置和文件或标准输入做对比 |
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 [--recursive=false] [flags] |
获取多种资源的文档。例如 pod, node, service 等 |
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] |
将副本控制器、服务或 pod 作为新的 Kubernetes 服务暴露 |
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] |
添加或更新一个或多个资源的标签 |
logs |
kubectl logs POD [-c CONTAINER] [--follow] [flags] |
在 pod 中打印容器的日志 |
patch |
kubectl patch (-f FILENAME | TYPE NAME | TYPE/NAME) --patch PATCH [flags] |
使用策略合并 patch 程序更新资源的一个或多个字段 |
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 |
从文件或标准输入中替换资源 |
rolling-update |
kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [flags] |
通过逐步替换指定的副本控制器及其 pod 来执行滚动更新 |
run |
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--dry-run=server | client | none] [--overrides=inline-json] [flags] |
在集群上运行指定的镜像 |
scale |
kubectl scale (-f FILENAME | TYPE NAME | TYPE/NAME) --replicas=COUNT [--resource-version=version] [--current-replicas=count] [flags] |
更新指定副本控制器的大小 |
stop |
kubectl stop |
不推荐:相反,请参阅 kubectl delete |
version |
kubectl version [--client] [flags] |
显示运行在客户端和服务器上的 Kubernetes 版本 |
示例
- 创建资源对象
# 根据YAML配置文件一次向创建RC和Service
kubectl apply -f service.yaml -f rc.yaml
# 根据目录下所有.yaml .yml .json文件的定义进行创建
kubectl apply -f
- 查看资源对象
# 以纯文本输出格式列出所有 pod。
kubectl get pods
# 以纯文本输出格式列出所有 pod,并包含附加信息(如节点名)。
kubectl get pods -o wide
# 以纯文本输出格式列出具有指定名称的副本控制器。提示:您可以使用别名 'rc' 缩短和替换 'replicationcontroller' 资源类型。
kubectl get replicationcontroller
# 以纯文本输出格式列出所有副本控制器和服务。
kubectl get rc,services
# 以纯文本输出格式列出所有守护程序集,包括未初始化的守护程序集。
kubectl get ds --include-uninitialized
# 列出在节点 server01 上运行的所有 pod
kubectl get pods --field-selector=spec.nodeName=server01
- 描述资源对象
# 显示名称为 的节点的详细信息。
kubectl describe nodes
# 显示名为 的 pod 的详细信息。
kubectl describe pods/
# 显示由名为 的副本控制器管理的所有 pod 的详细信息。
# 记住:副本控制器创建的任何 pod 都以复制控制器的名称为前缀。
kubectl describe pods
# 描述所有的 pod,不包括未初始化的 pod
kubectl describe pods --include-uninitialized=false
- 删除资源对象
# 使用 pod.yaml 文件中指定的类型和名称删除 pod。
kubectl delete -f pod.yaml
# 删除标签名= 的所有 pod 和服务。
kubectl delete pods,services -l name=
# 删除所有具有标签名称= 的 pod 和服务,包括未初始化的那些。
kubectl delete pods,services -l name= --include-uninitialized
# 删除所有 pod,包括未初始化的 pod。
kubectl delete pods --all
- 执行容器命令
# 从 pod 中获取运行 'date' 的输出。默认情况下,输出来自第一个容器。
kubectl exec date
# 运行输出 'date' 获取在容器的 中 pod 的输出。
kubectl exec -c date
# 获取一个交互 TTY 并运行 /bin/bash 。默认情况下,输出来自第一个容器。
kubectl exec -ti /bin/bash
- 查看容器日志
# 从 pod 返回日志快照。
kubectl logs
# 从 pod 开始流式传输日志。这类似于 'tail -f' Linux 命令。
kubectl logs -f
- 创建或更新资源对象
kubectl apply -f service.yaml
- 在线编辑运行中的资源对象
# 通过YANL格式展示该对象的定义和状态
kubectl edit deploy nginx
- 将Pod的开放端口映射到本地
# 将集群上Pod的80端口映射到本地的8888端口,访问127.0.0.1:8888就可以访问到容器提供的服务
kubectl port-forward --address 0.0.0.0 pod/mypod 8888:80
- 在Pod和本地之间复制文件
# 将Pod上的/tmp/foo复制到本地/tmp/bar
kubectl cp /:/tmp/foo /tmp/bar
- 资源对象的标签设置
# 为pods foo设置unhealthy=true标签
kubectl label pods foo unhealthy=true
# 为default namespaces设置testing=true标签
kubectl label namespaces default testing=true
- 检查可用的API资源类型列表
# 列出所有资源对象类型
kubectl api-resources
[root@k8s-master01 .kube]# kubectl api-resources
NAME SHORTNAMES APIGROUP NAMESPACED KIND
bindings true Binding
componentstatuses cs false ComponentStatus
configmaps cm true ConfigMap
endpoints ep true Endpoints
events ev true Event
limitranges limits true LimitRange
namespaces ns false Namespace
nodes no false Node
persistentvolumeclaims pvc true PersistentVolumeClaim
persistentvolumes pv false PersistentVolume
pods po true Pod
podtemplates true PodTemplate
- 使用命令行插件
# 用任何语言创建一个简单的插件,并为生成的可执行文件命名
# 以前缀 "kubectl-" 开始
cat ./kubectl-hello
#!/bin/bash
# 这个插件打印单词 "hello world"
echo "hello world"
# 我们的插件写好了,让我们把它变成可执行的
sudo chmod +x ./kubectl-hello
# 并将其移动到路径中的某个位置
sudo mv ./kubectl-hello /usr/local/bin
# 创建并"安装"了一个 kubectl 插件。
# 使用插件,从 kubectl 调用它,就像是一个常规命令
kubectl hello
# "卸载"一个插件,只需从路径中删除它
sudo rm /usr/local/bin/kubectl-hello
# 查看所有插件
kubectl plugin list
kubectl参数列表
参数名和取值示例 |
说明 |
--alsologtostderr=false |
设置为true,表示将日志输出到文件的同时输出到stderr |
--as='' |
以指定用户的身份执行操作 |
--certificate-authority='' |
用于CA授权的cert文件路径 |
--client-certificate='' |
用于TLS使用的客户端证书路径 |
--client-key='' |
用于TLS使用的客户端密钥文件路径 |
--cluster='' |
设置要使用的 kubeconfig中的cluster名称 |
--context='' |
设置要使用的 kubeconfig中的context名称 |
--insecure-skip-tls-verify=false |
设置为 true,表示跳过TSL安全验证.导致HTTPS 连接不安全 |
--kubeconfig='' |
kubeconfig配置文件的路径,在配置文件中包括Master地址信息及必要的认证信息 |
--log-backtrace-at=:0 |
当日志机制运行到指定文件的指定行(file:行号)时,打印一次stack trace |
--log-dir='' |
日志文件路径 |
--log-flush-frequency=5s |
设置刷新日志文件的时间间隔 |
--logtostderr=true |
表示将日志输出到 stderr,不输出到日志文件 |
--match-server-version=false |
设置true,表示要求客户端版本和服务端版本相匹配 |
--namespace='' |
设置本次操作所在的namespace |
--password='' |
API 服务器进行基本身份验证的密码 |
-s, --server='' |
Kubernetes API 服务器的地址和端口,默认值为localhost:8080 |
--stderrthreshold=2 |
等于或高于此阈值的日志将输出到标准错误输出(stderr) |
--token='' |
用于对 API 服务器进行身份认证的持有者令牌 |
--user='' |
指定使用 kubeconfig 配置文件中的用户名 |
--username='' |
用于 API 服务器的基本身份验证的用户名 |
--v=0 |
glog日志级别 |
--vmodule= |
glog基于模块的详细日志级别 |
kubectl输出格式
输出格式 |
说明 |
-o=custom-columns= |
根据自定义列名进行输出,以逗号分隔 |
-o=custom-colimns-file= |
从文件中获取自定义列名进行输出 |
-o=json |
以JSON格式显示结果 |
-o=jsonpath= |
输出jsonpath表达式定义的字段信息 |
-o=jsonpath-file= |
输出jsonpath表达式定义的字段信息,来源于文件 |
-o=name |
仅输出资源对象的名称 |
-o=wide |
输出额外信息。对于Pod,将输出Pod所在的Node名 |
-o=yaml |
以yaml格式显示结果 |
示例
# 将单个pod的详细信息输出为YAML格式的对象
kubectl get pod web-pod-13je7 -o yaml
# 显示pod的更多信息
kubectl get pod web-pod-13je7 -o wide
# 自定义列名显示Pod信息
# 要定义自定义列并仅将所需的详细信息输出到表中,可以使用custom-columns选项.可以选择内联定义自定义列或使用模板文件:-o=custom-columns=或-o=custom-columns-file=
kubectl get pods -o custom-columns=NAME:.metadata.name,RSRC:.metadata.resourceVersion
# 模板文件
kubectl get pods -o custom-columns-file=template.txt
# template.txt文件内容为
NAME RSRC
metadata.name metadata.resourceVersion
# 输出结果是
NAME RSRC
submit-queue 610995
# 排序列表对象
# 语法
kubectl [command] [TYPE] [NAME] --sort-by=
# 示例
kubectl get pods --sort-by=.metadata.name