
Kubernetes-
1.14 将于今晚发布。 根据我们博客的发展传统,我们正在谈论此出色的开源产品新版本中的关键更改。
用于准备此材料的信息来自
Kubernetes增强跟踪表 CHANGELOG-1.14和相关问题,请求,Kubernetes增强提案(KEP)。
更新 (3月26日):
官方发布公告也出现在K8s博客上。
让我们从SIG集群生命周期的重要介绍开始:现在
可以使用常用的(在单节点集群的情况下)
kubeadm
(
init
和
join
)命令
创建 Kubernetes
动态故障转移集群 (更确切地说是自托管HA部署)。 简而言之,为此:
- 集群使用的证书被转换为秘密;
- 为了在K8s集群内部使用etcd集群(即摆脱迄今为止存在的外部依赖关系)的可能性,使用了etcd 运算符 ;
- 记录了提供容错配置的外部负载均衡器的建议设置(将来,计划了这种依赖关系导致失败的可能性,但目前尚未计划)。
使用kubeadm构建的Kubernetes HA集群架构实施细节可在
设计方案中找到。 这个功能确实期待已久:Alpha版本早在K8s 1.9中就已出现,但现在才出现。
API
apply
命令和通常的
声明式对象管理已从
kubectl
移至apiserver。 开发人员自己通过说
kubectl apply
是在Kubernetes中使用配置的基础部分来简要解释他们的决定,但是,它“充满了错误且难以修复”,因此该功能需要恢复正常并转移到控制平面。 当今问题的简单说明性示例:

