• Kubernetes Submit Queue's avatar
    Merge pull request #31026 from erictune/betainit · e9bd8058
    Kubernetes Submit Queue authored
    Automatic merge from submit-queue
    
    Move init-container feature from alpha to beta.
    
    ```release-note
    Moved init-container feature from alpha to beta.
    
    In 1.3, an init container is specified with this annotation key
    on the pod or pod template: `pods.alpha.kubernetes.io/init-containers`.
    
    In 1.4, either that key or this key: pods.beta.kubernetes.io/init-containers`,
    can be used.
    
    When you GET an object, you will see both annotation keys with the same values.
    
    You can safely roll back from 1.4 to 1.3, and things with init-containers
    will still work (pods, deployments, etc).
    
    If you are running 1.3, only use the alpha annotation, or it may be lost when
    rolling forward.
    
    The status has moved from annotation key
    `pods.beta.kubernetes.io/init-container-statuses` to
    `pods.beta.kubernetes.io/init-container-statuses`.
    Any code that inspects this annotation should be changed to use the new key.
    
    State of Initialization will continue to be reported in both pods.alpha.kubernetes.io/initialized
    and in `podStatus.conditions.{status: "True", type: Initialized}`
    ```
    
    Mini-design for this change:
    
    Goals:
    1. A user can create an object with the beta annotation
      on 1.4, and it works.  The fact that the annotation has beta
      in it communicates to the user that the feature is beta,
      and so the user should have confidence in using it.  Preferably,
      when the user gets the annotation back, he see the beta
      annotation.
    1) If someone had an existing alpha object in their apiserver,
      such as a RS with a pod template with an init-containers
      annotation on it, it should continue to work (init containers
      run) when stack upgraded to 1.4.
    2) If someone is using a chart or blog post that has alpha
      annotation on it and they create it on a 1.4 cluster, it should
      work.
    3) If someone had something with an init container in 1.4
      and they roll back stack to 1.3, it should not silently stop
      working (init containers don't run anymore).
    
    To meet all these, we mirror an absent beta label from the alpha
    key and vice versa.  If they are out of sync, we use the alpha
    one. We do this in conversion since there was already logic there.
    
    In 1.3 code, all annotations are preserved across a round trip
    (v1 -> api -> v1), and the alpha annotation turns into the internal
    field that kubelet uses.
    
    In 1.4 code, the alpha annotation is always preserved across
    a round trip, and a beta annotation is always set equal to
    the alpha one, after a round trip.
    
    Currently, the kubelet always sees the object after a round trip
    when it GETs it.  But, we don't want to rely on that behavior,
    since it will break when fastpath is implemented.
    
    So, we rely on this:
    all objects either are created with an alpha annotation (1.3 or 1.4
    code) or are created with a beta annotation under 1.4.  In the later
    case, they are round tripped at creation time, and so get both
    annotations.  So all subsequent GETs see both labels.
    e9bd8058
Name
Last commit
Last update
..
annotations Loading commit data...
endpoints Loading commit data...
errors Loading commit data...
install Loading commit data...
meta Loading commit data...
pod Loading commit data...
resource Loading commit data...
rest Loading commit data...
service Loading commit data...
testapi Loading commit data...
testing Loading commit data...
unversioned Loading commit data...
util Loading commit data...
v1 Loading commit data...
validation Loading commit data...
OWNERS Loading commit data...
context.go Loading commit data...
context_test.go Loading commit data...
conversion.go Loading commit data...
conversion_test.go Loading commit data...
copy_test.go Loading commit data...
deep_copy_test.go Loading commit data...
defaults.go Loading commit data...
doc.go Loading commit data...
field_constants.go Loading commit data...
generate.go Loading commit data...
generate_test.go Loading commit data...
helpers.go Loading commit data...
helpers_test.go Loading commit data...
mapper.go Loading commit data...
meta.go Loading commit data...
meta_test.go Loading commit data...
node_example.json Loading commit data...
ref.go Loading commit data...
ref_test.go Loading commit data...
register.go Loading commit data...
replication_controller_example.json Loading commit data...
requestcontext.go Loading commit data...
resource_helpers.go Loading commit data...
resource_helpers_test.go Loading commit data...
serialization_proto_test.go Loading commit data...
serialization_test.go Loading commit data...
types.generated.go Loading commit data...
types.go Loading commit data...
zz_generated.deepcopy.go Loading commit data...