编者按

过去三年内,Kubernetes 在不断发展,其社区也保持着极高的活跃度。截至目前,有超过2300名贡献者,Kubernetes也在各种生产环境上大规模应用,本文从 KEP的角度分析过去三年内各 SIG 内的主要变动。


由于篇幅较长,文章将分成上下篇进行讲解,本文为上篇,欢迎阅读并留言讨论。


进入正文前,首先解释几个文章中会用到的概念:
 
SIG

SIG是全称是Special Interest Groups,即特别兴趣小组,它们是 Kubernetes 社区中关注特定模块的永久组织,有各自的贡献规则,管理着航空母舰级别的的 kubernetes 源代码。每个工作组都会定期召开Zoom视频会议并记录上传到Youtube,所有的 SIG 和工作组都使用 slack 和邮件列表进行沟通。

除了SIG外还有两个临时的小组:Working Group 即工作组,旨在解决跨SIG职责边界的问题。User Group 即用户组,用于和拥有大规模 Kubernetes 用户的组织进行积极的沟通交流,目前有Big data和VMware Users两个小组。
 
5月技术周|Kubernetes 这三年不得不说的事(上篇)
  
KEP

KEP的全称是 Kubernetes Enhancement Proposal ,因为 Kubernetes 目前已经是比较成熟的项目,所有的变更会影响下游的使用者,对于功能和API的修改都需要先在 kubernetes/enhancements 仓库对应 SIG 的目录下提交提案才能实施,所有的提案都需要经过讨论,通过社区 SIG Leader 的批准。正是有这样完善的项目管理机制我们可以很方便的找到对应功能变更点背后的设计思路以及社区成员对此功能的详细讨论,这作为理解 Kubernetes 的版本功能点的变动非常有帮助。
 
https://github.com/kubernetes/enhancements
 
5月技术周|Kubernetes 这三年不得不说的事(上篇)
 
Milestones 记录的即将会实现的 V1.19 的 KEP
 
5月技术周|Kubernetes 这三年不得不说的事(上篇)

KEP提案的模板规范

 5月技术周|Kubernetes 这三年不得不说的事(上篇)


Feature StagesFeature Stages

一个feature可以分为Alpha, Beta 和 GA。
 
Alpha feature

  • 默认关闭
  • 启用此功能可能会触发bug.
  • 可能会在没有通知的情况取消对于此功能的支持
  • 可能会有不兼容的变动

仅推荐在测试环境中使用
 
Beta feature

  • 默认启用
  • 经过完善的测试,启用是安全的
  • 对与整体功能的支持支持不会被取消,但一些细节会变动
  • 对象的结构和语义可能在之后的 beta 或者 stable 变动且不兼容之前版本,可以根据升级手册迁移到下个版本。此过程中需要变动API对象,可能会使依赖此 feature应用宕机一段时间。

推荐在非严格生产环境上使用,或者是有多个可以平滑升级的集群。
 
General Availability(GA )

  • 总是启用且无法禁用
  • 相关联的 feature gate 将不再需要
  • 会出现在 stable 版本的 kubernetes released 中

详细的 feature gate 可以在这里查看
https://kubernetes.cn/docs/reference/command-line-tools-reference/feature-gates/
 



V1.10






2018年3月26日,kubernetes1.10版本发布,这是2018年发布的第一个版本。该版本的Kubernetes主要提升了Kubernetes的成熟度,可扩展性与可插入性。

该版本提升了三大关键性功能的稳定度,分别为存储,安全与网络。另外,此次新版本还引入了外部kubectl凭证提供程序(处于alpha测试阶段),在安装时将默认的DNS服务切换为CoreDNS(beta测试阶段)以及容器存储接口(简称CSI)与持久化本地卷的beta测试版。
 

[SIG Node] Kubelet 动态配置

 
Kubelet 动态配置(Dynamic Kubelet Configuration beta 版本):可以在 Node 不下线的情况下改变 Kubelet 的配置
 

[SIG Storage] Kubernetes 1.10 版本对本地存储和持久化存储都进行了增强

 
– Mount namespace propagation 允许容器以 rslave 的方式挂载存储卷,这样主机的挂载就可以在容器里面可见,或者以 rshared 的方式挂载,这样容器里面的挂载,主机也可以看到。

