{"id":30272,"date":"2019-10-31T21:34:36","date_gmt":"2019-10-31T18:34:36","guid":{"rendered":"https:\/\/prohoster.info\/blog\/kubernetes-1-14-obzor-osnovnyh-novshestv\/"},"modified":"2019-10-31T21:34:36","modified_gmt":"2019-10-31T18:34:36","slug":"kubernetes-1-14-obzor-osnovnyh-novshestv","status":"publish","type":"post","link":"https:\/\/prohoster.info\/en\/blog\/kubernetes-1-14-obzor-osnovnyh-novshestv","title":{"rendered":"Kubernetes 1.13: an overview of major innovations","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Kubernetes 1.13: an overview of major innovations\" src=\"\/wp-content\/uploads\/2019\/03\/8fb5be29668f55ec42d31eb47200b639.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTonight <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/sig-release\/tree\/master\/releases\/release-1.14#timeline\">there will be<\/a><\/noindex> another release of Kubernetes \u2014 <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/sig-release\/tree\/master\/releases\/release-1.14\">1.14<\/a><\/noindex>. As is tradition for our blog, we will discuss the key changes in this new version of this wonderful Open Source product.<\/p>\n<p>The information used to prepare this material was taken from <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.google.com\/spreadsheets\/u\/1\/d\/116X6E-lmDJG5UZPlqDAFw8hN9vS6SNY4qRNZ9fKtsMU\/edit#gid=0\">Kubernetes enhancements tracking table<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/blob\/release-1.14\/CHANGELOG-1.14.md\">CHANGELOG-1.14<\/a><\/noindex> and the relevant issues, pull requests, Kubernetes Enhancement Proposals (KEP).<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p>Let's start with an important introduction from SIG cluster-lifecycle: <b>dynamic fault-tolerant clusters<\/b> Kubernetes (or more precisely, self-hosted HA deployments) can now <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/issues\/357\">be created<\/a><\/noindex> using familiar (in the context of single-node clusters) commands <code>kubeadm<\/code> (<code>init<\/code> and <code>join<\/code>). In short, to do this:<\/p>\n<ul>\n<li> the certificates used by the cluster are transferred to secrets;<\/li>\n<li> to enable the use of etcd within the K8s cluster (i.e., eliminating the external dependency that has existed so far), <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/coreos\/etcd-operator\">the etcd-operator<\/a><\/noindex>;<\/li>\n<li> documents recommended settings for an external load balancer, ensuring a fault-tolerant configuration (in the future, there are plans to eliminate this dependency as well, but not at this stage).<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Kubernetes 1.13: an overview of major innovations\" src=\"\/wp-content\/uploads\/2019\/03\/0e82b7e8db1ad117dc87f68fa4669431.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Architecture of the HA cluster Kubernetes, created with kubeadm<\/i><\/p>\n<p>Details about the implementation can be found in <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.google.com\/document\/d\/1P3oUJ_kdaRSTlGONujadGBpYegjn4RjBNZLHZ4zU7lI\/edit#\">design proposal<\/a><\/noindex>. This feature was truly long-awaited: the alpha version was expected back in K8s 1.9 but has only now appeared.<\/p>\n<h2>API<\/h2>\n<p>\nThe command <code>Apply<\/code> And overall <b>declarative object management<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/issues\/555\">have been moved<\/a><\/noindex> from <code>kubectl<\/code> to the apiserver. The developers briefly explain their decision by stating that <code>kubectl apply<\/code> \u2014 it\u2019s a fundamental part of working with configurations in Kubernetes, but it's \"full of bugs and difficult to fix,\" hence this functionality needs to be brought to a normal state and moved to the control plane. Simple and clear examples of existing problems today:<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes 1.13: an overview of major innovations\" src=\"\/wp-content\/uploads\/2019\/03\/379b0d830491bbb0e7ac3c3ccfff71c4.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDetails on the implementation \u2014 in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/blob\/master\/keps\/sig-api-machinery\/0006-apply.md\">KEP<\/a><\/noindex>. The current readiness \u2014 alpha version (promotion to beta is scheduled for the next Kubernetes release).<\/p>\n<p>In the alpha version, it has become available <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/issues\/692\">of<\/a><\/noindex> to use the OpenAPI v3 scheme for <b>creating and publishing OpenAPI documentation for CustomResources<\/b> (CR), used for validating (on the server side) user-defined K8s resources (CustomResourceDefinition, CRD). Publishing OpenAPI for CRD allows clients (for example, <code>kubectl<\/code>) to perform validation on their side (within <code>kubectl create<\/code> and <code>kubectl apply<\/code>) and provide schema documentation (<code>kubectl explain<\/code>). Details \u2014 in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/blob\/master\/keps\/sig-api-machinery\/00xx-publish-crd-openapi.md\">KEP<\/a><\/noindex>.<\/p>\n<p>The previously existing logs <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/74837\">are now opened<\/a><\/noindex> with the flag <code>O_APPEND<\/code> (not <code>O_TRUNC<\/code>) to avoid log loss in some situations and for the convenience of truncating logs by external utilities for rotation.<\/p>\n<p>In the context of the Kubernetes API, it is also worth noting that <code>PodSandbox<\/code> and <code>PodSandboxStatus<\/code> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/73833\">added<\/a><\/noindex> field <code>runtime_handler<\/code> to account for information about <code>RuntimeClass<\/code> in the pod (read more about it in the text regarding <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424331\/\">Kubernetes release 1.12<\/a><\/noindex>, where this class was introduced as an alpha version), and in Admission Webhooks <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/74998\">within<\/a><\/noindex> the ability to determine which versions <code>AdmissionReview<\/code> they support. Finally, Admission Webhook rules now <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/74477\">can limit<\/a><\/noindex> the scale of their application in namespaces and cluster boundaries.<\/p>\n<h2>Storage<\/h2>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/#local\"><code><b>Persistent Local Volumes<\/b><\/code><\/a><\/noindex>, which had beta status since the release of <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/353114\/\">K8s 1.10<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/74769\">has been declared<\/a><\/noindex> stable (GA): this feature gate is no longer disabled and will be removed in Kubernetes 1.17.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/issues\/559\">Possibility of<\/a><\/noindex> the use of environment variables from the so-called <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/inject-data-application\/downward-api-volume-expose-pod-information\/#capabilities-of-the-downward-api\">Downward API<\/a><\/noindex> (for example, the name of the pod) for the names of directories mounted as <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/storage\/volumes\/#using-subpath\"><code>subPath<\/code><\/a><\/noindex>, has developed \u2014 in the form of a new field <code>subPathExpr<\/code>, which now defines the desired directory name. Initially, the feature appeared in Kubernetes 1.11, but remained in alpha status for 1.14.<\/p>\n<p>As with the previous Kubernetes release, many significant changes have been presented for the actively developing CSI (Container Storage Interface):<\/p>\n<h3>CSI<\/h3>\n<p>\nhas become available (in alpha status) <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/issues\/556\">disabling the tracker blocking<\/a><\/noindex> <b>for resizing CSI volumes.<\/b>To use it, you will need to enable the feature gate called <code>ExpandCSIVolumes<\/code>, as well as support for this operation in the specific CSI driver.<\/p>\n<p>Another alpha feature for CSI is <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/issues\/596\">of<\/a><\/noindex> to refer directly (i.e., without using PV\/PVC) to CSI volumes within the pod specifications. This <b>removes the limitation of using CSI solely as remote data storage<\/b>, opening the door for them to the world of <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes-csi.github.io\/docs\/ephemeral-local-volumes.html\">local ephemeral volumes.<\/a><\/noindex>To use it (<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/vladimirvivien\/kubernetes.github.io\/blob\/b78107abfdb2b5877973b84062d93cdf98ef1b9c\/content\/en\/docs\/concepts\/storage\/volumes.md#csi-ephemeral-volumes\">example from the documentation<\/a><\/noindex>), it is necessary to enable <code>the CSIInlineVolume<\/code> feature gate.<\/p>\n<p>Progress has also been observed in the 'internals' of Kubernetes related to CSI, which are not immediately noticeable to end users (system administrators)\u2026 At present, developers have to maintain two versions of each storage plugin: one \u2014 'the old way', within the K8s codebase (in-tree), and the second \u2014 within the new CSI <i>(read more about it, for example, in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/424211\/\">here<\/a><\/noindex>)<\/i>This creates understandable inconveniences that must be addressed as CSI stabilizes in its own right. Simply declaring the internal (in-tree) plugin APIs as deprecated is not feasible due to <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/reference\/using-api\/deprecation-policy\/#deprecating-parts-of-the-api\">the relevant Kubernetes policy.<\/a><\/noindex>.<\/p>\n<p>All of this has led to the alpha versions reaching <b><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/issues\/625\">the migration process<\/a><\/noindex> of the internal plugin code<\/b>, implemented as in-tree, into CSI plugins, which will reduce developers' concerns to supporting a single version of their plugins, while maintaining compatibility with older APIs, allowing them to be declared deprecated by the usual scenario. It is expected that by the next release of Kubernetes (1.15), all cloud provider plugins will be migrated, the implementation will attain beta status, and will be activated in K8s installations by default. For details, see <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/community\/blob\/master\/contributors\/design-proposals\/storage\/csi-migration.md\">design proposal<\/a><\/noindex>. The consequence of this migration was also <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/74544\">the abandonment<\/a><\/noindex> of volume constraints defined by specific cloud providers (AWS, Azure, GCE, Cinder).<\/p>\n<p>Additionally, support for block devices with CSI (<code>CSIBlockVolume<\/code>) <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/74909\">has been transitioned<\/a><\/noindex> to beta status.<\/p>\n<h2>Nodes \/ Kubelet<\/h2>\n<p>\nAn alpha version <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/issues\/727\">of a new endpoint<\/a><\/noindex> in Kubelet, intended for <b>delivering metrics on core resources<\/b>. Generally speaking, while Kubelet used to receive container usage statistics from cAdvisor, now this data comes from the container runtime via CRI (Container Runtime Interface), but compatibility with older Docker versions is maintained. Previously collected statistics in Kubelet were provided through REST API, and now an endpoint located at <code>\/metrics\/resource\/v1alpha1<\/code>is used for this purpose. The long-term strategy of the developers <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/issues\/68522\">consists of<\/a><\/noindex> is to minimize the set of metrics provided by Kubelet. <i>By the way, these metrics <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/pull\/726\">are now referred to as<\/a><\/noindex> not 'core metrics', but 'resource metrics', describing them as 'first-class resources, such as CPU and memory'.<\/i><\/p>\n<p>A rather interesting nuance: despite the clear performance advantage of the gRPC endpoint compared to various use cases of the Prometheus format <i>(result of one of the benchmarks see below)<\/i>, the authors preferred the text format of Prometheus due to the clear leadership of this monitoring system in the community.<\/p>\n<blockquote><p><i>\"gRPC is not compatible with major monitoring pipelines. The Endpoint will only be useful for delivering metrics to the Metrics Server or monitoring components that integrate directly with it. When caching is used in the Metrics Server, the performance of the Prometheus text format <b>is quite good<\/b> for us to prefer Prometheus over gRPC, considering the widespread use of Prometheus in the community. When the OpenMetrics format becomes more stable, we can achieve gRPC-like performance with the proto-based format.\"<\/i><\/p><\/blockquote>\n<p>\n<img decoding=\"async\" alt=\"Kubernetes 1.13: an overview of major innovations\" src=\"\/wp-content\/uploads\/2019\/03\/ad7e45b61fc4676a2df3c2d33d5688b5.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>One of the comparative performance tests using the gRPC and Prometheus formats in the new Kubelet endpoint for metrics. More graphs and other details can be found in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/blob\/master\/keps\/sig-node\/kubelet-resource-metrics-endpoint.md\">KEP<\/a><\/noindex>.<\/i><\/p>\n<p>Among other changes:<\/p>\n<ul>\n<li> Kubelet now (once) <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/73802\">tries to stop<\/a><\/noindex> containers in unknown state before restart and delete operations.<\/li>\n<li> When using <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/podpreset\/\"><code>PodPresets<\/code><\/a><\/noindex> now have the same information as regular containers. <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/71479\">is added<\/a><\/noindex> the same information as a regular container.<\/li>\n<li> Kubelet <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/73659\">has started using<\/a><\/noindex> <code>usageNanoCores<\/code> from the CRI statistics provider, and for nodes and containers in Windows <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/74788\">has added<\/a><\/noindex> network statistics.<\/li>\n<li> Information about the operating system and architecture is now recorded in labels <code>kubernetes.io\/os<\/code> and <code>kubernetes.io\/arch<\/code> of Node objects (moved from beta to GA).<\/li>\n<li> The ability to specify a particular system user group for containers in the pod (<code>RunAsGroup<\/code>) appeared in <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/415349\/\">K8s 1.11<\/a><\/noindex>) <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/73007\">has progressed<\/a><\/noindex> to beta version (enabled by default).<\/li>\n<li> du and find, used in cAdvisor, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/74675\">have been replaced<\/a><\/noindex> with Go implementations.<\/li>\n<\/ul>\n<p><\/p>\n<h2>CLI<\/h2>\n<p>\nIn cli-runtime and kubectl <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/74140\">implemented<\/a><\/noindex> the -k flag for integration with <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/kustomize\"><b>kustomize<\/b><\/a><\/noindex> (by the way, its development is now carried out in a separate repository), i.e., for processing additional YAML files from specialized kustomization directories (details on their use can be found in <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/blob\/master\/keps\/sig-cli\/kustomize-file-processing-integration.md\">KEP<\/a><\/noindex>):<\/p>\n<p><img decoding=\"async\" alt=\"Kubernetes 1.13: an overview of major innovations\" src=\"\/wp-content\/uploads\/2019\/03\/e38550cfb642d81237aad4d87b9b3386.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Example of simple usage of the file <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/kustomize\/blob\/master\/docs\/glossary.md#kustomization\">kustomization<\/a><\/noindex> (possibly more complex applications of kustomize within <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes-sigs\/kustomize\/blob\/master\/docs\/glossary.md#overlay\">overlays<\/a><\/noindex>)<\/i><\/p>\n<p>Additionally:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/71651\">Added<\/a><\/noindex> a new command <code>kubectl create cronjob<\/code>, the name of which speaks for itself.<\/li>\n<li> In <code>kubectl logs<\/code> can now be <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/67573\">combined<\/a><\/noindex> Support for system-versioned tables has been expanded, which not only store the current snapshot of data but also retain information about all previously made changes. <code>-f<\/code> (<code>--follow<\/code> for streaming logs) and <code>-l<\/code> (<code>--selector<\/code> for label query).<\/li>\n<li> kubectl <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/72641\">learned to<\/a><\/noindex> copy files selected by wildcard.<\/li>\n<li> In the command <code>kubectl wait<\/code> <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/70599\">added<\/a><\/noindex> flag <code>--all<\/code> to select all resources in the specified resource type namespace.<\/li>\n<\/ul>\n<p><\/p>\n<h2>Others<\/h2>\n<p>\nThe following features have attained stable (GA) status:<\/p>\n<ul>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/workloads\/pods\/pod-lifecycle\/#pod-readiness-gate\"><code>ReadinessGate<\/code><\/a><\/noindex>, used in the pod specification to define additional conditions considered in the readiness of the pod;<\/li>\n<li> Support for large pages (feature gate named <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/tasks\/manage-hugepages\/scheduling-hugepages\/\"><code>HugePages<\/code><\/a><\/noindex>);<\/li>\n<li> <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/dns-pod-service\/#pod-s-dns-config\">CustomPodDNS<\/a><\/noindex>;<\/li>\n<li> PriorityClass API, <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/configuration\/pod-priority-preemption\/\">Pod Priority &amp; Preemption<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\nOther changes introduced in Kubernetes 1.14:<\/p>\n<ul>\n<li> The default RBAC policy no longer grants access to the API <code>discovery<\/code> and <code>access-review<\/code> to users without authentication <i>(unauthenticated)<\/i>.<\/li>\n<li> Official CoreDNS support <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/69940\">is provided<\/a><\/noindex> only for Linux, so when using kubeadm for its (CoreDNS) deployment in the cluster, nodes must run exclusively on Linux (this restriction uses nodeSelectors).<\/li>\n<li> The default CoreDNS configuration now <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/73267\">use<\/a><\/noindex> <noindex><a rel=\"nofollow\" href=\"https:\/\/coredns.io\/plugins\/forward\/\">uses the forward<\/a><\/noindex> plugin instead of proxy. Additionally, in CoreDNS <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/74137\">has added<\/a><\/noindex> readinessProbe, preventing load balancing to the corresponding (not ready for servicing) pods.<\/li>\n<li> In kubeadm, during the phases <code>init<\/code> or <code>upload-certs<\/code>, <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/73907\">it is now possible<\/a><\/noindex> to upload the certificates required for connecting a new control-plane to the kubeadm-certs secret (the flag used is <code>--experimental-upload-certs<\/code>).<\/li>\n<li> For Windows installations, an alpha version has been released <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/enhancements\/issues\/689\">supporting<\/a><\/noindex> gMSA (Group Managed Service Account) \u2014 special accounts in Active Directory that can be used by containers.<\/li>\n<li> For GCE <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/kubernetes\/pull\/70144\">mTLS encryption between etcd and kube-apiserver has been enabled.<\/a><\/noindex> Updates in the used\/dependent software: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, support for Docker 18.09 in kubeadm, and the minimum supported Docker API version became 1.26.<\/li>\n<li> Kubernetes 1.12: summary of key features<\/li>\n<\/ul>\n<p><\/p>\n<h2>P.S.<\/h2>\n<p>\nAlso read in our blog:<\/p>\n<ul>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/432208\/\">Introduction to SSD. Part 1. Historical<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/424331\/\">Kubernetes 1.11: summary of key features<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/415349\/\">Kubernetes 1.10: summary of key features<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/flant\/blog\/353114\/\">\ud83e\udd47Kubernetes 1.14: summary of key features | ProHoster<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>Source: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/445196\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u042d\u0442\u043e\u0439 \u043d\u043e\u0447\u044c\u044e \u0441\u043e\u0441\u0442\u043e\u0438\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0435\u043b\u0438\u0437 Kubernetes \u2014 1.14. \u041f\u043e \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0434\u043b\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u043b\u043e\u0433\u0430 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u0438, \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445 \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e Open Source-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u044d\u0442\u043e\u0433\u043e \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430, \u0432\u0437\u044f\u0442\u0430 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b Kubernetes enhancements tracking, CHANGELOG-1.14 \u0438 \u0441\u043e\u043e\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 issues, pull requests, Kubernetes Enhancement Proposals (KEP). \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0432\u0430\u0436\u043d\u043e\u0433\u043e \u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u0442 SIG cluster-lifecycle: \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-30272","post","type-post","status-publish","format-standard","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u042d\u0442\u043e\u0439 \u043d\u043e\u0447\u044c\u044e\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/en\/blog\/kubernetes-1-14-obzor-osnovnyh-novshestv\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Kubernetes 1.14: \u043e\u0431\u0437\u043e\u0440 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043d\u043e\u0432\u0448\u0435\u0441\u0442\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u042d\u0442\u043e\u0439 \u043d\u043e\u0447\u044c\u044e\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/en\/blog\/kubernetes-1-14-obzor-osnovnyh-novshestv\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:34:36+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:34:36+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Kubernetes 1.14: overview of key innovations | ProHoster","description":"Tonight","canonical_url":"https:\/\/prohoster.info\/en\/blog\/kubernetes-1-14-obzor-osnovnyh-novshestv","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"en_US","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Kubernetes 1.14: \u043e\u0431\u0437\u043e\u0440 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043d\u043e\u0432\u0448\u0435\u0441\u0442\u0432 | ProHoster","og:description":"\u042d\u0442\u043e\u0439 \u043d\u043e\u0447\u044c\u044e","og:url":"https:\/\/prohoster.info\/en\/blog\/kubernetes-1-14-obzor-osnovnyh-novshestv","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:34:36+00:00","article:modified_time":"2019-10-31T18:34:36+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30272","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 00:28:09","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:37:28","updated":"2026-01-21 00:28:09","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/30272","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/comments?post=30272"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/posts\/30272\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/media?parent=30272"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/categories?post=30272"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/en\/wp-json\/wp\/v2\/tags?post=30272"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}