kubectl命令与资源管理

API Server是K8S集群的网关,用户和管理员以及其他客户端仅能通过此网关接口与集群进行交互。API是面向程序员的访问接口,目前可较好得支持Golang和Python编程语言,当然,终端用户更为常用的是通用命令行工具kubectl。访问集群之前,各类客户端需要了解集群的位置并拥有访问集群的凭据才能获取访问许可。使用kubeadm进行集群初始化时,kubeadm init自动生成的/etc/kubernetes/admin.conf文件是客户端接入当前集群时使用的kubeconfig文件,它内建了用于访问kubernetes集群的最高管理权限的用户账号及相关的认证凭据,可由kubectl直接使用

资源管理操作概述

资源的管理操作可以简单的归结为增、删、改、查四种,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”选项以递归获取子目录中的配置清单 再者,支持使用标签和注解是K8S系统的一大特色,它为资源管理机制增色不少,而且delete和get等命令能够基于标签挑选目标对象,有些资源甚至必须依赖于标签才能够正常使用和工作,例如Service和Pod控制器等资源对象。子命令label用于管理资源标签,而管理资源注解的子命令是annotate 就地更新(修改)现有的资源也是一种常见的操作。apply命令通过比较在资源清单文件中的版本及前一次的版本执行更新操作,它不会对未定义的属性产生额外的作用。edit命令相当于使用get命令获取资源资源配置,通过交互式编辑器修改后再自动使用apply命令将其应用。patch命令基于json补丁、json合并补丁及策略合并补丁对资源进行就地更新操作 提示:为了利用apply命令的优势,用户应该总是使用apply命令或create —save-config命令创建资源

kubectl的基本用法

kubectl是常用的客户端工具之一,它提供了基于命令行访问kubernetes API的简洁方式,能够满足对K8S的绝大部分的操作需求。例如,需要创建资源对象时,kubectl会将json格式的清单以内容为POST方式提交至API Server kubectl是K8S系统的命令行客户端工具,特性丰富且功能强大,是K8S管理员最常用的集群管理工具。其最基本的语法格式为kubectl [command] [TYPE] [NAME] [flags],其中各部分的简要说明如下

  • command: 对资源执行相应操作的子命令,如,get、delete、create、run等
  • TYPE: 要操作的对象类型,如,Pod、Service等,类型名称区分大小写,也支持简写格式
  • NAME:要操作的对象的名称,区分大小写,如果省略,则表示指定TYPE的所有对象类型。另外也可以使用”TYPE/NAME”的格式表示资源对象
  • flags:命令选项,如,“-s”或“—server”;另外,get命令在输出时还有一个常用的表示“-o”用于指定输出格式
  • kubectl常用子命令列表
  • 基础命令类型:
  • create:通过文件或者命令行创建资源对象
  • expose:基于RC、service、deployment或Pod创建Service资源,意思就是将已经存在的一个对象资源暴漏为一个新的Service
  • run:基于一个镜像在K8S集群上开启一个Deployment
  • set: 设定指定资源的特定属性
  • get: 显示一个或多个资源
  • explain:显示资源文档
  • edit:编辑资源
  • delete:基于文件名,stdin、资源名称、以及资源选择器删除资源
  • 部署命令
  • rollout: 管理资源的滚动更新
  • rolling-update:对RC执行滚动升级
  • scale:伸缩deployment,relicaset、rc或job的规模
  • autoscale:对deployment、replicaset或rc进行自动伸缩
  • 集群管理命令
  • cerificate: 配置数字证书源
  • cluster-info:打印集群信息
  • top:打印资源信息使用率
  • cordon:将指定node设定为不可用状态
  • uncordon:将node设定为可用状态
  • drain:“排干”指定的Node进入维护模式,然后删除Node运行的Pod,但不会删除不由api server管理的Pod
  • taint:为node声名污点及标准行为
  • 排错及调试命令
  • describe:显示指定的资源或资源组的详细信息
  • logs:显示一个Pod内容器的日志
  • attach:附加终端至一个运行中的容器
  • exec:在容器中运行指定命令
  • port-forward:将本地的一个或多个端口转发至指定的Pod
  • proxy:创建能够API Server的代理
  • cp:在容器间复制文件或目录
  • auth:打印授权信息
  • 高级命令
  • apply:基于文件或stdin将配置信息应用于资源
  • patch:使用策略合并补丁更新资源字段
  • replace:基于文件或stdin他替换一个资源
  • convert: 为不同的API版本转换配置文件
  • 设置命令
  • label:更新指定资源的label
  • annotate:更新资源的annotation
  • completion:输出指定的shell的补全码
  • 其他命令
  • version:打印服务端和客户端的版本信息
  • api-server:以“group/version”格式打印服务器支持的api版本信息
  • config:配置kubeconfig文件的内容
  • plugin:运行命令行插件
  • help:打印帮助信息,可以是任一命令
    kubectl命令还包含了多种不同的输出格式,他们为用户提供了非常灵活的自定输出机制
  • kubectl get命令的常用输出格式
  • -o wide: 显示资源的额外信息
  • -o name: 仅打印资源的名称
  • -o yaml: yaml格式输出资源对象信息
  • -o json: json格式输出资源对象信息
  • -o go-template: 以自定义的go模板格式后输出资源对象信息
  • -o custom-columms: 自定义要输出的字段
    此外,k8s命令还有许多通用的选项,这个可以使用kubectl options命令来获取
  • -s或—server:指定API Server的地址和端口
  • —kubeconfig:使用的kubeconfig文件路径,默认为~/.kube/config
  • —namespace:命令执行的目标名称空间