– Local Ephemeral Storage Capacity Isolation 允许设置本地临时存储的 requests 和 limits 。另外,你也可以创建本地持久化存储,也就是说可以利用 attach 到本地的磁盘来创建 PV, 而不像以前那样,只能基于网络存储卷创建 PV。

– PV 方面,1.10 版本包含 PV/PVC 保护, 如果 PVC/PV 正在被 Pod/PVC 使用,那么就不能直接删除 PVC/PV。

这个版本还包括本地持久化存储的 Topology Aware Volume Scheduling ,稳定版本的 Detailed storage metrics of internal state 以及 beta 版本的 Out-of-tree CSI Volume Plugins。
 



V1.11





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

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

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

[SIG Network] CoreDNS 进入 GA 阶段

 
KEP:https://github.com/kubernetes/enhancements/blob/master/keps/sig-network/0010-20180314-coredns-GA-proposal.md
 
CoreDNS 现在可用作集群 DNS 附加选项,在使用 kubeadm 时是默认选项。CoreDNS 是一个灵活的,可扩展的权威 DNS 服务器,并集成在 Kubernetes API 中。CoreDNS 比以前的 DNS 服务器拥有更少的移动部件,因为它是单可执行文件和单进程,并且通过创建自定义 DNS 条目来支持灵活的用例。此外它也是用 Go 语言编写的,具有内存安全性。
 



V1.12






A next iteration in the evolving stable distributed system

 
“Class 4: Nearly all initial patterns evolve into structures that interact in complex and interesting ways, with the formation of local structures that are able to survive for long periods of time.” (see Cellular Automaton; see also TestGrid.k8s.io)

9 月 27 日,2018 年的第三个版本 Kubernetes 1.12 正式发布。为进一步提升 Kubernetes 的稳定性,此次版本关注对内部功能地改进和 Kubernetes 已有功能改善。最新版本在安全性和 Azure 等关键功能作出改进。另外,此版本新增了两个备受期待的功能,并已达到稳定(GA)阶段:Kubelet TLS Bootstrap 和对 Azure 虚拟机规模集(简称 VMSS)支持。

这些新功能的加入意味着 Kubernetes 具有更高的安全性、可用性、弹性和易用性,可以更快地将生产应用程序推向市场。该版本也表明 Kubernetes 开发者团队已经日趋成熟。
 

[SIG Cluster Lifecycle] Kubelet TLS Bootstrap 达到GA阶段

 
KEP:https://github.com/kubernetes/community/blob/master/contributors/design-proposals/cluster-lifecycle/kubelet-tls-bootstrap.md
 
Kubelet TLS Bootstrap 的稳定版本发布。在 Kubernetes 1.4 中,Kubernetes 引入了一个 API,用于从集群级证书颁发机构(CA)获取请求证书。引入 API 的初衷是为 kubelet 启用 TLS 客户端证书的配置。kubelet 可通过这个功能自行引导至 TLS 安全集群。最重要的是,该功能可实现签名证书的自动提供与分发。之前,kubelet 首次运行时,它需要在集群启动期间在其他进程中为其提供客户端凭据。这些工作为操作人员带来了负担。由于这个任务的手动执行非常繁重,因此许多操作人员为全部 kubelet 部署一套具有单个凭证和单一身份的集群,但这样的设置阻止了节点锁定功能的部署,如 Node authorizer 和 NodeRestriction admission controller。为了缓解这种情况,SIG Auth 为 kubelet 引入了一种生成私钥和 CSR 的方法,可将其提交到集群级证书签名过程中。

下图为kubelet Bootstrap 流程
 
5月技术周|Kubernetes 这三年不得不说的事(上篇)


[SIG Autoscaling] HPA可以根据监控队列中的标签自动调整工作负载

 
KEP: https://github.com/kubernetes/enhancements/blob/master/KEPs/sig-autoscaling/0032-enhance-hpa-metrics-specificity.md
 
