CKAD备战笔记(4)- 容器状态检测
1. Pod的生命周期
被用来形容Pod
的状态的有Pod Status和Pod Condition:
Pod Status
Pod Status
告诉我们当前的Pod
在生命周期的哪一个阶段:
Pod Status | 解释 |
---|---|
Pending |
Pod 刚刚建成, k8s的Scheduler 正在考虑把Pod 放在哪一个Node 上。如果Scheduler没有办法决定把Pod 放哪里那么就会一直处于Pending 状态可用 k describe pod/xxx 查看原因(比如是资源不足导致的) |
ContainerCreating |
这是Pod 已经被Scheduler顺利分配到Node 中了。接下来会下载镜像并创建容器 |
Waiting |
Pod被排到了某个Node 上,但出于某种原因,Pod 没有办法跑。原因多种多样,比如镜像没有办法下载等 |
Running |
容器顺利地创建好了,App在跑了 |
Pod Condition
Pod Status告诉我们Pod
在生命周期的哪一个阶段,而Pod Condition提供了更具体的信息。k8s提供了四个Conditions,可以用k describe pod/xxx
查看Condition
属性:
Pod Status | 解释 |
---|---|
PodScheduled |
当Pod 被Scheduler顺利分配到Node 中时,为TRUE |
Initialized |
当Pod 被成功初始化时为TRUE |
ContainersReady |
当Pod 上一个或多个容器都运行正常,并可以接受用户访问时为TRUE |
Ready |
当Pod本身一切正常时为TRUE --> 这个属性也能在k get pods 中的表格中国呢看到 |
⚠️ 从kubectl get pods
可以看到类似下面的结果。这里表格中READY
的这一列代表了:Pod中READY的Container的数量
/ Pod中Container的总数
,比如1/1
NAME READY STATUS RESTARTS AGE
elephant 0/1 OOMKilled 3 (33s ago) 54s
monkey 1/1 READY 3 (33s ago) 54s
2. Readiness和Liveness监测
Probe的三种写法
Pod Condition中的Ready
是容器层面上的,它不能保证Container中的App已经可以接受用户访问了。比如Jenkins服务器刚刚开始跑的时候需要大改10-15秒时间,所以在这10-15秒中内。Pod
会告诉我们Condition是Ready
了,但其实App本身并没有起来。我们用Probes来测试App是否成功运行。Probes有三种写法:
- HTTP测试 (如果App是一个API server)
httpGet:
path: /api/ready
port: 8080
- TCP socket测试(如果App是个数据库)