mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 13:37:30 +00:00
Merge pull request #21902 from janetkuo/deployment-unavailable-replicas
Fix the incorrect deployment.status.unavailableReplicas
This commit is contained in:
commit
88056edab2
@ -593,11 +593,11 @@ func (dc *DeploymentController) syncRollingUpdateDeployment(deployment extension
|
|||||||
|
|
||||||
// syncDeploymentStatus checks if the status is up-to-date and sync it if necessary
|
// syncDeploymentStatus checks if the status is up-to-date and sync it if necessary
|
||||||
func (dc *DeploymentController) syncDeploymentStatus(allRSs []*extensions.ReplicaSet, newRS *extensions.ReplicaSet, d extensions.Deployment) error {
|
func (dc *DeploymentController) syncDeploymentStatus(allRSs []*extensions.ReplicaSet, newRS *extensions.ReplicaSet, d extensions.Deployment) error {
|
||||||
totalReplicas, updatedReplicas, availableReplicas, _, err := dc.calculateStatus(allRSs, newRS, d)
|
totalActualReplicas, updatedReplicas, availableReplicas, _, err := dc.calculateStatus(allRSs, newRS, d)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if d.Generation > d.Status.ObservedGeneration || d.Status.Replicas != totalReplicas || d.Status.UpdatedReplicas != updatedReplicas || d.Status.AvailableReplicas != availableReplicas {
|
if d.Generation > d.Status.ObservedGeneration || d.Status.Replicas != totalActualReplicas || d.Status.UpdatedReplicas != updatedReplicas || d.Status.AvailableReplicas != availableReplicas {
|
||||||
return dc.updateDeploymentStatus(allRSs, newRS, d)
|
return dc.updateDeploymentStatus(allRSs, newRS, d)
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -1044,7 +1044,7 @@ func (dc *DeploymentController) cleanupOldReplicaSets(oldRSs []*extensions.Repli
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (dc *DeploymentController) updateDeploymentStatus(allRSs []*extensions.ReplicaSet, newRS *extensions.ReplicaSet, deployment extensions.Deployment) error {
|
func (dc *DeploymentController) updateDeploymentStatus(allRSs []*extensions.ReplicaSet, newRS *extensions.ReplicaSet, deployment extensions.Deployment) error {
|
||||||
totalReplicas, updatedReplicas, availableReplicas, unavailableReplicas, err := dc.calculateStatus(allRSs, newRS, deployment)
|
totalActualReplicas, updatedReplicas, availableReplicas, unavailableReplicas, err := dc.calculateStatus(allRSs, newRS, deployment)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -1053,7 +1053,7 @@ func (dc *DeploymentController) updateDeploymentStatus(allRSs []*extensions.Repl
|
|||||||
newDeployment.Status = extensions.DeploymentStatus{
|
newDeployment.Status = extensions.DeploymentStatus{
|
||||||
// TODO: Ensure that if we start retrying status updates, we won't pick up a new Generation value.
|
// TODO: Ensure that if we start retrying status updates, we won't pick up a new Generation value.
|
||||||
ObservedGeneration: deployment.Generation,
|
ObservedGeneration: deployment.Generation,
|
||||||
Replicas: totalReplicas,
|
Replicas: totalActualReplicas,
|
||||||
UpdatedReplicas: updatedReplicas,
|
UpdatedReplicas: updatedReplicas,
|
||||||
AvailableReplicas: availableReplicas,
|
AvailableReplicas: availableReplicas,
|
||||||
UnavailableReplicas: unavailableReplicas,
|
UnavailableReplicas: unavailableReplicas,
|
||||||
@ -1062,8 +1062,8 @@ func (dc *DeploymentController) updateDeploymentStatus(allRSs []*extensions.Repl
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (dc *DeploymentController) calculateStatus(allRSs []*extensions.ReplicaSet, newRS *extensions.ReplicaSet, deployment extensions.Deployment) (totalReplicas, updatedReplicas, availableReplicas, unavailableReplicas int, err error) {
|
func (dc *DeploymentController) calculateStatus(allRSs []*extensions.ReplicaSet, newRS *extensions.ReplicaSet, deployment extensions.Deployment) (totalActualReplicas, updatedReplicas, availableReplicas, unavailableReplicas int, err error) {
|
||||||
totalReplicas = deploymentutil.GetActualReplicaCountForReplicaSets(allRSs)
|
totalActualReplicas = deploymentutil.GetActualReplicaCountForReplicaSets(allRSs)
|
||||||
updatedReplicas = deploymentutil.GetActualReplicaCountForReplicaSets([]*extensions.ReplicaSet{newRS})
|
updatedReplicas = deploymentutil.GetActualReplicaCountForReplicaSets([]*extensions.ReplicaSet{newRS})
|
||||||
minReadySeconds := deployment.Spec.MinReadySeconds
|
minReadySeconds := deployment.Spec.MinReadySeconds
|
||||||
availableReplicas, err = deploymentutil.GetAvailablePodsForReplicaSets(dc.client, allRSs, minReadySeconds)
|
availableReplicas, err = deploymentutil.GetAvailablePodsForReplicaSets(dc.client, allRSs, minReadySeconds)
|
||||||
@ -1071,6 +1071,7 @@ func (dc *DeploymentController) calculateStatus(allRSs []*extensions.ReplicaSet,
|
|||||||
err = fmt.Errorf("failed to count available pods: %v", err)
|
err = fmt.Errorf("failed to count available pods: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
totalReplicas := deploymentutil.GetReplicaCountForReplicaSets(allRSs)
|
||||||
unavailableReplicas = totalReplicas - availableReplicas
|
unavailableReplicas = totalReplicas - availableReplicas
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -377,7 +377,7 @@ func IsPodAvailable(pod *api.Pod, minReadySeconds int) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func GetPodsForReplicaSets(c clientset.Interface, replicaSets []*extensions.ReplicaSet) ([]api.Pod, error) {
|
func GetPodsForReplicaSets(c clientset.Interface, replicaSets []*extensions.ReplicaSet) ([]api.Pod, error) {
|
||||||
allPods := []api.Pod{}
|
allPods := map[string]api.Pod{}
|
||||||
for _, rs := range replicaSets {
|
for _, rs := range replicaSets {
|
||||||
selector, err := unversioned.LabelSelectorAsSelector(rs.Spec.Selector)
|
selector, err := unversioned.LabelSelectorAsSelector(rs.Spec.Selector)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -386,11 +386,17 @@ func GetPodsForReplicaSets(c clientset.Interface, replicaSets []*extensions.Repl
|
|||||||
options := api.ListOptions{LabelSelector: selector}
|
options := api.ListOptions{LabelSelector: selector}
|
||||||
podList, err := c.Core().Pods(rs.ObjectMeta.Namespace).List(options)
|
podList, err := c.Core().Pods(rs.ObjectMeta.Namespace).List(options)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return allPods, fmt.Errorf("error listing pods: %v", err)
|
return nil, fmt.Errorf("error listing pods: %v", err)
|
||||||
|
}
|
||||||
|
for _, pod := range podList.Items {
|
||||||
|
allPods[pod.Name] = pod
|
||||||
}
|
}
|
||||||
allPods = append(allPods, podList.Items...)
|
|
||||||
}
|
}
|
||||||
return allPods, nil
|
requiredPods := []api.Pod{}
|
||||||
|
for _, pod := range allPods {
|
||||||
|
requiredPods = append(requiredPods, pod)
|
||||||
|
}
|
||||||
|
return requiredPods, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Revision returns the revision number of the input replica set
|
// Revision returns the revision number of the input replica set
|
||||||
|
Loading…
Reference in New Issue
Block a user