kubectl作为客户端CLI工具,可以让用户通过命令行的方式对Kubernetes集群进行操作。本节对kubectl的子命令和用法进行详细说明。
2.2.1 kubectl用法概述
kubectl命令行的语法如下:
$ kubectl [command] [TYPE] [NAME] [flags]
其中,command、TYPE、NAME、flags的含义如下。
- (1)command:子命令,用于操作Kubernetes集群资源对象的命令,例如create、delete、describe、get、apply等。
- (2)TYPE:资源对象的类型,区分大小写,能以单数形式、复数形式或者简写形式表示。例如以下3种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可操作的资源对象类型如表2.9所示。
<center>表 2.9 kubectl可操作的资源对象类型</center>
资源对象的名称 | 缩写 |
---|---|
cluster | |
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 |
podtemplate | |
replicasets | rs |
replicationcontrollers | rc |
resourcequotas | quota |
cronjob | |
secrets | |
serviceaccounts | |
services | svc |
storageclasses | sc |
thirdpartyresources |
在一个命令行中也可以同时对多个资源对象进行操作,以多个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
2.2.4 kubectl输出格式
kubectl 命令可以用多种格式对结果进行显示,输出的格式通过-o参数指定:
$ kubectl [command] [TYPE] [NAME] -o=<output_format>
根据不同子命令的输出结果,可选的输出格式如表2.12所示。
输出格式 | 说明 |
---|---|
-o=custom-columns=<spec> | 根据自定义列名进行输出,以逗号分隔 |
-o=custom-colimns-file=<filename> | 从文件中获取自定义列名进行输出 |
-o=json | 以JSON格式显示结果 |
-o=jsonpath=<template> | 输出jsonpath表达式定义的字段信息 |
-o=jsonpath-file=<filename> | 输出jsonpath表达式定义的字段信息,来源于文件 |
-o=name | 仅输出资源对象的名称 |
-o=wide | 输出额外信息。对于Pod,将输出Pod所在的Node名 |
-o=yaml | 以yaml格式显示结果 |
常用的输出格式示例如下。
(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
输出结果
$ kubectl get pods chaosfomoney-deployment-64ccd59bdc-h72gh -o=custom-columns-file=template.txt
NAME RSRC
chaosfomoney-deployment-64ccd59bdc-h72gh 101119
另外,还可以将输出结果按某个字段排序,通过--sort-by参数以jsonpath表达式进行指定:
$ kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
例如,按照名字进行排序:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
chaosfomoney-deployment-64ccd59bdc-h72gh 1/1 Running 0 1d
chaosfomoney-deployment-64ccd59bdc-spnpj 1/1 Running 0 1d
chaosfomoney-deployment-64ccd59bdc-xhnjr 1/1 Running 0 1d
$ kubectl get pods --sort-by=.metadata.name
NAME READY STATUS RESTARTS AGE
chaosfomoney-deployment-64ccd59bdc-h72gh 1/1 Running 0 1d
chaosfomoney-deployment-64ccd59bdc-spnpj 1/1 Running 0 1d
chaosfomoney-deployment-64ccd59bdc-xhnjr 1/1 Running 0 1d
2.2.5 kubectl操作示例
本节将一些常用的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 pod,service -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 -ti <pod-name> -c <container-name> /bin/bash
查看容器的日志
查看容器输出到stdout的日志:
$ kubectl logs <pod-name>
跟踪查看容器的日志,相当于tail -f命令的结果:
$ kubectl logs -f <pod-name> -c <container-name>