HPA(Horizontal Pod Autoscaler)即自动拓展,是一种根据资源使用情况自动扩缩容工作负载的方法。Kubernestes中的自动伸缩有两个维度:处理节点伸缩操作的集群自动缩放器和自动扩缩deployment或replicaset pod数量的Horizontal Pod Autoscaler。集群自动缩放和Horizontal Pod Autoscaler可用于动态调整计算能力以及满足SLA所需的并行度。虽然集群自动缩放器高度依赖于托管集群的云提供商的底层能力,但是HPA可以独立运行于Iaas/Pass提供商。Kubernestes 1.7引入了聚合层,允许第三方应用程序通过注册自己为API插件来扩展Kubernestes API。自定义度量API和聚合层使得像Promethous这样的监控系统向HPA控制器公开特定于应用程序的度量成为可能。1.12 版本增加了可以根据监控管道中的可用标签选择指标。
 
5月技术周|Kubernetes 这三年不得不说的事(上篇)

另外当使用 HPA 管理一组副本缩放时,有可能因为指标动态的变化造成副本数量频繁的变化造成抖动,从 v1.12 开始改动了算法,可以通过设置kube-controller-manager 参数 –horizontal-pod-autoscaler-downscale-stabilization来设定缩容冷却时间,即自上次缩容执行结束后,多久可以再次执行缩容,默认时间是5分钟(5m0s)。
 

[SIG-scheduling] 提高了调度器的性能和可靠性

 
KEP:https://github.com/kubernetes/community/blob/master/contributors/design-proposals/scheduling/pod-preemption.md
 
  • 通过优化算法提高了 Pod 亲和/反亲和特性,性能提升超过 100X。
  • DaemonSet pods 以前由 DaemonSet 控制器调度,在 1.12 中将由默认调度程序调度,此更改允许 DaemonSet pod 享受默认调度程序的所有调度特性。
  • 调度器的镜像局域优先级函数现在默认启用,启用此特性后,具有运行 Pod 所需的全部或部分镜像集的节点比其他节点更受青睐,这将提高 Pod 启动时间。
  • 在大型集群(>2000 节点)中,调度程序吞吐量提高了约 50%。
 
下图为新调度算法的流程图:

 

5月技术周|Kubernetes 这三年不得不说的事(上篇)





V1.13





 
美国时间 12 月 3 日,Kubernetes 2018 年的第四个版本 Kubernetes 1.13 正式发布。Kubernetes 1.13 是迄今为止发布时间最短的版本之一,只利用了 10 周的时间。这一版本继续关注 Kubernetes 的稳定性和可扩展性。在存储和集群生命周期中,这一周期的三个主要特性已逐渐过渡到 GA。此版本中的显着特征包括:使用 kubeadm 简化集群管理、Container Storage Interface(CSI)、以 CoreDNS 作为默认 DNS。
 

[SIG Network] Coredns作为默认DNS

 
KEP:https://github.com/kubernetes/enhancements/blob/master/KEPs/sig-network/20180612-ipv4-ipv6-dual-stack.md
 
在 1.13 中,关注重点是 IPv6, DNS 改进和一些较小的项目:CoreDNS 现在是通过所有规模资源使用测试的默认集群DNS —— Alpha 版本中提供了本地 DNS 缓存特性。该特性部署了轻量级 DNS 缓存 Daemonset,可以避免连接跟踪,并将查询从 UDP 转换为更可靠的 TCP。PodReady++ 功能现在支持 kubectl CLI 。


未完待续,欢迎关注并留言评论。





END



九州云成立于2012年,是中国早期从事开放基础架构服务的专业公司。成立八年,秉承“开源 · 赋能变革”的理念,不断夯实自身实力,先后为政府、金融、运营商、能源、制造业、商业、交通、物流、教育、医疗等各行业的企业级客户提供高质量的开放基础架构服务。目前拥有国家电网、南方电网广东公司、中国人民银行、中国银联、中国移动、中国电信、中国联通、中国资源卫星、eBay、国际陆港集团、中国人寿、万达信息、东风汽车、诺基亚等众多重量级客户,被用户认可为最值得信赖的合作伙伴。

5月技术周|Kubernetes 这三年不得不说的事(上篇)

点击“阅读原文”,了解九州云更多信息!