Kubernetes Versions¶
Unlike the lower-level Kubernetes Python Client, a single version of the kuber library contains multiple Kubernetes API version targets within a single installation. When loading/creating resources or resource bundles, the desired version of Kubernetes can be specified.
Specifying Versions¶
Kubernetes versions in kuber can be specified in two interchangeable ways:
- Version Labels: Versions can be specified as strings, e.g.
"1.20"
, or - KubernetesVersion: an object that contains the version label string along with other version related information.
In most cases, either of these can used. If the version label is used, it will
be converted to a KubernetesVersion
object internally.
Explicit Versions¶
Explicit Kubernetes versions in kuber are represented by the Major_Minor
version syntax and prefixed with a v
, e.g. v1.20
for version
1.20.x
. The latest available patch level for each Kubernetes version will
always be used when generating the configuration subpackages in kuber. Patch
level distinctions are ignored by kuber because the configuration API is
consistent across patch versions.
For example, to using Kubernetes version 1.20
in kuber would look like:
from kuber.v1.20 import core_v1
service = core_v1.Service()
config_map = core_v1.ConfigMap()
Or when dealing with resource bundles, the version is specified when creating the bundle and that version will be used by all resources loaded by that bundle:
import kuber
bundle = kuber.from_directory(
"./foo/",
kubernetes_version="1.20"
)
Floating Versions¶
To keep pace with the ongoing development of Kubernetes there are also
two special versions available, latest
and pre
that will float
from version to version over time. The latest
version will always point
to the most recent stable version of Kubernetes available at the time the
library was published. Similarly, the pre
version will always point to
the latest pre-release (alpha or beta) version of Kubernetes available at
the time of publishing.
These special version can be used in exactly the same way as the explicit versions within kuber:
import kuber
from kuber.latest import core_v1
service = core_v1.Service()
config_map = core_v1.ConfigMap()
bundle = kuber.create_bundle("latest")
bundle.add(service, config_map)
or for the pre-release version:
from kuber.pre import core_v1 service = core_v1.Service() config_map = core_v1.ConfigMap() bundle = kuber.create_bundle("pre") bundle.add(service, config_map)
To find out the specific version information for any versions, explicit or
floating, you can import that version of the package and print the version
info object constant in that module. For example, to find out the specific
version of the pre
subpackage:
from kuber import pre
print(pre.KUBERNETES_VERSION.version)
Cluster-based Versioning¶
Often times it is most useful to write configurations that use the version
of the cluster in which they will be deployed instead of hard-coding a
version - even if it is a floating one. For that, kuber has a convenience
function that returns a KubernetesVersion
object, which can be used
in place of a hard-coded version value. The function will connect to the
currently configured cluster and return the KubernetesVersion
object
that best matches the cluster version.
In the f
import kuber
# Establich connection to the cluster currently
# configured in the local `.kubeconfig` file.
kuber.load_access_config()
# Get the version of the connected cluster or
# default to version 1.20 if unable to fetch
# version data from the cluster.
cluster_version = kuber.get_version_from_cluster("1.20")
# Use the returned `KubernetesVersion` object
# as the version for the cluster.
bundle = kuber.from_directory(
"./foo/",
kubernetes_version=cluster_version
)