pod是k8s api中的核心资源类型,它可以定义在json或yaml格式的资源清单中,由资源管理命令进行陈述式或声明式管理。创建时,用户可通过create或apply命令将请求提交到apiserver,并将其保存至集群状态存储系统etcd中,而后由调度器将其调度至最佳目标节点,并被相应节点的kubelet借助于容器引擎创建并启动。这种由用户直接通过api创建的pod对象也称为自助式pod。

一、陈述式对象配置管理方式

陈述式对象配置管理机制是由用户通过配置文件指定要管理的目标资源对象,而后再由用户借助于命令直接指定k8s系统要执行的管理操作的管理方式。常用命令有create、delete、replace、get和describe等。

1、创建pod资源

pod是标准的k8s api资源,在配置清单中使用kind、apiVersion、metadata和spec字段进行定义,status字段在对象创建后由系统自行维护。pod对象的核心功用在于运行容器化应用,在其spec字段中嵌套的必选字段是containers,它的值是一个容器对象列表,支持嵌套创建多个容器。使用kubectl create -f example.yaml 命令创建资源对象,-f选项也支持使用目录路径或URL,而且目标路径为目录时,还支持使用-R选项进行子目录递归。另外,--record选项可以将命令本身记录为目标对象的注解信息,而--save-config则能将提供给命令的资源对象配置信息保存于对象的注解信息中。

2、查看pod状态

get命令默认显示资源对象最为关键的状态信息,而describe命令则能打印出资源对象的详细状态,kubectl get命令既可以使用-o yaml或-o json选项输出资源对象的配置数据及状态,也能借助于--custom-columns选项定义要显示的字段。

3、更新pod资源

对于pod资源对象那些支持修改的属性,比如,容器的images字段,可将其完整的配置清单导出到配置文件中并更新相应的配置数据,而后使用replace命令基于陈述式对象配置的管理机制进行资源对象的更新,更新活动对象的配置时,replace命令要重构整个资源对象,因此,它必须基于完整格式的配置信息才能进行活动对象的完全替换。若要基于此前的配置文件进行替换,必须使用--force选项删除此前的活动对象,而后进行新建操作。如:“kubectl replace -f example.yaml --force”

4、删除pod资源

删除pod资源可用delete命令使用-f选项指定配置清单即可,如:“kubectl delete -f example.yaml”

二、声明式对象配置管理方式

陈述式对象配置清单管理机制中,同时指定的多个资源必须运行同一种操作,而且其replace命令是通过完全替换现有的活动对象来进行资源的更新操作,对于生产环境来说,这并非理想选择。声明式对象配置操作在管理资源对象时将配置信息保存于目标对象的注解中,并通过比较活动对象的当前配置、前一次管理操作时保存于注解中的配置,以及当前命令提供的配置生成更新补丁从而完成活动对象的补丁式更新操作。此类管理操作的命令由apply和patch等。如:“kubectl apply -f example.yaml”

而更新对象的操作,可在直接修改原有资源清单文件后再次对其执行apply命令来完成。此类操作也完全能够使用patch命令直接进行补丁操作。而资源对象的删除操作依然可以使用apply命令,但要同时使用--prune选项,如:“kubectl apply -f example.yaml --prune -l $LABEL”,但是此命令及其凶险,因为它将基于标签选择器过滤出来的对象,并检查由-f指定的目录中是否存在某配置文件已经定义了相应的资源对象,那些不存在的相应定义的资源对象将被删除。因此,删除资源对象的操作依然建议使用陈述式对象配置方式的命令“kubectl delete”进行,这样的命令格式操作目标明确且不易出现偏差。

posted on 2019-07-09 18:05  自然洒脱  阅读(931)  评论(0编辑  收藏  举报