kkwen

资源管理基础(5)Pod资源的基础管理操作
Pod是Kubernetes API中的核心资源类型,它可以定义在JSON或YAML格式的资源清单中,由资源管理命...
扫描右侧二维码阅读全文
25
2019/02

资源管理基础(5)Pod资源的基础管理操作

Pod是Kubernetes API中的核心资源类型,它可以定义在JSON或YAML格式的资源清单中,由资源管理命令进行陈述式或声明式管理。

创建时,用户通过create或apply命令将请求提交到API Server并将其保存至集群状态存储系统etcd中,而后由调度器将其调度至最佳目标节点,并被相应节点的kubelet借助于容器引擎创建并启动,这种由用户直接通过API创建的Pod对象也称为自助式Pod

陈述式对象配置管理方式

  • 陈述式对象配置管理机制,是由用户通过配置文件指定要管理的目标资源对象,而后再借助于命令直接指定Kubernetes系统要执行的管理操作的管理方式,常用的由create、delete、replace、get和describe等
  1. 创建Pod资源
    pod是标准的k8s API资源,在配置清单中使用kind、apiVersion、metadata和spec字段进行定义,status字段在对象创建后由系统自行维护。

Pod对象的核心功用在于运行容器化应用,在其spec字段中嵌套的必选字段是containers,它的值是一个容器对象列表,支持嵌套创建一到多个容器
下面是一个Pod资源清单文件,在spec中定义的期望状态是在Pod对象中基于ikubernetes/myapp:v1镜像运行一个名为myapp的容器

apiVersion: v1
kind: Pod
metadata:
     name: pod-example
spec:
     containers:
     - name: myapp
       image: ikubernetes/myapp:v1

将上述配置文件保存在文件中,使用 kubectl [COMMAND] -f /PATH/TO/YAML_FILE 命令以陈述式对象配置进行资源对象的创建

[root@ _7_ ~]# kubectl create -f pod-example.yaml
pod/pod-example created
  1. 查看pod状态
  2. get命令既可以使用 -o yaml或 -o json选项输出资源对象的配置数据及状态,也能够借助 --custom-columns选项自定义要显示的字段
[root@ _10_ ~]# kubectl get -f pod-example.yaml    
NAME          READY   STATUS              RESTARTS   AGE
pod-example   0/1     ContainerCreating   0          2s
[root@ _12_ ~]# kubectl get -f pod-example.yaml -o custom-columns=NAME:metadata.name,STATUS:status.phase
NAME          STATUS
pod-example   Running

使用-o yaml或-o son时,get命令能返回资源对象的元数据、期望状态及当前状态信息,若要打印活动对象信息,则需要describe命令,它可根据资源清单、资源名称或卷标等方式过滤输出符合条件的资源对象的信息,命令格式为describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME) 例如,显示pod-example的详细信息

[root@ _13_ ~]# kubectl describe -f pod-example.yaml 

对于来说pod,返回项有:对象数据、当前状态、容器列表及各容器的详情、存储对象列表、Qos类别、事件及相关信息

  1. 更新pod资源
    活动对象对支持修改的属性,比如容器的image字段,可将其完整的配置清单导出于配置文件中并更新相应的配置数据,而后使用replace命令基于陈述式对象配置的管理机制进行资源对象的更新

例:将前面创建的pod-example时使用的清单中的image修改为ikubernetes/myapp:v2 而后执行操作

 ~]# kubectl get pods pod-example -o yaml > pod-example-update.yaml
 ~]# sed -i 's@\(image:\).*@\1 ikubernetes/myapp:v2@' pod-example-update.yaml
 ~]# kubectl replace -f pod-example-update.yaml
 pod/pod-example replaced

若要基于以前的配置文件进行替换对象,就必须使用--force选项删除此前的活动对象,而后再进行新建操作,例如在pod-example.yaml中将image修改为ikubernetes/myapp:v2 后,使用kubectl replace替换

 ~]# kubectl replace -f pod-example.yaml --force
 pod "pod-example" deleted
 pod "pod-example" replaced
  1. 删除pod资源
    陈述式对象配置管理方式下删除和创建、查看、更新操作类似,为delete命令使用-f选项指定配置清单即可,例如删除pod-example.yaml文件中华定义的pod资源对象
[root@ _31_ ~]# kubectl delete -f pod-example.yaml
pod "pod-example" deleted

声明式对象配置管理方式

陈述式对象配置管理机制中,同时指定的多个资源必须进行同一种操作,而且replace命令式通过完全替换现有活动对象来进行资源的更新操作,对于生产环境这并非理想选择。
声明式对象配置操作在管理资源对象时将配置信息保存于目标对象的注解中,并通过比较活动对象的当前配置、前一次管理操作时保存于注解中的配置,以及当前命令提供的配置生成更新补丁从而完成活动对象的补丁式更新操作。此类管理命令通常有apply和patch
例如:在上节中定义的pod-example中定义的ikubernetes/myapp:v1 镜像的Pod资源对象,还可以使用如下命令进行

[root@ _34_ ~]# kubectl apply -f pod-example.yaml 
pod/pod-example created

而更新对象的操作,可在直接修改原有资源清单文件后再次对其执行apply命令来完成,例如修改了image版本为ikubernetes/myapp:v2 后,再次对其执行apply命令

[root@ _36_ ~]# kubectl apply -f pod-example.yaml 
pod/pod-example configured

命令结果显示资源重新配置完成并且已经生效,此类操作也完全能够使用patch命令直接进行补丁操作。而对象的删除操作依然可以使用apply命令,但同时要使用--prune选项,命令格式为 kubectl apply -f <directory/> --prune -l <labels>,此命令异常凶险,他先基于标签选择器挑选出符合条件的对象,然后基于给定的目录中寻找是否存在某配置文件已经定义了相应的资源对象,那些不存在相应定义的资源对象将被删除。
因此删除资源对象建议使用陈述式对象配置命令进行 kubectl delete,这样不容易出现偏差

最后修改:2019 年 02 月 26 日 09 : 25 AM
如果觉得我的文章对你有用,请随意赞赏

发表评论