K8S 1.11 重磅发布| 全面解读 11 个重大功能更新

技术翻译/评论:任我行、法师一枚,星空下的文仔node

编辑:夏天git

6 月 27 日,Kubernetes 2018 年的第二个版本 Kubernetes 1.11 正式发布,继续推进 Kubernetes 走向成熟。Kubernetes 1.11 的可扩展性和灵活性更强,饱含着技术团队过去一年中在功能上做出的巨大努力。Kubernetes 1.11 加强了网络方面的主要功能,为 SIG-API Machinery 和 SIG-Node 提供了两个主要功能用于 beta 测试,持续加强过去两个版本关注的存储功能。Kubernetes 1.11 功能的更新为任何基础架构,云或内部部署都能嵌入到 Kubernetes 系统中增添了更多可能性。github

在新版本发布的第一时间,K8sMeetup 中国社区邀请了一线研发工程师对 GitHub 权威 Release Notes 和 Kubernetes.io 版本发布文章进行技术解读和评论,但愿能为你们使用 Kubernetes 带来一些有益参考。docker

Release Note 11 个重要更新编程

  1. SIG API Machinery

这次发布,SIG API Machinery 主要集中在 CustomResoures 方面。好比,CustomResources 的子资源如今进入 beta 版本,而且默认开启。根据这个变化, 对 /status 子资源的更新不容许修改除了 .status 外的全部其余字段(不像之前那样只容许对 .spec 和 .metadata 进行更新)。还有,在 /status 子资源 enable 的状况下, Required 和 Description 可用在 CRD OpenAPI 验证模式的根上。 另外,用户能够建立多版本的 CustomResourceDefinitions,可是不须要任何类型的自动转换,并且 CustomResourceDefinitions 如今容许经过 spec.additionalPrinterColumns 字段为 kubectl 提供附加列的规范。安全

  1. SIG Auth

此次发布周期的工做主要集中在升级现有功能,以及让用户理解安全相关功能。服务器

1.9 版本引进的 RBAC,在这里升级为稳定版本, client-go credential plugins 也升级为 beta 版本,同时支持从外部插件获取 TLS 资格证书。Kubernetes 1.11 更容易看到事件信息,由于 API 请求信息的处理状况能够添加到 audit events 上了。网络

Authorization 设置authorization.k8s.io/decision 注解,表示 authorization 决定(allow 或者 forbid),authorization.k8s.io/reason 注解,显示为何会作这个决定的描述。架构

PodSecurityPolicy admission 设置podsecuritypolicy.admission.k8s.io/admit-policypodsecuritypolicy.admission.k8s.io/validate-policy注解,包含接纳 Pod 的策略名称。(PodSecurityPolicy 同时能够限制 hostPath volume mounts 为 read-only)负载均衡

另外, NodeRestriction admission 插件阻止 kubelet 修改 Node API object 的 taints,这让咱们更容易追踪那些正在被使用的 Node。

  1. SIG CLI

SIG CLI 主要重构了 kubectl 内部结构,提高了 kubectl 命令行的可组合性,可读性和可测性。这些重构将使团队可以在下一个版本中提取出一种实现 kubectl (即插件)的可扩展性的机制。

  1. SIG Cluster Lifecycle 这方面主要经过添加一组维护 kubeadm 配置文件的命令来提高 kubeadm 的用户体验,API 版本提高到了v1alpha2。这些命令能够处理配置版本迁移,打印默认配置,而且列出和拉取启动一个集群须要的容器镜像。

其余几个值得注意的变化:

CoreDNS 代替 kube-dns 成为默认的 DNS 提供商

提高了用户环境体验和支持除 docker 外其余 CRI 运行时

支持了 kubelet 结构化配置

  1. SIG Instrumentation

Kubernetes 1.11 版本中采用新的 Kubernetes 监控模型,弃用 Heapster。仍在使用 Heapster 作自动弹性伸缩的集群应该迁移到 metrics-server 和 custom metrics API。

  1. SIG Network

这次发布中网络部分重要的里程碑是基于 IPVS 的负载均衡和 CoreDNS 升级为 GA。IPVS 是一个集群内部,使用内核哈希表(in-kernel hash tables)的负载均衡的方案,替代先前的 iptables。 CoreDNS 是替代原来的 kube-dns 来作服务发现。

  1. SIG Node

