Commit 49f1aa06 authored by Kubernetes Submit Queue's avatar Kubernetes Submit Queue Committed by GitHub

Merge pull request #35739 from foxish/migrating-the-annotation

Automatic merge from submit-queue Making the pod.alpha.kubernetes.io/initialized annotation optional in PetSet pods **What this PR does / why we need it**: As of now, the absence of the annotation `pod.alpha.kubernetes.io/initialized` in PetSets causes the PetSet controller to effectively "pause". Being a debug hook, users expect that its absence has no effect on the working of a PetSet. This PR inverts the logic so that we let the PetSet controller operate as expected in the absence of the annotation. Letting the annotation remain alpha seems ok. Renaming it to something more meaningful needs further discussion. **Which issue this PR fixes** _(optional, in `fixes #<issue number>(, #<issue_number>, ...)` format, will close that issue when PR gets merged)_: fixes https://github.com/kubernetes/kubernetes/issues/35498 **Special notes for your reviewer**: **Release note**: ``` release-note The annotation "pod.alpha.kubernetes.io/initialized" on StatefulSets (formerly PetSets) is now optional and only encouraged for debug use. ``` cc @erictune @smarterclayton @bprashanth @kubernetes/sig-apps @kow3ns The examples will need to be cleaned up as well I think later on to remove them.
parents 99802917 5c3792a4
......@@ -297,22 +297,25 @@ type petHealthChecker interface {
// It doesn't update, probe or get the pod.
type defaultPetHealthChecker struct{}
// isHealthy returns true if the pod is running and has the
// "pod.alpha.kubernetes.io/initialized" set to "true".
// isHealthy returns true if the pod is ready & running. If the pod has the
// "pod.alpha.kubernetes.io/initialized" annotation set to "false", pod state is ignored.
func (d *defaultPetHealthChecker) isHealthy(pod *api.Pod) bool {
if pod == nil || pod.Status.Phase != api.PodRunning {
return false
}
podReady := api.IsPodReady(pod)
// User may have specified a pod readiness override through a debug annotation.
initialized, ok := pod.Annotations[StatefulSetInitAnnotation]
if !ok {
glog.Infof("StatefulSet pod %v in %v, waiting on annotation %v", api.PodRunning, pod.Name, StatefulSetInitAnnotation)
return false
}
b, err := strconv.ParseBool(initialized)
if err != nil {
return false
if ok {
if initAnnotation, err := strconv.ParseBool(initialized); err != nil {
glog.Infof("Failed to parse %v annotation on pod %v: %v", StatefulSetInitAnnotation, pod.Name, err)
} else if !initAnnotation {
glog.Infof("StatefulSet pod %v waiting on annotation %v", pod.Name, StatefulSetInitAnnotation)
podReady = initAnnotation
}
}
return b && api.IsPodReady(pod)
return podReady
}
// isDying returns true if the pod has a non-nil deletion timestamp. Since the
......
......@@ -889,6 +889,9 @@ func newStatefulSet(name, ns, governingSvcName string, replicas int32, petMounts
ObjectMeta: api.ObjectMeta{
Name: name,
Namespace: ns,
Annotations: map[string]string{
"pod.alpha.kubernetes.io/initialized": "false",
},
},
Spec: apps.StatefulSetSpec{
Selector: &unversioned.LabelSelector{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment