Kubernetes 1.14:关键创新概述



Kubernetes- 1.14 将于今晚发布。 根据我们博客的发展传统,我们正在谈论此出色的开源产品新版本中的关键更改。

用于准备此材料的信息来自Kubernetes增强跟踪表 CHANGELOG-1.14和相关问题,请求,Kubernetes增强提案(KEP)。 更新 (3月26日): 官方发布公告也出现在K8s博客上。

让我们从SIG集群生命周期的重要介绍开始:现在可以使用常用的(在单节点集群的情况下) kubeadminitjoin )命令创建 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 createkubectl apply ),并根据方案发布文档( kubectl explain )。 详细信息在KEP中

现在 ,将使用O_APPEND标志(而不是O_TRUNC打开预先存在的日志,以避免在某些情况下丢失日志,并方便使用外部O_TRUNC实用程序截断日志。

同样在Kubernetes API的上下文中,应该指出的是,在PodSandboxPodSandboxStatusruntime_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/oskubernetes.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中,在initupload-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。

聚苯乙烯


另请参阅我们的博客:

Source: https://habr.com/ru/post/zh-CN445196/


All Articles