企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] 在工作负载比如Deployment的Status中,有如下几个字段 * replicas Total number of non-terminated pods targeted by this deployment (their labels match the selector) * readyReplicas Total number of ready pods targeted by this deployment * availableReplicas Total number of available pods (ready for at least minReadySeconds) targeted by this deployment * unavailableReplicas Total number of unavailable pods targeted by this deployment. This is the total number of pods that are still required for the deployment to have 100% available capacity. They may either be pods that are running but not yet available or pods that still have not been created * updatedReplicas Total number of non-terminated pods targeted by this deployment that have the desired template spec ### **replicas** replicas就是通过deployment的selector能匹配到的Pod的数量,比如deployment的selector为`k8s-app: nginx`,那么就是通过以下命令获得的Pod的数量: ``` $ kubectl get pod --selector k8s-app=nginx ``` 注意:replicas和spec.replicas的值不一定相同,比如在滚动升级过程中,replicas的值是会变化的 ### **readyReplicas** Deployment匹配的Pod中状态为Ready的数量。 如何判断Pod的状态是否为Ready呢?Pod有一个`status.conditions`字段,它是一个数组,如果conditions数组中包含以下元素,则说明这个Pod是Ready状态 ``` ... status: podConditions: [ { "type": "Ready", "status": True, ... }, ... ``` 当Pod的状态为Ready的Pod会被加入到负载均衡中去。 ### **availableReplicas** Deployment有一个字段`spec.minReadySeconds`,当Deployment匹配的Pod的状态为Ready之后,还要持续`spec.minReadySeconds`时间之后,该Pod才会被当作为`available`的,且在这段时间内,Pod里面的所有Container都不能Crash。 需要注意的是,Pod并没有`available`这个状态。也就是说,一个Pod是不是`available`这个状态其实只有Deployment才知道。当一个Pod被DeploymentController检测为`available`之后,就会更新Deployment的`status.availableReplicas`字段。 目前来看,这个状态其实没有什么用。 如果`spec.minReadySeconds`是默认值0,则`availableReplicas`就是`readyReplicas`。 ### **unavailableReplicas** 它包含两类Pod:(1)Deployment匹配到的Pod中,没有被DeploymentController认为是availabe状态的Pod(2)Deployment中还没有创建出来的Pod ### **updatedReplicas** Deployment的最新ReplicaSet匹配到的、且状态为`Non-Terminated`(Pending、Creating、Running等)的Pod的数量 ### **FAQ** Q:当我们对Deployment进行升级时,如何判断升级已经成功(即最新的Pod都已经Ready了)? A:当满足条件 `spec.replicas == status.readyReplicas = status.updatedReplicas`时,说明升级成功,所有的Pod都为最新的且为Ready状态。