前言
本文主要系统的介绍pod和pod健康状态探测。探测类型包括liveness,readiness和startup。
什么是pod
Pod是Kubernetes创建或部署的最小且最简单的基本单位,Pod表示在集群上运行的进程。
Pod封装了一个或多个运行应用程序的容器,存储资源,唯一的网络IP和控制容器运行方式的一些选项。一般会将docker作为k8s的容器运行时(container runtime),不过也可以使用其他容器运行时,如CRI-O(k8s项目),Containerd(docker项目)等。
容器运行时负责真正管理镜像和容器的生命周期。
pod使用方式
查看pod的yaml参数:kubectl explain pods.spec.containers
-
运行单个容器的容器: 一个pod存在一个容器;
-
运行多个需要协同工作的容器的pod:一个pod存在多个容器协同工作,该应用程序由紧密耦合且需要共享资源的多个位于同一地点的容器组成。多个容器是紧耦合的,共享网络和存储,通过lo接口互相通信,对外呈现为一个单独的pod实体。如果想水平扩展pod,可通过Controller Manager复制多个pod提供负载均衡服务。
pod生命周期
pod生命周期:
- 初始化容器阶段会初始化pod中每一个容器,容器是串行执行的。
- 启动main container,在main container刚刚启动后就可执行postStart指令。
- 在整个main container运行周期中做两类健康探测:liveness probe(存活探测)和readiness probe(就绪探测)
- 在main container结束前可以执行preStop命令
lifestyle
创建pod时,可以用lifecycle来配置容器在运行前和关闭前的一些动作。
kubectl explain pod.spec.containers.lifecycle
lifecycle有两个钩子函数:
- postStart:容器创建成功后,运行前的任务,用于资源部署、环境准备等。
- preStop:在容器被终止前,用于优雅的关闭应用程序、通知其他系统等。
postStart
创建容器后立即调用PostStart。如果处理程序失败,容器将根据其终止并重启策略重新启动。直到preStart完成才会进入下一步,如livenessProbe。
# kubectl explain pod.spec.containers.lifecycle.postStart
# cat preStart-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: perstart-exec-pod
namespace: default
spec:
containers:
- name: perstart-exec-container
image: busybox:latest
imagePullPolicy: IfNotPresent
lifecycle:
postStart:
exec: