3.3 kubectl命令与资源管理
API Server是Kubernetes集群的网关,用户和管理员以及其他客户端仅能通过此网关接口与集群进行交互。API是面向程序员的访问接口,目前可较好地支持Golang和Python编程语言,当然,终端用户更为常用的是通用命令行工具kubectl。访问集群之前,各类客户端需要了解集群的位置并拥有访问集群的凭据才能获取访问许可。使用kubeadm进行集群初始化时,kubeadm init自动生成的/etc/kubernetes/admin.conf文件是客户端接入当前集群时使用的kubeconfig文件,它内建了用于访问Kubernetes集群的最高管理权限的用户账号及相关的认证凭据,可由kubectl直接使用。
3.3.1 资源管理操作概述
资源的管理操作可简单归结为增、删、改、查四种,kubectl提供了一系列的子命令用于执行此类任务,如create、delete、patch、apply、replace、edit、get等,其中有些命令必须基于资源清单来进行,如apply和replace命令,也有些命令既可基于清单文件进行,也可实时作用于活动资源之上,如create、get、patch和delete等。
kubectl命令能够读取任何以.yaml、.yml或.json为后缀的文件(可称为配置清单或配置文件,后文将不加区别地使用这两个术语)。实践中,用户既可以为每个资源使用专用的清单文件,也可以将多个相关的资源(例如,属于同一个应用或微服务)组织在同一个清单文件中。不过,如果是YAML格式的清单文件,多个资源彼此之间要使用“---”符号作为单独的一行进行资源分割。这样,多个资源就将以清单文件中定义的次序被create、apply等子命令调用。
kubectl的多数子命令支持使用“-f”选项指定使用的清单文件路径或URL,也可以是存储有清单文件的目录,另外,此选项在同一命令中也可重复使用多次。如果指定的目录路径存在子目录中时,那么可按需同时使用“-R”选项以递归获取子目录中的配置清单。
再者,支持使用标签和注解是Kubernetes系统的一大特色,它为资源管理机制增色不少,而且delete和get等命令能够基于标签挑选目标对象,有些资源甚至必须依赖于标签才能正常使用和工作,例如Service和Pod控制器Deployment等资源对象。子命令label用于管理资源标签,而管理资源注解的子命令则是annotate。
就地更新(修改)现有的资源也是一种常见的操作。apply命令通过比较资源在清单文件中的版本及前一次的版本执行更新操作,它不会对未定义的属性产生额外的作用。edit命令相当于先使用get命令获取资源配置,通过交互式编辑器修改后再自动使用apply命令将其应用。patch命令基于JSON补丁、JSON合并补丁及策略合并补丁对资源进行就地更新操作。
提示
为了利用apply命令的优势,用户应该总是使用apply命令或create --save-config命令创建资源。
3.3.2 kubectl的基本用法
kubectl是最常用的客户端工具之一,它提供了基于命令行访问Kubernetes API的简洁方式,能够满足对Kubernetes的绝大部分的操作需求。例如,需要创建资源对象时,kubectl会将JSON格式的清单内容以POST方式提交至API Server。本节主要描述kubectl的基本功能。
提示
如果要单独部署kubectl, Kubernetes也提供了相应的单独发行包,或者适配于各平台的程序管理器的相关程序包,如rpm包或deb包等,用户根据平台类型的不同获取相匹配的版本安装完成即可,操作步骤类似于前面的安装方法,因此这里不再给出其具体过程。
kubectl是Kubernetes系统的命令行客户端工具,特性丰富且功能强大,是Kubernetes管理员最常用的集群管理工具。其最基本的语法格式为“kubectl [command] [TYPE] [NAME][flags]”,其中各部分的简要说明如下。
1)command:对资源执行相应操作的子命令,如get、create、delete、run等;常用的核心子命令如表3-1所示。
表3-1 kubectl的子命令列表
2)TYPE:要操作的资源对象的类型,如pods、services等;类型名称区分字符大小写,但支持使用简写格式。
3)NAME:对象名称,区分字符大小写;省略时,则表示指定TYPE的所有资源对象;另外,也可以直接使用“TYPE/NAME”的格式来表示资源对象。
4)flags:命令行选项,如“-s”或“--server”;另外,get等命令在输出时还有一个常用的标志“-o <format>”用于指定输出格式,如表3-1所示。
kubectl命令还包含了多种不同的输出格式(如表3-2所示),它们为用户提供了非常灵活的自定义输出机制,如输出为YAML或JSON格式等。
表3-2 kubectl get命令的常用输出格式
此外,kubectl命令还有许多通用的选项,这个可以使用“kubectl options”命令来获取。下面列举几个比较常用命令。
□-s或--server:指定API Server的地址和端口。
□--kubeconfig:使用的kubeconfig文件路径,默认为~/.kube/config。
□--namespace:命令执行的目标名称空间。
kubectl的部分子命令在第2章已经多次提到,余下的大多数命令在后续的章节中还会用到,对于它们的使用说明也将在首次用到时进行展开说明。