您现在的位置是:首页 >技术交流 >k8s-Pod网站首页技术交流
k8s-Pod
Pod
简述
在k8s中,其最小的调度单元便是Pod了,一个Pod里面可以包含一个或多个容器(Docker 容器等)。或者说,Pod其实是由一组应用容器构成,并包含了容器的共有环境和资源约束。
Pod的配置管理
应用部署的一个最佳实践,是将应用所需要的配置信息与程序分离,这样可以使应用程序更好的被复用,通过不同的配置,实现更灵活的功能。将应用打包为容器镜像后,可以通过环境变量或外挂文件的方式,在创建容器时进行配置注入。但在大规模容器集群的环境中,对多个容器进行不同的配置,将变得复杂,故k8s在1.2版本开始,提供了一种同意的应用配置管理方案:ConfigMap
- ConfigMap概述
1、生成容器内的环境变量
2、设置容器的启动命令的启动参数(需要设置为环境变量)
3、以Volumne的形式挂载为容器内部的文件或目录
生成环境变量的两者方法:
1、envFrom[]方式,把ConfgMap所的data,设置为容器内的环境变量
p237
2、env[].valueFrome.configMapKeyRef方式,自定义指定环境变量的key,值为ConfigMap中的对应值
P239
容器内挂载 (volumeMount) ConfigMap:
详细见《Kubernetes权威指南》第五版,P244页
- 注:使用ConfigMap的限制条件
1、必须在Pod之前创建,这样Pod才能引用它
2、若Pod是以envFrom引用的ConfigMap,则无效的环境变量名称将被忽略,并在事件中被记为InvalidVariableNames
3、ConfigMap受命名空间的限制,只有处于同一个命名空间下的Pod,才能引用它
4、ConfigMap无法用于静态Pod
在容器内获取Pod信息
Pod的逻辑概念,在容器之上。k8s在创建Pod之后,会为Pod和容器设置一些额外的信息:Pod方面,Pod级别、Pod名字、Pod IP、Node IP、Label、Annotation、容器级别的资源限制等。但是这些Pod的信息,有时在容器内也要使用,故k8s提供了Downward API机制来将Pod和容器的某些元数据信息,注入到容器环境中,供容器应用方便地使用。
1、环境变量:把Pod或容器信息设置为容器内的环境变量
env[].valueFrom.fieldRef、env[].valueFrom.resourceFieldRef
P249 P254
2、Volume挂载:把Pod或容器信息以文件的形式挂载到容器内部
volumes[].downwardAPI.items[].resourceFieldRef
P257
Pod的生命周期
在各个技术领域内,理解某个技术的生命周期,是应用它的一个基础或者前提。比如,Pod的生命周期,在整个过程中被系统(k8s)定义为各种状态,熟悉Pod的各种状态对于理解及如何设置Pod的调度策略、重启策略很有必要。
1、Penging:API Server已经创建该Pod,但Pod内还有一个或多个容器的镜像没有创建,包括正在下载镜像的过程
2、Running:Pod内所有容器均已创建,且至少有一个容器处于运行状态、正在启动状态、正在重启状态
3、Succeeded:Pod内所有容器均成功执行后退出,且不会重启
4、Failed:Pod内所有容器均已退出,但至少有一个容器的退出状态失败
5、Unkonwn:无法获取Pod状态,可能由于网络通信不畅
探针:liveness、readiness、startupProbe
P267