Node 方面推进了一些特性开发,而且在一些关键主题上作了额外的提高。 动态调整 kubelet 配置特性升级到了 beta,默认启用,简化了节点对象的自我管理。配置与 CRI 一块儿工做的 kubelet 可使用日志滚动特性(log rotation feature),该特性将在本版本中升级为 beta 。cri-tools 项目已经到了 GA 阶段,该项目主要为操做人员提供一致的工具,使他们可以独立于所选择的容器运行时对生产中的节点进行调试和检测。

平台方面,和 SIG-Windows 配合,kubelet 在 Windows 系统下的支持获得了很大的提高,资源管理方面也作了一些提高。特别是在 Linux 下支持 sysctls 的功能已进入 beta 阶段。

  1. SIG OpenStack

SIG OpenStack 在继续完善测试,其中 11 个验收测试涵盖了普遍的场景和用例。在 1.11 版本周期中,咱们给 test-grid 的报告已经将 OpenStack cloud provider 限定为 Kubernetes 版本发布的一个门控任务。

新功能包括改进 Keystone 服务和 Kubernetes RBAC 之间的集成,以及整个提供商代码库中的许多稳定性和兼容性改进。

  1. SIG Scheduling

Pod 优先级和抢占升级到了 Beta,默认启用。注意这个功能变化对运维特别重要。团队一样在努力提高 scheduler 的性能和可靠性。

  1. SIG Storage

存储方面升级了之前版本的两个特性,同时引入了三个 alpha 版本的新特性。

StorageProtection feature:阻止删除那些正在被 Pod 使用的 PVC,以及已经绑定到 PVC 上面的 PV,如今这个 feature 已经 GA。

Volume resizing feature:容许在 Pod 重启的时候对 volume 进行扩容,如今是 beta,默认是打开状态。

新的 alpha 特性包括:

Onlize volume resizing: 不用重启 Pod 的状况下,支持对 fs 进行扩容;

Dynamic max volume per node count: 限制每一个节点的最大 attached volume 个数(仅限:AWS EBS 和 GCE PD);

Provide environment variables expansion in sub path mount: 支持用 Downward API 环境变量建立 Subpath volume derectories。

  1. SIG Windows

此版本支持更多用于 Windows 上的 Pod 和 container 的 Kubernetes API,其中包括:

Pod,Container,日志文件系统的监控信息;

run_as_user 安全文本;

Azure 磁盘的本地持久化卷和 fstype。

Windows Server 1803 版的改进还为 Kubernetes v1.11 带来了新的存储功能,其中包括:

ConfigMap 和 Secret 的卷挂载

SMB 和 iSCSI 存储的 Flexvolume 插件也能够在外部的 Microsoft/K8s-Storage-Plugins 项目中找到。

关键功能更新

值得注意的是,新版本中两个备受期待的功能进入了 GA 阶段,即:基于 IPVS 的集群内负载均衡和 CoreDNS 做为集群 DNS 附加选项,这意味着增长了生产应用程序的可扩展性和灵活性。接下来让咱们深刻了解 Kubernetes 1.11 的一些关键功能。

基于 IPVS 的集群内服务负载均衡进入到 GA 阶段

新版本中,基于 IPVS 的集群内服务负载均衡功能已趋于稳定。IPVS(IP 虚拟服务器)提供了高性能的内核内负载均衡,其编程接口比 iptables 更简单。这个改变为集群范围内包含 Kubernetes Service 模型的分布式负载均衡提供了更好的网络吞吐,更好的编程延迟和更好的扩展性。IPVS 还不是默认设置,但集群能够在产品流量中使用。

CoreDNS 进入 GA 阶段

CoreDNS 如今可用做集群 DNS 附加选项,在使用 kubeadm 时是默认选项。CoreDNS 是一个灵活的,可扩展的权威 DNS 服务器,并集成在 Kubernetes API 中。CoreDNS 比之前的 DNS 服务器拥有更少的移动部件,由于它是单可执行文件和单进程,而且经过建立自定义 DNS 条目来支持灵活的用例。它也是用 Go 语言编写的,具备内存安全性。

动态 Kubelet 配置升级到 Beta 阶段

经过此功能,能够在运行的集群中部署新的 Kubelet 配置。目前,Kubelet 能够经过命令行标志进行配置,这使得更新正在运行的集群中的 Kubelet 配置变得困难。借助此 beta 功能,用户能够经过 API server 在运行的群集中配置 Kubelet 。

CustomResourceDefinitions 如今能够定义多个版本

CustomResourceDefinitions再也不局限于定义单一版本的自定义资源,这是一项难以解决的限制。如今,利用此测试版功能,能够定义资源的多个版本。在将来,这将扩大到支持一些自动转换; 目前,此功能容许自定义资源做者“以安全更改进行升级,例如 v1beta1 到 v1”,并为有变化的资源建立迁移路径。

CustomResourceDefinitions 如今支持 “status” 和 “scale” 子资源,这些子资源与监控和高可用性框架相集成。这两项更改提升了使用 CustomResourceDefinitions 在生产中运行云原生应用程序的能力。

CSI 的加强

容器存储接口(CSI)在过去几个版本中一直是一个主要问题。在 1.10 版本发布以后,1.11 版本继续加强 CSI 功能。1.11 版本将原始块卷的 alpha 支持添加到 CSI,将 CSI 与新的 kubelet 插件注册机制集成在一块儿,而且更容易将密钥传递给 CSI 插件。

新的存储功能

支持在线调整 Persistent Volume 的大小已被引入做为 alpha 功能。这使用户能够增长 PV 的大小,而无需先终止 Pod 并卸载卷。用户将更新 PVC 以请求新的尺寸,kubelet 将调整 PVC 的文件系统尺寸。

做为 alpha 功能引入了对动态最大卷计数的支持。此新功能使 in-tree 卷插件可以指定能够附加到节点的最大卷数,并容许限制因节点类型而异。之前,这些限制是经过硬编码或经过环境变量进行配置的。

StorageObjectInUseProtection 特性如今很稳定,能够防止删除绑定到 PVC 的 PV,以及 Pod 使用的 PVC。这一保护措施将有助于防止删除当前绑定到活跃 Pod 的 PV 或 PVC 的问题。

正式上线

Kubernetes 1.11 目前已经可经过 GitHub 进行下载 [1]。要开始使用 Kubernetes,请点击此处 [2] 参阅相关交互式教程。您也能够利用 Kubeadm 安装 1.11 版本。1.11.0 版本将以 Deb 与 RPM 软件包的形式提供,并于 6 月 28 日经过 Kubeadm 集群安装器进行安装 [3]。

新版本技术评论

「K8sMeetup 中国社区」特别邀请 Caicloud(才云科技) 工程师,第一时间为 Kubernetes 1.11 作了一个简短评论:

Kubernetes 1.11 版本一样是在稳定性,扩展性以及灵活性方面作了不少努力,也取得了不小的成果。好比存储方面,存储的一大发展趋势就是解耦,把存储提供者相关的逻辑移除出去,让 Kubernetes 更加纯净。因此在 1.10 中升级为 beta 的 CSI 特性无疑是如今以及之后存储的重点。

Kubernetes 1.11 中,存储团队也对 CSI 特性作了不少增强,好比:支持 raw block device(alpha),优化注册机制,以及简化 Secrets 传递等。使得 CSI 更加成熟稳定,为下半年的 GA 作准备。存储团队也对其余特性作了一些加强,好比:PVC resize feature 升级为 beta,同时也引入了 online resize feature,还有 snapshot 的 CSI 支持,Storage protection 特性升级为 GA 等等,让 Kubernetes 的存储更加好用。与此同时,咱们(Caicloud)发现 Kubernetes 的存储监控还有待增强,这个发布周期也在设计相关功能,将会在下半年把它推动到社区。

其余方面一样有不少重要的更新,好比:节点管理方面,动态调整 kubelet 配置特性升级到了 beta,优化 kubelet 管理;调度方面,Pod 优先级和抢占升级到了 Beta,为优化资源管理,提升资源利用率,简化运维等提供了更大的可能性;网络方面,基于 IPVS 的 LB 以及 CoreDNS 都升级为 GA。API 方面,CRD 功能也作了加强…… 在各个公司的贡献下,Kubernetes 1.11 版本在原来的基础上有了很大的提高。咱们(Caicloud)也会持续对它进行贡献,欢迎关注。

参考文献:

[1]https://github.com/kubernetes/kubernetes/releases/tag/v1.11.0

[2] https://kubernetes.io/docs/tutorials/

[3] https://kubernetes.io/docs/setup/independent/create-cluster-kubeadm/

[4] https://kubernetes.io/blog/2018/06/27/kubernetes-1.11-release-announcement/

[5] https://github.com/nickchase/sig-release/blob/2c0bb1622dc2c69a72de0390e1ff0cd05321cf0c/releases/release-1.11/release_notes_draft.md