简介:kubectl 作为客户端CLI工具,可以让用户通过命令行的方式对Kubernetes集群进行操作,
1.1 kubectl 用法
kubectl命令行语法:
kubectl [command] [TYPE] [NAME] [flags]
其中,command,TYPE,NAME,flags含义如下。
(1)command: 子命令,用于操作kubernetes集群资源对象的命令,如create,delete,describe,get,apply等
(2)TYPE:资源对象的类型,区分大小写,能以单数形式,复数形式或简写形式表示,
kubectl 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 可操作的资源对象如下
在一个命令行中也可以同时对多个资源对象进行操作,以多个TYPE和NAME的组合表示
获取多个pod的信息
kubectl get pods pod1 pod2
获取多种对象的信息:
kubectl get pod/pod1 rc/rc1
同时应用多个yaml文件,以多个-f file 参数表示
kubectl get pod -f pod1.yaml -f pod2.yaml
kubectl create -f pod1.yaml -f rc1.yaml -f service1.yaml
1.2 kubectl 子命令
kubectl的子命令非常丰富,涵盖了对kubernetes集群的主要操作,包括资源对象的创建,删除,查看,修改,配置,运行等
1.3 kubectl 参数列表
kubectl 命令行的公共启动参数
每个子命令(如create,delete,get等)还有特定的flags参数,可以通过$kubectl [command] --help命令进行查看
1.4 kubectl 输出格式
kubectl 命令可以使用多种格式对结果进行显示,输出的格式通过-o参数指定
kubectl [command] [TYPE] [NAME] -o=<output_format>
常用的输出格式示例如下。
(1)显示Pod的更多信息:
kubectl get pod <pod-name> -o wide
(2)以yaml格式显示pod的详细信息:
kubectl get pod <pod-name> -o yaml
(3) 以自定义列名显示pod的信息
kubectl get pod <pod-name> -o=custom-columns=NAME:.metadata.name.RSRC:.metadata.resourceVersion
(4) 基于文件的自定义列名输出
kubectl get pods <pod-name> -o=custom-columns-file=template.txt
template.txt 文件内容为:
NAME RSRC
metadata.name metadata.resourceVersion
输出结果为:
NAME RSRC
pod-name 52305
另外,还可以将输出结果按某个字段排序,通过--sort-by参数以jsonpath表达式进行指定:
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
例如,按照名字进行排序:
kubectl get pods --sort-by=.metadata.name
1.5 kubectl 操作示例
(1)创造资源对象
根据yaml配置文件一次性创建service和rc
kubectl create -f my-service.yaml -f my-rc.yaml
根据<directory>目录下所有.yaml,.yml,.json文件
kubectl get rc.service
(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,service -1 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>