Deployment Status
deployment在其生命周期中会进入各种状态。回滚ReplicaSet可能是正在运行,也可能是complete,也可能是失败的进程。
Progressing Deployment
Kubernetes标记的deployment作为前进当执行下列任务之一:
deployment将创建一个新的ReplicaSet。
deployment正在扩展其最新的ReplicaSet。
deployment正在缩减其较旧的ReplicaSet。
新Pod已准备就绪或可用(至少已准备好MinReadySeconds)。
您可以使用监视deployment的进度kubectl rollout status
。
Complete Deployment
Kubernetes 具有以下特征时,将Deployment标记为complete:
与Deployment关联的所有副本均已更新为您指定的最新版本,这意味着您请求的所有更新均已完成。
与deployment关联的所有副本均可用。
没有运行用于deployment的旧副本。
您可以使用来检查deployment是否已完成kubectl rollout status
。如果回滚成功完成,则kubectl rollout status
返回零退出代码。
kubectl rollout status deployment.v1.apps/nginx-deployment
输出类似于以下内容:
Waiting for rollout to finish: 2 of 3 updated replicas are available...
deployment.apps/nginx-deployment successfully rolled out
$ echo $?
0
Failed Deployment
尝试部署其最新的ReplicaSet可能会遇到麻烦,而没有完成。这可能是由于以下因素引起的:
配额不足
准备就绪探针故障
镜像拉取失败
权限不足
极限范围
应用程序运行时配置错误
检测这种情况的一种方法是在“部署”规范中指定一个截止日期参数:(.spec.progressDeadlineSeconds
)。.spec.progressDeadlineSeconds
表示部署控制器在指示(处于部署状态)部署进度已停止之前等待的秒数。
以下kubectl
命令设置规范progressDeadlineSeconds
以使控制器在10分钟后报告部署进度不足:
kubectl patch deployment.v1.apps/nginx-deployment -p '{"spec":{"progressDeadlineSeconds":600}}'
输出类似于以下内容:
deployment.apps/nginx-deployment patched
一旦超过了最后期限,Deployment控制器就会将具有以下属性的DeploymentCondition添加到Deployment的.status.conditions
:
Type=Progressing
Status=False
Reason=ProgressDeadlineExceede
有关状态条件的更多信息,请参见Kubernetes API约定。
注意: Kubernetes不能对已停止的Deployment进行任何操作,只能使用来报告状态条件
Reason=ProgressDeadlineExceeded
。较高级别的协调者可以利用它并采取相应的措施,例如,将Deployment回滚到其先前版本。
注意:如果您暂停部署,Kubernetes不会在指定的期限内检查进度。您可以在推出过程中安全地暂停部署并继续执行,而不会触发超出期限的条件。
由于设置的超时时间太短,或者由于其他任何类型的可被视为瞬态的错误,您的部署中可能会遇到瞬态错误。例如,假设您的配额不足。如果描述部署,您将注意到以下部分:
kubectl describe deployment nginx-deployment
输出类似于以下内容:
<...>
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True ReplicaSetUpdated
ReplicaFailure True FailedCreate
<...>
如果运行kubectl get deployment nginx-deployment -o yaml
,则部署状态类似于以下内容:
status:
availableReplicas: 2
conditions:
- lastTransitionTime: 2016-10-04T12:25:39Z
lastUpdateTime: 2016-10-04T12:25:39Z
message: Replica set "nginx-deployment-4262182780" is progressing.
reason: ReplicaSetUpdated
status: "True"
type: Progressing
- lastTransitionTime: 2016-10-04T12:25:42Z
lastUpdateTime: 2016-10-04T12:25:42Z
message: Deployment has minimum availability.
reason: MinimumReplicasAvailable
status: "True"
type: Available
- lastTransitionTime: 2016-10-04T12:25:39Z
lastUpdateTime: 2016-10-04T12:25:39Z
message: 'Error creating: pods "nginx-deployment-4262182780-" is forbidden: exceeded quota:
object-counts, requested: pods=1, used: pods=3, limited: pods=2'
reason: FailedCreate
status: "True"
type: ReplicaFailure
observedGeneration: 3
replicas: 2
unavailableReplicas: 2
最终,一旦超过了部署进度的最后期限,Kubernetes便会更新进度状态的状态和原因:
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing False ProgressDeadlineExceeded
ReplicaFailure True FailedCreate
您可以通过缩减部署,缩减您可能正在运行的其他控制器或增加命名空间中的配额来解决配额不足的问题。如果满足配额条件,并且Deployment Controller然后完成Deployment部署,您将看到带有成功条件(Status=True
和Reason=NewReplicaSetAvailable
)的Deployment状态更新。
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
Type=Available
有Status=True
指你部署最小可用性。最低可用性由部署策略中指定的参数决定。Type=Progressing
使用with Status=True
表示您的Deployment处于部署的中间并且正在进行中,或者它已成功完成其进度,并且所需的最少新副本可用(请参阅该条件的原因以获得详细信息-在我们的情况下 Reason=NewReplicaSetAvailable
,这意味着部署完成)。
您可以使用来检查部署是否无法进行kubectl rollout status
。kubectl rollout status
如果部署已超过进度期限,则返回非零退出代码。
kubectl rollout status deployment.v1.apps/nginx-deployment
输出类似于以下内容:
Waiting for rollout to finish: 2 out of 3 new replicas have been updated...
error: deployment "nginx" exceeded its progress deadline
$ echo $?
1
对失败的部署进行操作
适用于完整部署的所有操作也适用于失败的部署。如果需要在Deployment Pod模板中应用多个调整,则可以放大/缩小它,回滚到以前的版本,甚至暂停它。




