《 Kubernetes进阶实战》一3.5Pod资源的基础管理操作

举报
华章计算机 发表于 2019/05/29 21:41:14 2019/05/29
【摘要】 本书摘自《 Kubernetes进阶实战》一第三章,第3.5节,作者是马永亮

3.5 Pod资源的基础管理操作

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

3.5.1 陈述式对象配置管理方式

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

       1.创建Pod资源

       Pod是标准的Kubernetes 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”命令以陈述式对象配置进行资源对象的创建,下面是相应的命令及响应结果:
                ~]$ kubectl create -f pod-example.yaml
                pod/pod-example created
       如果读者熟悉JSON,也可以直接将清单文件定义为JSON格式;YAML格式的清单文件本身也是由API Server事先将其转换为JSON格式而后才进行应用的。
      命令的返回信息表示目标Pod对象pod-example得以成功创建。事实上,create命令中的-f选项也支持使用目录路径或URL,而且目标路径为目录时,还支持使用-R选项进行子目录递归。另外,--record选项可以将命令本身记录为目标对象的注解信息kubernetes.io/change-cause,而--save-conf?ig则能够将提供给命令的资源对象配置信息保存于对象的注解信息kubectl.kubernetes.io/last-applied-conf?iguration中,后一个命令的功用与声明式对象配置命令apply的功能相近。

2.查看Pod状态

       get命令默认显示资源对象最为关键的状态信息,而describe等命令则能够打印出Kubernetes资源对象的详细状态。不过,虽然创建时给出的资源清单文件较为简洁,但“kubectl get”命令既可以使用“-o yaml”或“-o json”选项输出资源对象的配置数据及状态,也能够借助于“--custom-columns”选项自定义要显示的字段:
                       ~]$ kubectl get -f pod-example.yaml
                       NAME          READY     STATUS    RESTARTS    AGE
                       pod-example   1/1       Running   0           1m
                       ~]$ kubectl get -f pod-example.yaml -o custom-columns=NAME:metadata.name,STATUS:status.phase
                       NAME          STATUS
                       pod-example   Running
       使用“-o yaml”或“-o json”选项时,get命令能够返回资源对象的元数据、期望的状态及当前状态数据信息,而要打印活动对象的详细信息,则需要describe命令,它可根据资源清单、资源名或卷标等方式过滤输出符合条件的资源对象的信息。命令格式为“kubectl describe (-f FILENAME | TYPE [NAME_PREFIX | -l label] | TYPE/NAME)”。例如,显示pod-example的详细信息,可使用类似如下的命令:
                        ~]$ kubectl describe -f pod-example.yaml
       对于Pod资源对象来说,它能够返回活动对象的元数据、当前状态、容器列表及各容器的详情、存储卷对象列表、QoS类别、事件及相关信息,这些详情对于了解目标资源对象的状态或进行错误排查等操作来说至关重要。

3.更新Pod资源

       对于活动对象,并非其每个属性值都支持修改,例如,Pod资源对象的metadata.name字段就不支持修改,除非删除并重建它。对于那些支持修改的属性,比如,容器的image字段,可将其完整的配置清单导出于配置文件中并更新相应的配置数据,而后使用replace命令基于陈述式对象配置的管理机制进行资源对象的更新。例如,将前面创建pod-example时使用的资源清单中的image值修改为“ikubernetes/myapp: v2”,而后执行更新操作:
             ~]$ kubectl get pods pod-example -o yaml > pod-example-update.yaml
             ~]$ sed -i 's@\(image:\).*@ikubernetes/myapp:v2@' pod-example-update.yaml
             ~]$ kubectl replace -f pod-example-update.yaml
             pod/pod-example replaced
       更新活动对象的配置时,replace命令要重构整个资源对象,故此它必须基于完整格式的配置信息才能进行活动对象的完全替换。若要基于此前的配置文件进行替换,就必须使用--force选项删除此前的活动对象,而后再进行新建操作,否则命令会返回错误信息。例如,将前面第一步“创建Pod资源”内的配置清单中的镜像修改为“ikubernetes/myapp: v2”后再进行强制替换,命令如下:
               ~]$ kubectl replace -f pod-example.yaml --force
               pod "pod-example" deleted
               pod/pod-example replaced

4.删除Pod资源

       陈述式对象配置管理方式下的删除操作与创建、查看及更新操作类似,为delete命令使用-f选项指定配置清单即可,例如,删除pod-example.yaml文件中定义的Pod资源对象:
              ~]$ kubectl delete -f pod-example.yaml
              pod "pod-example" deleted
       之后再次打印相关配置清单中定义的资源对象即可验正其删除的结果,例如:
                 ~]$ kubectl get -f pod-example.yaml
                 No resources found.
                 Error from server (NotFound): pods "pod-example" not found

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。