购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.7 kubectl命令行工具用法详解

kubectl作为客户端CLI工具,可以让用户通过命令行对Kubernetes集群进行操作。本节对kubectl的子命令和用法进行详细说明。

2.7.1 kubectl用法概述

kubectl命令行的语法如下:

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

(1)command:子命令,用于操作资源对象,例如create、get、describe、delete等。

(2)TYPE:资源对象的类型,区分大小写,能以单数、复数或者简写形式表示。例如以下3种TYPE是等价的。

(3)NAME:资源对象的名称,区分大小写。如果不指定名称,系统则将返回属于TYPE的全部对象的列表,例如运行kubectl get pods命令后将返回所有Pod的列表。

在一个命令行中也可以同时对多个资源对象进行操作,以多个TYPE和NAME的组合表示,示例如下。

◎ 获取多个相同类型资源的信息,以TYPE1 name1 name2 name<#>格式表示:

◎ 获取多种不同类型对象的信息,以TYPE1/name1 TYPE1/name2 TYPE2/name3 TYPE<#>/name<#>格式表示:

◎ 同时应用多个YAML文件,以多个-f file参数表示:

(4)flags:kubectl子命令的可选参数,例如使用-s或--server设置API Server的URL地址,而不使用默认值。

2.7.2 kubectl子命令详解

kubectl的子命令非常丰富,涵盖了对Kubernetes集群的主要操作,包括资源对象的创建、删除、查看、修改、配置、运行等。详细的子命令如表2.5所示。

表2.5 kubectl子命令详解

续表

续表

2.7.3 kubectl可操作的资源对象详解

kubectl可操作的资源对象列表如表2.6所示,可以通过kubectl api-resources命令进行查看。

表2.6 kubectl可操作的资源对象类型及其缩写

续表

续表

2.7.4 kubectl的公共参数说明

kubectl的公共参数如表2.7所示。

表2.7 kubectl的公共参数

续表

每个子命令(如create、delete、get等)还有其特定的命令行参数,可以通过$ kubectl [command]--help命令进行查看。

2.7.5 kubectl格式化输出

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

根据不同子命令的输出结果,可选的输出格式如表2.8所示。

表2.8 kubectl命令的可选输出格式列表

常用的输出格式示例如下。

(1)显示Pod的更多信息,例如Node IP等:

(2)以YAML格式显示Pod的详细信息:

(3)以自定义列名显示Pod的信息:

(4)基于自定义列名配置文件进行输出:

template.txt文件的内容如下:

输出结果为如下:

(5)关闭服务端列名。在默认情况下,Kubernetes服务端会将资源对象的某些特定信息显示为列,这可以通过设置--server-print=false参数进行关闭,例如:

输出结果:

(6)将输出结果按某个字段排序。可以通过--sort-by参数以jsonpath表达式进行指定:

例如,按照资源对象的名称进行排序:

2.7.6 kubectl常用操作示例

本节对一些常用的kubectl操作示例进行说明。

1.kubectl apply(以文件或stdin部署或更新一个或多个资源)

基于example-service.yaml中的定义创建一个Service资源:

使用example-controller.yaml中的定义创建一个Replication Controller资源:

使用<directory>目录下所有.yaml、.yml和.json文件中的定义进行创建:

2.kubectl get(列出一个或多个资源对象的信息)

以文本格式列出所有Pod:

以文本格式列出所有Pod,包含附加信息(如Node IP):

以文本格式列出指定名称的RC:

以文本格式列出所有RC和Service:

以文本格式列出所有Daemonset,包括未初始化的Daemonset:

列出在节点server01上运行的所有Pod:

3.kubectl describe(显示一个或多个资源的详细信息)

显示名称为<node-name>的节点的详细信息:

显示名称为<pod-name>的Pod的详细信息:

显示名称为<rc-name>的RC控制器管理的所有Pod的详细信息:

描述所有Pod的详细信息:

对kubectl get和kubectl describe命令说明如下。

◎ kubectl get命令常用于查看同一资源类型的一个或多个资源对象,可以使用-o或--output参数自定义输出格式,还可以通过-w或--watch参数开启对资源对象更新的监控。

◎ kubectl describe命令更侧重于描述指定资源的各方面详细信息,通过对API Server的多个API调用来构建结果视图。例如通过kubectl describe node命令不仅会返回节点信息,还会返回在其上运行的Pod的摘要、节点事件等信息。

4.kubectl delete

该命令可以使用文件、stdin的输入删除指定的资源对象,还可以通过标签选择器、名称、资源选择器等条件来限定待删除的资源范围。

使用在pod.yaml文件中指定的类型和名称删除Pod:

删除所有带有'<label-key>=<label-value>'标签的Pod和Service:

删除所有Pod,包括未初始化的Pod:

5.kubectl exec(在Pod的容器中运行命令)

在名称为<pod-name>的Pod的第1个容器中运行date命令并打印输出结果:

在指定的容器中运行date命令并打印输出结果:

在Pod的第1个容器中运行/bin/bash命令进入交互式TTY终端界面:

6.kubectl logs(打印Pod中容器的日志)

显示Pod中名称为<container-name>的容器输出到stdout的日志:

持续监控显示Pod中的第1个容器输出到stdout的日志,类似于tail-f命令的功能:

7.在线编辑运行中的资源对象

可以使用kubectl edit命令编辑运行中的资源对象,例如使用下面的命令编辑运行中的一个Deployment:

在命令运行之后,会通过YAML格式展示该对象的文本格式定义,用户可以对代码进行编辑和保存,从而完成对在线资源的直接修改。

8.将Pod的端口号映射到宿主机

将Pod的80端口映射到宿主机的8888端口,客户端即可通过http://<NodeIP>:8888访问容器服务了:

9.在容器和Node之间复制文件

把Pod(默认为第1个容器)中的/etc/fstab文件复制到宿主机的/tmp目录下:

10.设置资源对象的标签

为名为“default”的命名空间设置“testing=true”标签:

11.创建和使用命令行插件

为了扩展kubectl的功能,Kubernetes从1.8版本开始引入插件机制,在1.14版本时达到稳定版。

用户自定义插件的可执行文件名需要以“kubectl-”开头,复制到$PATH中的某个目录(如/usr/local/bin)下,然后就可以通过kubectl <plugin-name>运行自定义插件了。

例如,通过Shell脚本实现一个名为hello的插件,其功能为在屏幕上输出字符串“hello world”。创建名为“kubectl-hello”的Shell脚本文件,内容如下:

为该脚本添加可执行权限:

复制kubectl-hello文件到/usr/local/bin/目录下,就完成了安装插件的工作:

然后在kubectl命令后带上插件名称就能使用该插件了:

卸载插件也很简单,只需要删除插件文件即可:

通过插件机制,可以将某些复杂的kubectl命令简化为运行插件的方式。例如想创建一个命令来查看当前上下文环境(context)中的用户名,则可以通过kubectl config view命令进行查看。为此,可以创建一个名为“kubectl-whoami”的Shell脚本,内容如下:

为该脚本添加可执行权限,并复制到/usr/local/bin/目录下完成插件的安装:

运行kubectl whoami命令,就能通过插件功能查看上下文环境中的用户名了:

另外,使用kubectl plugin list命令可以查看当前系统中已安装的插件列表: zwYacYCVxSGVaMFNQ8hLaMUB4N7Xjh6bhCceVOz+r71GowMcqp1VhWAjCVc72oiu

点击中间区域
呼出菜单
上一章
目录
下一章
×