云原生(十五) | Kubernetes 篇之深入了解 Pod

深入了解 Pod
一、什么是 Pod

Pod 是一组(一个或多个)容器(docker 容器)的集合 (就像在豌豆荚中);这些容器共享存储、网络、以及怎样运行这些容器的声明。
我们一般不直接创建 Pod,而是创建一些工作负载由他们来创建 Pod
Pod 的形式
Pod 对容器有自恢复能力(Pod 自动重启失败的容器)
Pod 自己不能恢复自己,Pod 被删除就真的没了(100,MySQL、Redis、Order)还是希望 k8s 集群能自己在其他地方再启动这个 Pod
单容器 Pod
多容器协同 Pod。我们可以把另外的容器称为
SideCar(为应用赋能)
Pod 天生地为其成员容器提供了两种共享资源:网络和存储
一个 Pod 由一个 Pause 容器设置好整个 Pod 里面所有容器的网络、名称空间等信息
systemctl status 可以观测到。Pod 和容器进程关系
kubelet 启动一个 Pod,准备两个容器,一个是 Pod 声明的应用容器(nginx),另外一个是 Pause。Pause 给当前应用容器设置好网络空间各种的。

二、Pod 使用
可以编写 deploy 等各种工作负载的 yaml 文件,最终创建出 pod,也可以直接创建
Pod 的模板如下
三、Pod 生命周期

Pod 启动,会先依次执行所有初始化容器,有一个失败,则 Pod 不能启动
接下来启动所有的应用容器(每一个应用容器都必须能一直运行起来),Pod 开始正式工作,一个启动失败就会尝试重启 Pod 内的这个容器,Pod 只要是 NotReady,Pod 就不对外提供服务了
编写 yaml 测试生命周期
应用容器生命周期钩子
初始化容器(也可以有钩子)

临时容器:线上排错。
有些容器基础镜像。线上没法排错。使用临时容器进入这个 Pod。临时容器共享了 Pod 的所有。临时容器有 Debug 的一些命令,排错完成以后,只要 exit 退出容器,临时容器自动删除
例如:
Java:dump, jre 50mb。jdk 150mb
jre 50mb: jdk 作为临时容器
临时容器需要开启特性门控 --feature-gates="EphemeralContainers=true"
在所有组件,api-server、kubelet、scheduler、controller-manager 都得配置
使用临时容器的步骤:
1、声明一个临时容器。准备好 json 文件
2、使用临时容器,应用一下即可
kubectl replace --raw /api/v1/namespaces/default/pods/my-nginx666【pod 名】/ephemeralcontainers -f ec.json
四、静态 Pod
在 /etc/kubernetes/manifests 位置放的所有 Pod.yaml 文件,机器启动 kubelet 自己就把它启动起来。
静态 Pod 一直守护在这个机器上
五、Probe 探针机制(健康检查机制)
每个容器三种探针(Probe)
启动探针(后来才加的) 一次性成功探针。 只要启动成功了
kubelet 使用启动探针,来检测应用是否已经启动。如果启动就可以进行后续的探测检查。慢容器一定指定启动探针。
启动探针 成功以后就不用了,剩下存活探针和就绪探针持续运行
存活探针
kubelet 使用存活探针,来检测容器是否正常存活。(有些容器可能产生死锁【应用程序在运行,但是无法继续执行后面的步骤】),
如果检测失败就会重新启动这个容器
initialDelaySeconds: 3600(长了导致可能应用一段时间不可用) 5(短了陷入无限启动循环)
就绪探针
kubelet 使用就绪探针,来检测容器是否准备好了可以接收流量。当一个 Pod 内的所有容器都准备好了,才能把这个 Pod 看作就绪了。用途就是:Service 后端负载均衡多个 Pod,如果某个 Pod 还没就绪,就会从 service 负载均衡里面剔除
谁利用这些探针探测
kubelet 会主动按照配置给 Pod 里面的所有容器发送响应的探测请求
Probe 配置项
initialDelaySeconds
:容器启动后要等待多少秒后存活和就绪探测器才被初始化,默认是 0 秒,最小值是 0。这是针对以前没有periodSeconds
:执行探测的时间间隔(单位是秒)。默认是 10 秒。最小值是 1。successThreshold
:探测器在失败后,被视为成功的最小连续成功数。默认值是 1。存活和启动探针的这个值必须是 1。最小值是 1。
failureThreshold
:当探测失败时,Kubernetes 的重试次数。 存活探测情况下的放弃就意味着重新启动容器。 就绪探测情况下的放弃 Pod 会被打上未就绪的标签。默认值是 3。最小值是 1。timeoutSeconds
:探测的超时后等待多少秒。默认值是 1 秒。最小值是 1。
官方参考文档:配置存活、就绪和启动探测器 | Kubernetes
编写 yaml 测试探针机制
版权声明: 本文为 InfoQ 作者【Lansonli】的原创文章。
原文链接:【http://xie.infoq.cn/article/519c83c671d3643db844bc4ed】。文章转载请联系作者。
评论