一、Pod的生命周期
init container -- Post start -- running -- pre stop -- main container
创建Pod经历的过程:->apiServer->etcd保存->scheculer->etcd调度结果->当前节点运行pod(把状态发回apiServer)->etcd保存
Pod的状态:Pending Running Failed Succeeded Unkown
Pod生命周期中的重要行为:
1、初始化行为(init container)
2、容器探测:
存活性状态检测(liveness):存活不代表容器能够提供服务。用于判断容器是否健康,如果不包含此探针,则默认Success,决定Pod状态。
就绪性状态检测(readiness):容器中服务是否正常,是否能够提供服务。用于判断容器是否启动完成并准备接收请求。
【存活性探测(spec.containers.livenessprobe)和就绪性探测(spec.containers.readinessprobe)都拥有以下三种探针:ExecAction、TCPSocketAction、HTTPGetAction】
就绪性探测与service调度性存在重要关系。如果不做就绪性探测,只要标签匹配上,pod一旦创建就被绑定为service的后端, service直接将用户请求调度到已存活但未就绪的pod上,那么在一段时间内用户请求可能是失败的。
3、容器的重启策略:
pod.spec.restartPolicy <string> # 容器的重启策略字段
pod.spec.restartPolicy:#容器的重启策略。有三种,Always(只要退出就重启,默认),OnFailure(当容器终止运行且退出码不为0时, 由kubelet自动重启该容器),Never(只要退出就不重启)。kubelet重新启动的已退出容器将以指数退避延迟(10秒,20秒,40秒......)重新启动,上限为300s,并在成功执行十分钟后重置。
# Pod一旦调度成功,就永远在已调度的节点上,不会重新调度,除非节点挂了或pod被删除了,才会被重新调度。
4、lifecycle
启动后钩子(spec.containers.lifecycle.postStart):容器创建后立即执行,如果执行失败,容器终止,重启与否取决于重启策略。
终止前钩子(spec.containers.lifecycle.preStop):exec httpGet tcpSocket
Tips:容器的command比lifecycle的postStart exec command先执行。
二、常用命令
# kubectl logs #获取pod 中的日志 # kubectl get pods --show-labels #展示所有pod的标签 # kubectl get pods -L app #显示有app标签的标签值 # kubectl get pods -l app,release #过滤出有标签app,release标签的pod资源 # kubectl label --help #给资源对象打标签 # kubectl get pods –l release=canary,app=myapp #等值标签选择器,“与” # kubectl label nodes node1 disktype=ssd #给node1打标,disktype=ssd
# 许多资源支持内嵌字段,matchLabels或matchExpressions来定义标签选择器
matchLabels:直接给定键值
matchExpressions:基于给定的表达式来定义使用的标签选择器
{key:”KEY”,operator:”OPERATOR” ,values:[VALUE1,VALUE2,VALUE3]} #操作符一般是逻辑表达式,(In、 NotIn),values的值必须为非空列表,(Exists、NotExists),values的值必须为空列表等。