Kubernetes容器编排技术---kubectl命令行工具用法详解(三)
kubectl命令行工具用法详解
kubect用法概述
kubectl命令行的语法如下:
$ kubectl [command] [TYPE] [NAME] [flags]
- command:子命令,用于操作Kubernetes集群资源对象的命令,例如create、delete、describe、get、apply等。
- TYPE:资源对象的类型,区分大小写,能以单数形式、负数形式或者简写形式表示。
- NAME: 资源对象的名称,区分大小写。如果不指定名称,则系统将返回属于TYPE的全部对象的列表。
- flags:kubectl子命令的可选参数
可以通过命令查看可操作的资源类型
通过如下命令查看可操作性资源类型 # kubectl api-resources 通过如下命令查看可操作性资源的具体用法 # kubectl explain <资源名称>
资源对象的名称 | 缩写 |
componentstatuses |
cs |
daemonsets | ds |
deployments | |
events | ev |
endpoints | ep |
horizontalpodautoscalers | hpa |
ingresses | ing |
jobs | |
limitranges | limits |
nodes | no |
namespaces | ns |
pods | po |
persistentvolumes | pv |
persistentvolumeclaims | pvc |
resourcequotas | quota |
replicationcontrollers | rc |
secrets | |
serviceaccounts | |
services | svc |
kubectl参数列表
kubectl的子命令非常丰富,涵盖了对Kubernetes集群的主要操作,包括资源对象的创建、删除、查看、修改、配置、运行等。
子命令 | 语法 | 说明 |
annotate | kubectl annotate [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version] [options] |
添加或更新资源对象的annotation信息 |
api-versions | kubectl api-versions [flags] [options] | 列出当前系统支持的API版本列表,格式为“group/version” |
apply | kubectl apply (-f FILENAME | -k DIRECTORY) [options] | 从配置文件或stdin中对资源对象进行配置更新 |
attach | kubectl apply (-f FILENAME | -k DIRECTORY) [options] | 附着到一个正在运行的容器 |
atuoscale | kubectl autoscale (-f FILENAME | TYPE NAME | TYPE/NAME) [--min=MINPODS] --max=MAXPODS [--cpu-percent=CPU] [options] | 对Deployment、ReplicaSet或ReplicationController进行水平自动扩缩容的设置 |
cluster-info | kubectl cluster-info [flags] [options] | 显示集群信息 |
completion | kubectl completion SHELL [options] | 输出shell命令的执行结果码(bash或zsh) |
config | kubectl config SUBCOMMAND [options] | 修改kubeconfig文件 |
convert | kubectl convert -f FILENAME [options] | 转换配置文件为不同的API版本 |
cordon | kubectl cordon NODE [options] | 将Node标记为unschedulable,即“隔离”出集群调度范围 |
delete | kubectl delete ([-f FILENAME] | [-k DIRECTORY] | TYPE [(NAME | -l label | --all)]) [options] | 根据配置文件、stdin、资源名称或label selector删除资源对象 |
describe | kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) [options] | 描述一个或多个资源对象的详细信息 |
drain | kubectl drain NODE [options] | 首先将Node设置为unschedulable,然后删除该Node上运行的所有Pod,但不会删除不由apiserver管理的Pod |
edit | kubectl edit (RESOURCE/NAME | -f FILENAME) [options] | 编辑资源对象的属性,在线更新 |
exec | kubectl exec (POD | TYPE/NAME) [-c CONTAINER] [flags] -- COMMAND [args...] [options] | 执行一个容器中的命令 |
explain | kubectl explain RESOURCE [options] | 对资源对象属性的详细说明 |
expose | kubectl expose (-f FILENAME | TYPE NAME) [--port=port] [--protocol=TCP|UDP|SCTP] [--target-port=number-or-name] [--name=name] [--external-ip=external-ip-of-service] [--type=type] [options] |
将已经存在的一个RC、Service、Deployment或Pod暴露为一个新的Service |
get | kubectl get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file=...|jsonpath=...|jsonpath-file=...] (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME ...) [flags] [options] |
显示一个或多个资源对象的概要信息 |
label | kubectl label [--overwrite] (-f FILENAME | TYPE NAME) KEY_1=VAL_1 ... KEY_N=VAL_N [--resource-version=version] [options] |
设置或更新资源对象的labels |
logs | kubectl logs [-f] [-p] (POD | TYPE/NAME) [-c CONTAINER] [options] | 屏幕打印 |
namespace | 已被kubectl config set-context替代 | |
patch | kubectl patch (-f FILENAME | TYPE NAME) -p PATCH [options] | 以merge形式对资源对象的部分字段的值进行修改 |
port-forward | kubectl port-forward TYPE/NAME [options] [LOCAL_PORT:]REMOTE_PORT [...[LOCAL_PORT_N:]REMOTE_PORT_N] | 将本机的某个端口号映射到Pod端口号,通常用于测试工作 |
proxy | kubectl proxy [--port=PORT] [--www=static-dir] [--www-prefix=prefix] [--api-prefix=prefix] [options] | 将本机某个端口号映射到apiserver |
replace | kubectl replace -f FILENAME [options] | 从配置文件或stdin替换资源对象 |
rolling-update | kubectl rolling-update OLD_CONTROLLER_NAME ([NEW_CONTROLLER_NAME] --image=NEW_CONTAINER_IMAGE | -f NEW_CONTROLLER_SPEC) [options] |
对RC进行滚动升级 |
rollout | kubectl rollout SUBCOMMAND [options] | 对Deployment进行管理,可用操作包括:history、pause、resume、undo、status |
run | kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options] |
基于一个镜在Kubernetes集群上启动一个Deployment |
scale | kubectl scale [--resource-version=version] [--current-replicas=count] --replicas=COUNT (-f FILENAME | TYPE NAME) [options] |
扩容、缩容一个Deployment、ReplicaSet、RC或Job中Pod的数量 |
set | kubectl set SUBCOMMAND [options] | 设置资源对象的某个特定信息,目前仅支持修改容器的镜像 |
taint | kubectl taint NODE NAME KEY_1=VAL_1:TAINT_EFFECT_1 ... KEY_N=VAL_N:TAINT_EFFECT_N [options] | 设置Node的taint信息,用于将特定的Pod调度到特定的Node的操作,为Alpha版本功能 |
uncordon | kubectl uncordon NODE [options] | 将Node设置为schedulable |
version | kubectl version [flags] [options] | 打印系统版本信息 |
kubectl输出格式
常用的输出格式示例如下:
显示pod的更多信息
# kubectl get pod <pod-name> -o wide
以yaml格式显示pod的详细信息
# kubectl get pod <pod-name> -o yaml
另外,还可以将输出结果按某个字段排序,通过--strt-by参数以jsonpath表达式进行指定:
# kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
例如:按照名字进行排序
# kubectl get pods --sort-by=.metadata.name
kubectl操作示例
1. 创建资源对象
根据yaml配置文件一次性创建service和rc
# kubectl create -f my-service.yaml -f my-rc.yaml
根据<directory>目录下所有.yaml、.yml、.json文件的定义进行创建操作
# kubectl create -f <directory>
2.查看资源对象
查看所有pod列表
# kubectl get pods
查看rc和service列表
# kubectl get rc,service
3. 描述资源对象
显示Node的详细信息
# kubectl describe nodes <node-name>
显示Pod的详细信息
# kubectl describe pods/<pod-name>
显示有RC管理的Pod的信息
# kubectl describe pods <rc-name>
4.删除资源对象
基于pod.yaml定义的名称删除Pod:
# kubectl delete -f pod.yaml
删除所有包含某个label的Pod和service
# kubectl delete pods,services -l name=<label-name>
删除所有Pod
# kubectl delete pods --all
5.执行容器的命令
执行Pod的date命令,默认使用Pod中的第1个容器执行
# kubectl exec <pod-name> date
指定Pod中某个容器执行date命令
# kubectl exec <pod-name> -c <container-name> date
通过bash获得Pod中某个容器的TTY,相当于登录容器
# kubectl exec -it <pod-name> -c <container-name> /bin/bash
6.查看容器的日志
查看容器输出到stdout的日志
# kubectl logs <pod-name>
跟踪查看容器的日志,相当于tail -f命令的结果
# kubectl logs -f <pod-name> -c <container-name>
不积跬步,无以至千里;不积小流,无以成江海。