k8s (三)Pod
Pod 是k8s中创建或部署的最小单位一个Pod里可以有一个容器,或者多个容器,例如同一个pod中可以同时有一个nginx容器和java容器,nginx通过localhost:port反向代理同一个pod下的java程序容器pod中容器共享网络IP,你可以通过此ip+不同端口访问到该pod下不同服务容器Pod中容器共享volume存储Pod中容器可以自动重启,但Pod本身不会重启,生命周期结束或被
·
目录
Pod介绍
- Pod 是k8s中创建或部署的最小单位;
- 一个Pod里可以有一个容器,或者多个容器,例如同一个pod中可以同时有一个nginx容器和java容器,nginx通过localhost:port反向代理同一个pod下的java程序容器;
- pod中容器共享网络IP,你可以通过此ip+不同端口访问到该pod下不同服务容器;
- Pod中容器共享volume存储;
- Pod中容器可以自动重启,但Pod本身不会重启,生命周期结束或被删除不会再次启动;
- Pod的自愈是通过RC、RS、Deployment等实现的,如滚动更新、重新部署;
- 几乎很少单独创建Pod来部署应用,都是依托于Deployment等控制器来部署Pod的。
Pod生命周期
Pod phase
一个正常或不正常的Pod拥有如下几个phase(生命周期阶段)
- 挂起(Pending):已创建Pod,但Pod中有一个或多个容器未创建完成,如正在拉取镜像;
- 运行中(Running):Pod已经绑定在某个节点上,Pod中的容器都已创建,至少有一个容器在运行、启动或重启状态;
- 成功(Succeeded):Pod中的所有容器都被成功终止,并且不会再重启;
- 失败(Failed):Pod中容器都以非0状态退出或者被系统终止;
- 未知(Unknown):由于某些原因无法获得Pod的状态,通常是因为Pod所在主机通信失败。
Pod 容器探针
探针的作用是对容器进行健康检查,如果检查失败则自动重启
探针分为两类
liveness probe(存活探针)
用于判断容器是否存活,即Pod状态是否为running,如果探寻到容器不健康则通过kubelet将容器kill掉,并根据重启策略决定是否重启容器。如果容器不包含该探针,则kubelet认为容器的该探针返回值永远为成功。
readiness probe(就绪探针)
用于判断容器是否启动完成,并能接受请求,如果探测失败,将不会被service代理该Pod。
每种探针都支持下面三种探测方式
- ExecAction:在容器内执行指定命令,命令退出返回码为0则视为诊断成功;
- TCPSocketAction:对容器端口进行TCP检查,端口打开视为诊断成功;
- HTTPGetAction:对容器执行HTTP Get请求,返回状态码大于等于200且小于400,视为诊断成功。
示例:
exec:
command:
- cat
- /tmp/healthy
tcpSocket:
port: 8080
initialDelaySeconds: 15
periodSeconds: 20
httpGet:
path: /healthz
port: 8080
httpHeaders:
- name: X-Custom-Header
value: Awesome
initialDelaySeconds: 3
periodSeconds: 3
探针探测结果有以下三者之一
- Success:Container通过检测
- Failure:Container未通过检测
- Unknown:未能执行检查,因此不采取任何措施
Pod并不是检测失败就重启,是否重启取决于下面三个策略
- Always:总是重启
- OnFailure:如果失败就重启
- Never:永远不重启
示例:
apiVersion: v1
kind: Pod
metadata:
name: test
labels:
app: test
spec:
containers:
- name: test
image: nginx
ports:
- containerPort: 80
readinessProbe:
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 5
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 1
livenessProbe:
tcpSocket:
port: 80
initialDelaySeconds: 15
periodSeconds: 20
successThreshold: 1
timeoutSeconds: 1
- initialDelaySeconds:指定容器启动后多少秒后进行探测
- periodSeconds:每隔多少秒进行探测
- timeoutSeconds: 探测超时时间
- successThreshold:探测失败后最少连续几次成功探测才被认定为成功,默认1,liveness存活探针来说必须是1
- failureThreshold:探测成功后最少连续几次失败才被认定为失败,默认3,最小1
更多推荐
已为社区贡献8条内容
所有评论(0)