I have couple of questions regarding the configMap versioning.
Is it possible to use a specific version of a configMap in the deployment file?
I dont see any API's to get list of versions. How to get the list of versions?
Is it possible to compare configMap b/w versions?
Thanks
Is it possible to use a specific version of a configMap in the deployment file?
Not really.
The closest notion of a "version" is resourceVersion, but that is not for the user to directly act upon.
See API conventions: concurrency control and consistency:
Kubernetes leverages the concept of resource versions to achieve optimistic concurrency. All Kubernetes resources have a "
resourceVersion
" field as part of their metadata. ThisresourceVersion
is a string that identifies the internal version of an object that can be used by clients to determine when objects have changed.
When a record is about to be updated, it's version is checked against a pre-saved value, and if it doesn't match, the update fails with aStatusConflict
(HTTP status code 409).The
resourceVersion
is changed by the server every time an object is modified. IfresourceVersion
is included with thePUT
operation the system will verify that there have not been other successful mutations to the resource during a read/modify/write cycle, by verifying that the current value ofresourceVersion
matches the specified value.The
resourceVersion
is currently backed by etcd'smodifiedIndex
.
However, it's important to note that the application should not rely on the implementation details of the versioning system maintained by Kubernetes. We may change the implementation ofresourceVersion
in the future, such as to change it to a timestamp or per-object counter.The only way for a client to know the expected value of
resourceVersion
is to have received it from the server in response to a prior operation, typically aGET
. This value MUST be treated as opaque by clients and passed unmodified back to the server.
Clients should not assume that the resource version has meaning across namespaces, different kinds of resources, or different servers.
Currently, the value ofresourceVersion
is set to match etcd's sequencer. You could think of it as a logical clock the API server can use to order requests. However, we expect the implementation ofresourceVersion
to change in the future, such as in the case we shard the state by kind and/or namespace, or port to another storage system.In the case of a conflict, the correct client action at this point is to
GET
the resource again, apply the changes afresh, and try submitting again.
This mechanism can be used to prevent races like the following:
Client #1 Client #2
GET Foo GET Foo
Set Foo.Bar = "one" Set Foo.Baz = "two"
PUT Foo PUT Foo
When these sequences occur in parallel, either the change to
Foo.Bar
or the change toFoo.Baz
can be lost.On the other hand, when specifying the
resourceVersion
, one of thePUT
s will fail, since whichever write succeeds changes theresourceVersion
forFoo
.
resourceVersion
may be used as a precondition for other operations (e.g.,GET
,DELETE
) in the future, such as for read-after-write consistency in the presence of caching."Watch" operations specify
resourceVersion
using a query parameter. It is used to specify the point at which to begin watching the specified resources.
This may be used to ensure that no mutations are missed between aGET
of a resource (or list of resources) and a subsequent Watch, even if the current version of the resource is more recent.
This is currently the main reason that list operations (GET
on a collection) returnresourceVersion
.