Kubernetes 1.15:亮点概述



星期一应该正式举行但是到目前为止还没有发生…… 更新于06/20:该公告出现在K8s博客上)Kubernetes的下一个版本是1.15 。 根据我们博客的发展传统,我们讨论新版本中最重要的变化。

用于准备此材料的信息来自Kubernetes增强跟踪表 CHANGELOG-1.15和相关问题,请求,以及Kubernetes增强提案(KEP)。 由于下周将在上海举行KubeCon会议,因此此版本的发布周期缩短了11周(而不是12周),但是并没有显着影响重大更改的数量。 所以走吧!..

数据仓库


引入了新的API ExecutionHook ,该API允许您在pod /容器或pod /容器组中动态执行用户命令,并使用它来实现钩子生命周期管理的相应控制器( ExecutionHookController )。 出现此功能的动机是希望为用户提供根据应用程序逻辑创建/删除快照的能力。 在创建快照之前和之后执行任何特定于应用程序的命令。 假定此类钩子在其他情况下也很有用-例如,执行更新,调试,更新配置文件,重新启动容器,为其他事件(如数据库迁移)做准备。 详细状态-KEP中的当前状态-Alpha版本(预计将在下一发行版中转换为Beta)。

在临时存储中 ,它允许您针对特定的容器/容器区分共享共享空间(共享存储)的容量添加了文件系统配额的支持 。 这种新机制使用XFS和ext4中可用的项目配额( project quotas ),从而监视资源消耗并可选地对它们施加限制。 当前状态-Alpha版本; 尚未指定未来版本的计划。

sig-storage引入的另一个新功能是使用现有的PVC作为DataSource来创建新的PVC。 换句话说,这是卷克隆功能的实现 。 克隆应该与快照区分开来,因为每个克隆都是一个新的“成熟”卷:它是作为现有卷的副本创建的,但是它完全遵循普通卷的生命周期(与快照不同,尽管快照是在特定时间点的卷副本,但不是独立的)卷)。 机会图:

 kind: PersistentVolumeClaim apiVersion: v1 metadata: name: pvc-2 namespace: myns spec: capacity: storage: 10Gi dataSource: kind: PersistentVolumeClaim name: pvc-1 

在这种情况下,将创建一个新的独立PV / PVC( pvc-2 ),其中包含与pvc-1相同的数据。 指示新的PVC应该具有与原始PVC相同的名称空间。

现有限制仅支持动态CLONE_VOLUME并且仅支持CSI插件(它们必须具有功能CLONE_VOLUME )。 在KEP了解更多信息。

以下功能已“增长”到测试版的状态(因此,在Kubernetes默认安装中已激活):

  • 持久卷大小扩展功能 “在线”,即 无需使用适当的PVC重新启动Pod。 首次(处于alpha状态)出现在K8s 1.11中。
  • 支持以 subPath挂载的目录名称的环境变量,该支持最初在K8s 1.11中引入,并在过去的1.14中开发。

但是,将旧插件的内部组件迁移到Kubernetes(树内)代码库内部实现的存储库的过程拖累了新的CSI接口插件。 预计1.15版本将完成云提供商所有插件的迁移,但是, 决定保留Alpha版本状态,因为该功能取决于K8s 1.15中引入的API,并且迄今为止仅在Alpha版本中实现(特别是,我们在谈论改进)在Azure支持中:csi-translation-lib中的Azure FileAzure Disk插件)。

策划人


Kubernetes Scheduler提供了两项值得注意的创新-到目前为止都是alpha形式。

第一个是调度框架Kubernetes Scheduling Framework ),它是用于扩展扩展现有调度程序功能的插件的一组新API。 插件是在主存储库(树外)之外创建的,但是在编译过程中包含在调度程序中。 因此,调度程序的功能核心保持尽可能简单和方便的支持,并且附加功能是单独实现的,而没有许多限制,即扩展现有调度程序功能的方式在webhooks的帮助下“受苦”。

在新框架中,每次Pod调度尝试均分为两个阶段:

  • 调度周期 -选择Pod的节点,
  • 和绑定(绑定周期) -在集群中实施所选解决方案的位置。

在这些阶段的每个阶段(它们也统称为调度上下文 ),都有许多扩展点 ,在每个扩展点上都可以调用框架插件。


(在计划框架中调用插件的生命周期。)

作为框架Alpha版的一部分,仅实现了ReserveUnreservePrebind点 。 在KEP上了解有关这项大规模创新的更多信息。

第二个是PriorityClassesNon-Preempting选项

优先级类在Kubernetes的最新版本中处于稳定(GA)状态,这影响了Pod的计划和选择:按优先级计划Pod,如果由于资源不足而无法创建Pod,则Pod较低的优先级可以被挤出以释放必要的空间。

新的选项Preempting (在PriorityClass结构中定义为布尔值)意味着:如果某个容器正在等待其计划并且Preempting=false ,则创建容器不会抢占其他容器。 在窗格接纳过程中,此字段显示在PodSpec中(类似于PriorityClass值)。 具体实施方式请参见KEP

API机械


对于CustomResources ,提出了一些改进,这些改进旨在实现以这种方式(在CRD中的JSON框架内)存储的数据,以更好地匹配公认的Kubernetes API(对于“本机” K8s对象)的行为:

  • 自动删除未在OpenAPI验证方案中指定的字段 -有关详细信息,请参见KEP“ 修剪自定义资源 ”;
  • 能够为OpenAPI v3验证方案中的字段设置默认 值的功能,这对于在向对象添加新字段时保持API兼容性特别重要,有关详细信息,请参见KEP“ 自定义资源的默认设置 ”。

最初计划将这两个功能都包含在K8s 1.12发行版中,但仅在现在它们以Alpha版本提供。

CRD的更改不限于此:

  • 发布CRD OpenAPI功能-即 Kubernetes的最新发行版中引入的服务器端CustomResources验证(使用OpenAPI v3方案)-已达到beta版,并且现在默认启用;
  • 基于外部Webhooks的CRD资源版本转换机制也已转换为beta。

另一个有趣的创新称为“ 监视书签” 。 其本质归结为在Watch API - Bookmark添加了一种新类型的事件。 此类型表示标签已由手表处理到特定resourceVersion所有对象。 这种机制将减少kube-apiserver的负担,减少每次重启手表时需要处理的事件数量,并减少不必要的错误数量,例如“资源版本太旧” 。 在Kubernetes 1.15中,该功能具有alpha版本的状态,并且预计在下一版本中将其增加到beta。

  Added EventType = "ADDED" Modified EventType = "MODIFIED" Deleted EventType = "DELETED" Error EventType = "ERROR" Bookmark EventType = "BOOKMARK" 

(Watch API中可能的事件类型。)

在入场网钩中:

  • 除了现有的名称空间选择器之外 ,还增加了对对象选择器的支持
  • 实现了注册特定版本的资源并在修改该资源的任何旧版本时调用的功能;
  • Option字段已添加到AdmissionReview API中,报告正在执行的操作的选项。

联播网


Kubernetes网络部分的一项重大创新是负载均衡器的所谓“ 终结器保护” 。 现在,在删除LoadBalancer的资源之前,请检查是否尚未完全删除相应的Service资源。 为此,在type=LoadBalancer每个服务上附加一个所谓的终结器:删除此类服务时,将阻止资源的真正删除,直到删除终结器为止,直到完成对相应负载均衡器资源的“擦除”操作,终结器才被删除( service.kubernetes.io/load-balancer-cleanup )。 该实现的当前版本为Alpha版本,有关其详细信息,请参见KEP

另外:

  • Kubernetes 1.13中引入的NodeLocal DNS Cache插件和提高DNS性能已达到beta。
  • Kube-proxy不再自动删除由于在其他模式下运行而创建的网络规则(这需要显式启动kube-proxy --cleanup )。

命令行界面


与往常一样,控制台命令中有一些很好的小东西可以使用Kubernetes集群:

  • kubectl get从服务器(而非客户端)接收数据以完全支持扩展的传输已宣布完成(稳定)。
  • kubectl top 添加了 --sort-by选项:

     $ kubectl --kubeconfig=kubectl.kubeconfig top pod --sort=memory NAME CPU(cores) MEMORY(bytes) elasticsearch-logging-v1-psc43 2m 2406Mi hadoop-journalnode-2 13m 362Mi hodor-v0.0.5-3204531036-fqb0q 23m 64Mi kubernetes-admin-mongo-... 5m 44Mi cauth-v0.0.5-2463911897-165m8 34m 10Mi test-1440672787-kvx8h 0m 1Mi 
  • kubectl rollout restart 添加了对DaemonSets和StatefulSets的支持。
  • kubeadm upgrade node新的kubeadm upgrade node命令来更新集群节点,从而替换(现已声明作废) kubeadm upgrade node configkubeadm upgrade node experimental-control-plane
  • 添加了新的kubeadm alpha certs certificate-key命令(用于生成随机密钥,然后可以将其传递给kubeadm init --experimental-upload-certs )和kubeadm alpha certs check-expiration (用于检查本地PKI证书的有效期限)。
  • 不推荐使用kubeadm config upload命令,因为它的替换( kubeadm init phase upload-config )已经成熟。

其他


Kubernetes 1.15的其他显着变化包括:

  • 已使用Scale子资源为第三方基于CRD的资源/控制器(例如:EtcdCluster,MySQLReplicaSet ...)添加了 Pod Disruption Budget(PDB)的支持 。 到目前为止,这是一个Beta版本,它将在下一版本中稳定下来。 详细信息在KEP中
  • 节点/ Kubelet的两个功能达到了beta版本: 支持第三方设备监视插件(以便从Kubelet中删除所有设备特定的知识,即树外)和SupportNodePidsLimit (将PID从节点隔离到节点)豆荚)。
  • 默认情况下,已为Kubernetes代码库添加并启用了对Go模块的支持 (而不是不赞成使用Godep和GOPATH模式)。
  • 最早在K8s 1.9中引入的 AWS NLB(网络负载平衡器)的支持已达到beta级。 特别是,她具有配置accessLogs终止TLS LoadBalancerSourceRanges
  • 实现了从Kubernetes秘密配置Azure云提供程序的功能(为此,添加了新的cloudConfigType选项,其中一个可能是secret )。 此外,Azure中的Kubelet现在可以在没有Azure身份的情况下工作 (必须为此启用useInstanceMetadata )。
  • 在cluster-lifecycle中,将使用kubeadm创建HA集群的可能性引入了beta,并且它们还完成了重组 kubeadm配置文件格式的下一步(v1beta2)。
  • 在不同队列中处于挂起状态的Pod数量被添加到调度程序度量标准中,并且通过CSI中的kubelet卷度量标准添加了有关卷的统计信息
  • 使用的/相关的软件中的更新:Go 1.12.5,cri-tools 1.14.0,etcd 3.3.10 (服务器的版本未更改,但客户端的版本已更新) 。 受支持的Docker版本没有更改CNI,CSI,CoreDNS的版本(在Kubernetes 1.15的Alpha版本之一中,它已更新为1.5.0,然后又回滚到1.3.1)

聚苯乙烯


另请参阅我们的博客:

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


All Articles