具体实施方式请参见
KEP 。 当前的可用性是Alpha版本(计划在下一版Kubernetes中推广到beta)。
在Alpha版本中,已经
可以使用OpenAPI v3方案
在CustomResources (CR)
上创建和发布OpenAPI文档,该文档用于验证(服务器端)用户定义的K8s资源(CustomResourceDefinition,CRD)。 发布用于CRD的OpenAPI允许客户端(例如
kubectl
)在其端执行验证(作为
kubectl create
和
kubectl apply
),并根据方案发布文档(
kubectl explain
)。 详细信息在
KEP中 。
现在 ,将使用
O_APPEND
标志(而不是
O_TRUNC
)
打开预先存在的日志,以避免在某些情况下丢失日志,并方便使用外部
O_TRUNC
实用程序截断日志。
同样在Kubernetes API的上下文中,应该指出的是,在
PodSandbox
和
PodSandboxStatus
中
runtime_handler
PodSandboxStatus
字段,以考虑到pod中有关
RuntimeClass
信息(在有关
Kubernetes 1.12版本的文本(该类以Alpha版本形式出现)中以及在准入Webhooks
实现了确定他们支持哪些版本的
AdmissionReview
功能。 最后,在Admission Webhooks规则中,
您现在
可以将其应用程序
的范围
限制为名称空间和群集范围。
仓储设施
自
K8s 1.10发行以来具有beta状态的
PersistentLocalVolume被
声明为稳定(GA):此功能门将不再被禁用,并将在Kubernetes 1.17中被删除。
已经开发了使用所谓的
Downward API的环境变量(例如,吊舱名称)作为挂载为
subPath
目录名称的功能-以新的
subPathExpr
字段的形式,现在可以使用该字段确定所需的目录名称。 最初,该功能出现在Kubernetes 1.11中,但在1.14版本中,它仍处于Alpha版本状态。
与先前的Kubernetes版本一样,为快速发展的CSI(容器存储接口)引入了许多重大更改:
CSI
现已提供
对 调整大小的CSI卷 支持 (作为Alpha版本的一部分)。 要使用它,您将需要启用称为
ExpandCSIVolumes
的功能门,并在特定的CSI驱动程序中支持此操作。
alpha版本中CSI的另一个功能是可以直接(即不使用PV / PVC)引用CSI卷作为Pod规范的一部分。 这
消除了将CSI用作专门的远程数据仓库的限制 ,从而为它们打开了
本地临时卷的大门。 要使用(
来自文档的示例 ),必须启用
CSIInlineVolume
功能门。
Kubernetes的“内部”与CSI相关,这在最终用户(系统管理员)中并不那么明显。...目前,开发人员被迫支持每个存储插件的两个版本:一个在K8s代码库中(以旧方式)(在-tree)和第二个-作为新CSI的一部分
(例如,在此处了解更多信息) 。 这会导致可理解的不便,随着CSI的稳定,需要解决该不便。 由于有
相应的Kubernetes策略,因此不可能简单地弃用树中插件的弃用API。
所有这些导致了这样一个事实,即Alpha版本达到了将以树
内形式实现的插件内部代码迁移到CSI插件的过程,因此,开发人员的担忧将减少到支持其插件的一个版本,并且将保留与旧API的兼容性,并且可以像往常一样声明过时。 预计到下一个Kubernetes版本(1.15),将迁移所有云提供程序插件,该实现将获得beta状态,并将在默认的K8s安装中激活。 有关详细信息,请参见
设计建议 。 这种迁移还导致
拒绝了特定云提供商(AWS,Azure,GCE,Cinder)定义的卷的限制。
此外,对CSI块设备(
CSIBlockVolume
)的支持已
转换为beta。
节点/ Kubelet
在Kubelet中引入了
新端点的alpha版本,该
端点旨在
返回主要资源的指标 。 一般来说,如果Kubelet曾经从cAdvisor获取有关容器使用情况的统计信息,那么现在这些数据是通过CRI(容器运行时接口)来自容器运行时的,但是保留了与旧版本Docker的兼容性。 以前,在Kubelet中收集的统计信息是通过REST API提供的,但是现在,它使用位于
/metrics/resource/v1alpha1
。 开发人员的长期策略
是最小化Kubelet提供的一组指标。
顺便说一句,这些指标本身现在不称为 “核心指标”,而是“资源指标”,并被描述为“一流的资源,例如cpu和内存”。一个非常有趣的细微差别:尽管与使用Prometheus格式的不同情况相比,gRPC端点性能具有明显的优势
(基准测试的一种结果见下文) ,但由于该监视系统在社区中的领导地位很明显,因此作者更喜欢Prometheus文本格式。
“ GRPC与主要的监视管道不兼容。 端点仅可用于将度量标准传送到Metrics Server或监视直接与其集成的组件。 在Metrics Server中使用缓存时,鉴于Prometheus在社区中的广泛使用,Prometheus文本格式的性能足以让我们更喜欢Prometheus而不是gRPC。 当OpenMetrics格式变得更加稳定时,我们可以使用基于原型的格式来接近gRPC性能。”
在新的Kubelet端点中使用gRPC和Prometheus格式的比较性能测试之一,用于度量。 可以在KEP中找到更多图表和其他详细信息。除其他更改外:
- Kubelet现在在
--system-reserved
和--kube-reserved
选项中接受 pid=<number>
参数,从而确保为整个系统或Kubernetes系统守护程序分别保留指定的PID。 启用功能门(称为SupportNodePidsLimit
,将激活该功能。 - Kubelet现在(一次) 尝试在重新启动和删除操作之前停止处于未知状态的容器。
- 使用
PodPresets
,现在PodPresets
相同信息作为常规容器添加到 init容器中。 - Kubelet 开始使用 CRI统计提供者提供的
usageNanoCores
,并为Windows上的节点和容器添加了网络统计信息。 - 现在,有关操作系统和体系结构的信息记录在Node对象的
kubernetes.io/os
和kubernetes.io/arch
中(从beta转移到GA)。 - 为容器中的容器(
RunAsGroup
,出现在K8s 1.11中 )指定特定的系统用户组的功能已升级到beta版(默认情况下启用)。 - cAdvisor中使用的du和find被Go实现取代 。
命令行界面
-k标志已
添加到 cli-runtime和kubectl中,以便与
kustomize集成(顺便说一下,它现在正在单独的存储库中开发),即 用于处理来自特殊kustomization目录的其他YAML文件(有关其使用的详细信息,请参见
KEP ):
简单使用kustomization文件的示例 ( 也可以在叠加图中更复杂地使用kustomize)另外:
- kubectl徽标及其文档已更新 -请参阅kubectl.docs.kubernetes.io 。

- 添加了一个新的
kubectl create cronjob
命令,其名称说明kubectl create cronjob
。 - 在
kubectl logs
您现在可以将标志-f
(对于流日志使用--follow
)和-l
(对于标签查询使用--selector
)进行组合。 - kubectl 教复制用通配符选择的文件。
--all
标志已添加到 kubectl wait
命令中,以选择指定资源类型的名称空间中的所有资源。- 声明了kubectl的稳定插件机制。
其他
稳定(GA)状态具有以下功能:
Kubernetes 1.14中引入的其他更改:
- 默认的RBAC策略不再提供对
discovery
API的access-review
对未认证用户的 access-review
。 - 仅对Linux 提供对CoreDNS的官方支持,因此在集群中将kubeadm(CoreDNS)部署使用kubeadm时,节点只能在Linux中工作(nodeSelectors用于此限制)。
- 现在,默认的CoreDNS配置使用 转发插件而不是代理。 此外,readinessProbe已添加到 CoreDNS中,以防止在相应的(未准备就绪)吊舱上进行负载平衡。
- 在kubeadm中,在
init
或upload-certs
, 可以将将新的控制面板连接到kubeadm-certs秘密--experimental-upload-certs
所需的证书(使用了--experimental-upload-certs
标志)。 - 对于Windows安装,已经出现了对 gMSA(组托管服务帐户)(Active Directory中的特殊帐户,可以供容器使用)的支持的Alpha版本。
- 对于GCE ,在etcd和kube-apiserver之间激活了 mTLS加密。
- 使用过的/相关软件的更新:Go 1.12.1,CSI 1.1,CoreDNS 1.3.1,在kubeadm中支持Docker 18.09,并且最低支持的Docker API版本为1.26。
聚苯乙烯
另请参阅我们的博客: