mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-28 14:07:14 +00:00
Move TemplateGeneration to the Spec
This commit is contained in:
parent
b59ecde587
commit
620310c12f
@ -441,6 +441,11 @@ type DaemonSetSpec struct {
|
|||||||
// is ready).
|
// is ready).
|
||||||
// +optional
|
// +optional
|
||||||
MinReadySeconds int32
|
MinReadySeconds int32
|
||||||
|
|
||||||
|
// A sequence number representing a specific generation of the template.
|
||||||
|
// Populated by the system. It can be set only during the creation.
|
||||||
|
// +optional
|
||||||
|
TemplateGeneration int64
|
||||||
}
|
}
|
||||||
|
|
||||||
// DaemonSetStatus represents the current status of a daemon set.
|
// DaemonSetStatus represents the current status of a daemon set.
|
||||||
@ -505,11 +510,6 @@ type DaemonSet struct {
|
|||||||
// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
|
// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
|
||||||
// +optional
|
// +optional
|
||||||
Status DaemonSetStatus
|
Status DaemonSetStatus
|
||||||
|
|
||||||
// A sequence number representing a specific generation of the template.
|
|
||||||
// Populated by the system. Read-only.
|
|
||||||
// +optional
|
|
||||||
TemplateGeneration int64
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -440,6 +440,11 @@ type DaemonSetSpec struct {
|
|||||||
// is ready).
|
// is ready).
|
||||||
// +optional
|
// +optional
|
||||||
MinReadySeconds int32 `json:"minReadySeconds,omitempty" protobuf:"varint,4,opt,name=minReadySeconds"`
|
MinReadySeconds int32 `json:"minReadySeconds,omitempty" protobuf:"varint,4,opt,name=minReadySeconds"`
|
||||||
|
|
||||||
|
// A sequence number representing a specific generation of the template.
|
||||||
|
// Populated by the system. It can be set only during the creation.
|
||||||
|
// +optional
|
||||||
|
TemplateGeneration int64 `json:"templateGeneration,omitempty" protobuf:"varint,5,opt,name=templateGeneration"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// DaemonSetStatus represents the current status of a daemon set.
|
// DaemonSetStatus represents the current status of a daemon set.
|
||||||
@ -507,11 +512,6 @@ type DaemonSet struct {
|
|||||||
// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
|
// More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status
|
||||||
// +optional
|
// +optional
|
||||||
Status DaemonSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
|
Status DaemonSetStatus `json:"status,omitempty" protobuf:"bytes,3,opt,name=status"`
|
||||||
|
|
||||||
// A sequence number representing a specific generation of the template.
|
|
||||||
// Populated by the system. Read-only.
|
|
||||||
// +optional
|
|
||||||
TemplateGeneration int64 `json:"templateGeneration,omitempty" protobuf:"varint,4,opt,name=templateGeneration"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -145,6 +145,7 @@ func ValidateDaemonSetSpec(spec *extensions.DaemonSetSpec, fldPath *field.Path)
|
|||||||
allErrs = append(allErrs, field.NotSupported(fldPath.Child("template", "spec", "restartPolicy"), spec.Template.Spec.RestartPolicy, []string{string(api.RestartPolicyAlways)}))
|
allErrs = append(allErrs, field.NotSupported(fldPath.Child("template", "spec", "restartPolicy"), spec.Template.Spec.RestartPolicy, []string{string(api.RestartPolicyAlways)}))
|
||||||
}
|
}
|
||||||
allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(spec.MinReadySeconds), fldPath.Child("minReadySeconds"))...)
|
allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(spec.MinReadySeconds), fldPath.Child("minReadySeconds"))...)
|
||||||
|
allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(spec.TemplateGeneration), fldPath.Child("templateGeneration"))...)
|
||||||
|
|
||||||
allErrs = append(allErrs, ValidateDaemonSetUpdateStrategy(&spec.UpdateStrategy, fldPath.Child("updateStrategy"))...)
|
allErrs = append(allErrs, ValidateDaemonSetUpdateStrategy(&spec.UpdateStrategy, fldPath.Child("updateStrategy"))...)
|
||||||
return allErrs
|
return allErrs
|
||||||
|
@ -576,7 +576,7 @@ func (dsc *DaemonSetsController) syncNodes(ds *extensions.DaemonSet, podsToDelet
|
|||||||
glog.V(4).Infof("Nodes needing daemon pods for daemon set %s: %+v, creating %d", ds.Name, nodesNeedingDaemonPods, createDiff)
|
glog.V(4).Infof("Nodes needing daemon pods for daemon set %s: %+v, creating %d", ds.Name, nodesNeedingDaemonPods, createDiff)
|
||||||
createWait := sync.WaitGroup{}
|
createWait := sync.WaitGroup{}
|
||||||
createWait.Add(createDiff)
|
createWait.Add(createDiff)
|
||||||
template := util.GetPodTemplateWithGeneration(ds.Spec.Template, ds.TemplateGeneration)
|
template := util.GetPodTemplateWithGeneration(ds.Spec.Template, ds.Spec.TemplateGeneration)
|
||||||
for i := 0; i < createDiff; i++ {
|
for i := 0; i < createDiff; i++ {
|
||||||
go func(ix int) {
|
go func(ix int) {
|
||||||
defer createWait.Done()
|
defer createWait.Done()
|
||||||
@ -695,7 +695,7 @@ func (dsc *DaemonSetsController) updateDaemonSetStatus(ds *extensions.DaemonSet)
|
|||||||
numberAvailable++
|
numberAvailable++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if util.IsPodUpdated(ds.TemplateGeneration, pod) {
|
if util.IsPodUpdated(ds.Spec.TemplateGeneration, pod) {
|
||||||
updatedNumberScheduled++
|
updatedNumberScheduled++
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1022,7 +1022,7 @@ func TestDaemonSetUpdatesPods(t *testing.T) {
|
|||||||
ds.Spec.UpdateStrategy.Type = extensions.RollingUpdateDaemonSetStrategyType
|
ds.Spec.UpdateStrategy.Type = extensions.RollingUpdateDaemonSetStrategyType
|
||||||
intStr := intstr.FromInt(maxUnavailable)
|
intStr := intstr.FromInt(maxUnavailable)
|
||||||
ds.Spec.UpdateStrategy.RollingUpdate = &extensions.RollingUpdateDaemonSet{MaxUnavailable: &intStr}
|
ds.Spec.UpdateStrategy.RollingUpdate = &extensions.RollingUpdateDaemonSet{MaxUnavailable: &intStr}
|
||||||
ds.TemplateGeneration++
|
ds.Spec.TemplateGeneration++
|
||||||
manager.dsStore.Update(ds)
|
manager.dsStore.Update(ds)
|
||||||
|
|
||||||
clearExpectations(t, manager, ds, podControl)
|
clearExpectations(t, manager, ds, podControl)
|
||||||
@ -1061,7 +1061,7 @@ func TestDaemonSetUpdatesWhenNewPosIsNotReady(t *testing.T) {
|
|||||||
ds.Spec.UpdateStrategy.Type = extensions.RollingUpdateDaemonSetStrategyType
|
ds.Spec.UpdateStrategy.Type = extensions.RollingUpdateDaemonSetStrategyType
|
||||||
intStr := intstr.FromInt(maxUnavailable)
|
intStr := intstr.FromInt(maxUnavailable)
|
||||||
ds.Spec.UpdateStrategy.RollingUpdate = &extensions.RollingUpdateDaemonSet{MaxUnavailable: &intStr}
|
ds.Spec.UpdateStrategy.RollingUpdate = &extensions.RollingUpdateDaemonSet{MaxUnavailable: &intStr}
|
||||||
ds.TemplateGeneration++
|
ds.Spec.TemplateGeneration++
|
||||||
manager.dsStore.Update(ds)
|
manager.dsStore.Update(ds)
|
||||||
|
|
||||||
// new pods are not ready numUnavailable == maxUnavailable
|
// new pods are not ready numUnavailable == maxUnavailable
|
||||||
@ -1087,7 +1087,7 @@ func TestDaemonSetUpdatesAllOldPodsNotReady(t *testing.T) {
|
|||||||
ds.Spec.UpdateStrategy.Type = extensions.RollingUpdateDaemonSetStrategyType
|
ds.Spec.UpdateStrategy.Type = extensions.RollingUpdateDaemonSetStrategyType
|
||||||
intStr := intstr.FromInt(maxUnavailable)
|
intStr := intstr.FromInt(maxUnavailable)
|
||||||
ds.Spec.UpdateStrategy.RollingUpdate = &extensions.RollingUpdateDaemonSet{MaxUnavailable: &intStr}
|
ds.Spec.UpdateStrategy.RollingUpdate = &extensions.RollingUpdateDaemonSet{MaxUnavailable: &intStr}
|
||||||
ds.TemplateGeneration++
|
ds.Spec.TemplateGeneration++
|
||||||
manager.dsStore.Update(ds)
|
manager.dsStore.Update(ds)
|
||||||
|
|
||||||
// all old pods are unavailable so should be removed
|
// all old pods are unavailable so should be removed
|
||||||
|
@ -80,7 +80,7 @@ func (dsc *DaemonSetsController) getAllDaemonSetPods(ds *extensions.DaemonSet) (
|
|||||||
return newPods, oldPods, fmt.Errorf("Couldn't get list of pods for daemon set %#v: %v", ds, err)
|
return newPods, oldPods, fmt.Errorf("Couldn't get list of pods for daemon set %#v: %v", ds, err)
|
||||||
}
|
}
|
||||||
for _, pod := range daemonPods {
|
for _, pod := range daemonPods {
|
||||||
if util.IsPodUpdated(ds.TemplateGeneration, pod) {
|
if util.IsPodUpdated(ds.Spec.TemplateGeneration, pod) {
|
||||||
newPods = append(newPods, pod)
|
newPods = append(newPods, pod)
|
||||||
} else {
|
} else {
|
||||||
oldPods = append(oldPods, pod)
|
oldPods = append(oldPods, pod)
|
||||||
|
@ -53,7 +53,9 @@ func (daemonSetStrategy) PrepareForCreate(ctx genericapirequest.Context, obj run
|
|||||||
daemonSet.Status = extensions.DaemonSetStatus{}
|
daemonSet.Status = extensions.DaemonSetStatus{}
|
||||||
|
|
||||||
daemonSet.Generation = 1
|
daemonSet.Generation = 1
|
||||||
daemonSet.TemplateGeneration = 1
|
if daemonSet.Spec.TemplateGeneration < 1 {
|
||||||
|
daemonSet.Spec.TemplateGeneration = 1
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrepareForUpdate clears fields that are not allowed to be set by end users on update.
|
// PrepareForUpdate clears fields that are not allowed to be set by end users on update.
|
||||||
@ -65,7 +67,7 @@ func (daemonSetStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, ol
|
|||||||
newDaemonSet.Status = oldDaemonSet.Status
|
newDaemonSet.Status = oldDaemonSet.Status
|
||||||
|
|
||||||
// update is not allowed to set TemplateGeneration
|
// update is not allowed to set TemplateGeneration
|
||||||
newDaemonSet.TemplateGeneration = oldDaemonSet.TemplateGeneration
|
newDaemonSet.Spec.TemplateGeneration = oldDaemonSet.Spec.TemplateGeneration
|
||||||
|
|
||||||
// Any changes to the spec increment the generation number, any changes to the
|
// Any changes to the spec increment the generation number, any changes to the
|
||||||
// status should reflect the generation number of the corresponding object. We push
|
// status should reflect the generation number of the corresponding object. We push
|
||||||
@ -79,7 +81,7 @@ func (daemonSetStrategy) PrepareForUpdate(ctx genericapirequest.Context, obj, ol
|
|||||||
// TODO: Any changes to a part of the object that represents desired state (labels,
|
// TODO: Any changes to a part of the object that represents desired state (labels,
|
||||||
// annotations etc) should also increment the generation.
|
// annotations etc) should also increment the generation.
|
||||||
if !reflect.DeepEqual(oldDaemonSet.Spec.Template, newDaemonSet.Spec.Template) {
|
if !reflect.DeepEqual(oldDaemonSet.Spec.Template, newDaemonSet.Spec.Template) {
|
||||||
newDaemonSet.TemplateGeneration = oldDaemonSet.TemplateGeneration + 1
|
newDaemonSet.Spec.TemplateGeneration = oldDaemonSet.Spec.TemplateGeneration + 1
|
||||||
newDaemonSet.Generation = oldDaemonSet.Generation + 1
|
newDaemonSet.Generation = oldDaemonSet.Generation + 1
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user