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

2018-12-04

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


在设定支持期望方面,这些稳定的变化对于用户和运营商来说是一个重要的里程碑。此外,此版本还有一系列持续不断的内部改进和新的 alpha 功能可供社区使用。


在 Kubernetes 1.13 版本发布的第一时间,「K8sMeetup 中国社区」邀请了来自才云 Caicloud 的一线研发工程师对 GitHub 权威 Release Notes 和 Kubernetes.io 版本发布文章进行技术解读和评论,希望能为大家使用 Kubernetes 带来一些有益参考。


3 大主要特征


使用 kubeadm 简化 Kubernetes 集群管理  

接触过 Kubernetes 的人基本上都使用过 kubeadm。它是管理集群生命周期的重要工具,从创建到配置再到升级; 现在 kubeadm 正式成为 GA。kubeadm 是处理现有硬件上的生产集群的引导,并以最佳实践方式配置核心 Kubernetes 组件。


kubeadm 通过这种方式更加方便的为新节点提供安全而简单的连接流以及支持简单的升级。这个 GA版本值得注意的是现在已经毕业的高级功能,特别是可插拔性和可配置性。kubeadm 的作用是成为管理员和自动化、以及更高级别系统的的工具箱,这个版本朝这个方向迈出了重要的一步。


Container Storage Interface(CSI)进入 GA 阶段  

Container Storage Interface(CSI)现在已经进入 GA 阶段,在 v1.9 中作为 alpha 引入,在v1.10 中作为 Beta 引入。通过 CSI,Kubernetes 数据卷层变得真正可扩展。这为第三方存储提供商提供了一个机会,可以编写与 Kubernetes 相互操作的插件,而无需触及核心代码。该规范本身也达到了 1.0 状态。


随着 CSI 的稳定,插件的开发者们正在按照自己的节奏开发核心代码以外的存储插件。你可以在 CSI文档中找到示例驱动程序和官方驱动程序的列表。


CoreDNS 是 Kubernetes 默认 DNS 服务器  

在 1.11 版本中,社区宣布 CoreDNS 已达到基于 DNS-based 服务发现的一般可用性。在 1.13 版本中,CoreDNS 现在将 kube-dns 替换为 Kubernetes 的默认 DNS 服务器。CoreDNS 是一个通用、权威的 DNS 服务器,提供与 Kubernetes 向后兼容但可扩展的集成。


CoreDNS 比以前的 DNS 服务器具有更少的移动部件,因为它是单个可执行文件和单个进程,并通过创建自定义 DNS 条目来支持灵活的用例。它利用 Go 语言来编写,使其具有内存安全性。


CoreDNS 是 Kubernetes 1.13+ 版本推荐的 DNS 解决方案。该项目已将常用测试基础架构切换为默认使用 CoreDNS,社区也建议用户进行切换。KubeDNS 仍会支持至少一个版本,但是时候开始规划迁移了。许多 OSS 安装工具已经进行了切换,包括 1.11 版本中的 Kubeadm。如果你使用托管解决方案,请与你的供应商联系,了解这将如何影响到你的项目。


Release Note 20 个重要更新


1. SIG API Machinery

从 1.13 版本开始,SIG API Machinery 宣布 dry-run 功能已进入 Beta 阶段。


2. SIG Auth  

在这个版本中,我们对核心 SIG Auth 领域进行了几项重要的改进。在鉴权的范畴,我们通过将带标签的节点自我更新限制列入白名单的选项,以及禁止 kubelet 删除节点 API 对象,进一步降低Kubelet 的权限。在身份验证中,我们对使用投射数据卷自动更新服务账户的令牌,增加了 alpha 级别的支持。


我们还在 TokenReview 中开启了受众验证,用以改善作用域。在审计日志中,新的 alpha 级别的动态审计配置增加了对动态注册 webhook 以接收审计事件流的支持。最后,我们通过实验验证过的etcd 加密来增强密码安全性。


3. SIG AWS  

在 v1.13 版本中,我们对 Kubernetes API 对象和 AWS 服务进行了更紧密的集成对接。


下面是三个不在项目范围内的 alpha 特性版本:

  • AWS alpha 版本的 ALB(应用负载均衡器)集成至 Kubernetes Ingress 资源;
  • CSI 规范 0.3 的 alpha 版本集成至 AWS EBS (弹性块存储);
  • 用于 Cloudprovider-aws alpha 版本的二进制云控制管理器。另外,我们将aws-k8s-tester、kubetest 部署接口添加到了 test-infra 项目。这个插件允许我们将 Prow 集成到上述的三个子项目中,以便为这三个特性提供 CI 信号。CI 信号部分可以在 [1] 进行查阅。

想要了解这三个 alpha 特性更详细的版本信息,请参考以下 changelog:

  • aws-alb-ingress-controller v1.0.0 [2]
  • aws-ebs-csi-driver v0.1 [3]
  • cloudprovider-aws external v0.1.0 [4]


4. SIG Azure  

在 1.13 版本中,SIG Azure 专注于为 Ultra SSD、Standard SSD、Premium Azure Files 添加额外的 Azure 磁盘支持。Azure 可用区和跨资源组节点也在 1.13 中从 Alpha 移至 Beta。


5. SIG Big Data  

在 1.13 的版本周期中,SIG Big Data 专注于与 Kubernetes 第三方项目集成相关的社区活动。这对1.13 版本没有任何的影响。


6. SIG CLI

在 1.13 版本中,SIG CLI 主要致力于稳定我们过去发布的项目,例如服务器端打印、在 kubectl 中的支持以及完成基于服务器端运行特性的 kubectl diff [5]。我们会继续分离 kubectl 代码以准备将其从主库中抽出。最后,感谢来自社区的强大支持和反馈,我们正设法推动新的插件机制到 Beta 阶段 [6]。


7. SIG Cloud Provider

在 1.13 版本中,SIG Cloud Provider 致力于稳定目前云提供商使用的通用 API 和接口。这包括审核cloud provider API 中任何应该被弃用的以及在必要时需要修改的部分。另外,SIG CloudProvider 已经开始围绕拥有“cloud provider”的端到端测试套件进行探索性的工作,该测试套件可用于测试通用的云提供商功能,比如节点资源和负载均衡器资源。


我们还会继续努力将目前所有存在于 k8s.io/kubernetes 的 cloud provider 提取至他们各自的仓库中。随着这些迁移,我们慢慢过渡用户使用 cloud-controller-manager,替代 kube-controller-manager。


8. SIG Cluster Lifecycle  

在 1.13 版的 SIG Cluster Lifecycle 中,我们很高兴的宣布将期待已久的 kubeadm 推广到稳定的GA 版本,将 kubeadm 的配置 API 推广到 v1beta1。在此版本中,SIG 专注于进一步改善集群创建的用户体验,并修复许多 bug 和其他各种改进。


以下是一些自 1.12 版本以来 kubeadm 的变化:

  • Kubeadm 的配置 API 目前是 v1beta1 版本。新的配置格式提供了镜像仓库管理、插件配置以及其他方面的改进。我们鼓励 v1alpha3 的用户使用命令 kubeadm config migrate 迁移到这个版本的配置 API,同时 v1alpha3 的版本将在 1.14中移除。v1beat1 的文档可以在这里 [7] 找到;
  • Kubeadm 已经将 kubeadm alpha phase 的命令并入 kubeadm init phase 中。这意味着创建控制平面节点的命令正在集成为 init 命令的一部分。对于还没有准备 GA 的 alpha 功能我们仍然保留在 kubeadm alpha 中,我们期待对它们的反馈;
  • Kubeadm init 及 kubeadm init phase 命令现在 --image-repository 的参数了,改善了对官方 kubernetes 仓库访问受限的情况;
  • DynamicKubeletConfig 和 SelfHosting 功能已经从 kubeadm init 和 feature gates 中移除,并公开在 kubeadm alpha 下;
  • Kubeadm init 命令中证书现在支持 --crs--only 选项,简化了自定义证书的创建;
  • kubeadm join --experimental-control-plane 现在会自动添加新的 etcd 成员在 local etcd 模式下,进一步简化了配置 HA 集群所要做的任务;
  • 对 kubeadm reset 进行了改进,包括 etcd 的清理和通知用户 iptables 的状态;
  • Kubeadm 命令在 yaml 文件包含未知或者重复字段时,会打印警告;
  • Kubeadm 目前适配 docker 18.09.0 以及更新的版本,但是依旧将 18.06 作为默认的支持版本;
  • Kubeadm 会在启动 kubelet 时自动会设置 --pod-infra-container-image 。

9. SIG IBM Cloud  

IBM Cloud SIG 专注于在 kubernetes 1.14 版本周期结束前,将 cloud provider 代码迁移至外部的仓库。在 SIG 会议中,我们还确保分享 IBM Cloud 中最新 Kubernetes 开发的最新信息,例如 IBMCloud Kubernetes 服务(IKS)中 Kubernetes  v1.12.2 的可用性。 SIG 更新在 Kubernetes 社区每周电话会议和 2018 年中国 KubeCon 上提供。


10. SIG Multicluster  

将 Federation v2 从 Alpha 版转向 Beta 版一直是我们过去一个季度努力的重点。 为此,我们与终端用户合作,并成功招募了来自 IBM、Amadeus、思科等公司的 contributor。 Federation v2 提供了一套解耦 API 和可重用组件用于构建多集群控制平面。 我们计划在 2018 年底开始发布 Beta组件。此外,我们对集群注册和多集群入口子项目进行了许多小更新。


11. SIG Network  

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


此外,在 IPv6 的双栈支持和 KEP 以及服务拓扑路由支持方面取得了进展。


12. SIG Node  

SIG Node 专注于 1.13 版本中的稳定性和性能改进。 引入了新的 alpha 功能以改进节点心跳反馈到控制平面的机制。NodeLease 功能让节点使用 kube-node-lease namespace 中的 Lease 资源,该资源将定期更新。 先前用于心跳反馈的控制平面功能的 NodeStatus 仅在更改时更新。 这减少了在大型集群的控制平面上的负载。 Kubelet 插件注册机制可以自动发现外部插件(包括 CSI 和设备插件),在此版本中已经提升为稳定版(在 1.11 中作为 alpha 版引入并在 1.12 中提升为 Beta 版)。


13. SIG Openstack  

此次 SIG OpenStack 的主要内容是删除项目内 provider 的工作进度。 这项工作与 SIG CloudProvider 一起完成,重点是移动 OpenStack (和其他提供商)所依赖的内部 API ,以便保证 API的稳定性。 此工作还包括提取项目内的 Cinder API 并将代码重构到外部 Cinder provider 以删除其他 Cinder volume provider 的代码。


此外,还对 SIG Cluster Lifecycle 的 Cluster API 负责的 OpenStack 驱动程序做了额外工作。对外部的 Cloud-Provider-OpenStack 代码来说,此次 SIG 主要修复了一些 bug 和更新以匹配Kubernetes 1.13 的开发。


14. SIG Scalability  

SIG Scalability 主要关注于稳定性以及延迟测试,投入编写可扩展测试的框架(ClusterLoaderv2),目标是在 2018 年底之前将所有测试迁移完成,并提供更多来扩展 Kubernetes 的可扩展性 /更好用户友好的 SLI / SLO。


15. SIG Scheduling  

SIG Scheduling 在 1.13 中主要关注于稳定性,并将一些主要功能推迟到下一版本。 但仍有两个值得注意的变化:

  • TaintBasedEviction 已移至 Beta 版,默认情况下将启用。 启用此功能后, condition taints 会自动添加到节点中,并且有需要,Pod 可以添加 tolerations。
  • 不推荐使用 Pod critical annotation。 Pod 应使用 Pod 优先级而不是 annotation。


值得注意的是,kube-scheduler 将在 1.13 的配置文件中使用 apiVersion kubescheduler.config.k8s.io/v1alpha1 而不是 componentconfig/v1alpha1。


16. SIG Service Catalog  

关于 Service Plan Defaults 的功能仍处于积极开发阶段。 我们将继续改进 svcat CLI 的用户体验,并为新的 Namespaced Service Broker 功能填补空白。


17. SIG Storage  

在过去的一年中,SIG Storage 一直致力于为 Kubernetes 增加对容器存储接口(CSI)的支持。 该规范最近已移至 1.0 ,并且在此之后,Kubernetes v1.13 会将 CSI 对 PersistentVolumes 的支持迁移到 GA 版本。


通过 CSI,Kubernetes 的数据卷层将变为真正的可扩展化,它允许第三方存储开发人员编写驱动程序,使他们的存储系统在 Kubernetes 中可用,而无需涉及核心代码。CSI 首次在 Kubernetes v1.9版本中作为 alpha 版引入,并在 Kubernetes v1.10 版本中转为 beta 版。


你可以在 CSI Documentation [8] 中找到一系列的示例及产品驱动。


SIG Storage 还将对 Block Volumes 的支持转为 Beta (在 v1.9 中作为 alpha 版引入),并将对拓扑感知数据卷的调度升为稳定版本(在 v1.9 中作为 alpha 引入,并在 1.10中 升级为 Beta )。


18. SIG UI  

目前开发路线图中最重要的是迁移到最新版本的 Angular,我们正在积极开发并即将发出新版本。此外,我们也在持续修复 bug 并添加其他改进。


19. SIG VMWare  

SIG VMware 在此版本的主要重点是移动 vSphere provider 暂存区需要的内部 API 以保证 API 的稳定性。这项工作是与 SIG Cloud Provider 一起完成,包括创建一个全新的 vsphere-csi 插件来替换项目中的数据卷功能。


此外,还为 SIG Cluster Lifecycle 实现的 Cluster API 提供了 vSphere provider。 而对核心项目外的 vSphere cloud provider 来说,此次 SIG 主要修复了一些 bug 和更新以匹配 Kubernetes1.13 的开发。


20. SIG Windows  

SIG Windows 重点提升在 Windows 平台上的稳定性以及对 Kubernetes 的支持。


新版本技术评论


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

Kubernetes 1.13 版本在安全性、稳定性、扩展性以及灵活性方面做了很多工作,也取得了很多成果。比如安全方面,kubernetes 降低了 kubelet 在鉴权方面的权限,增加了 TokenReview 的受众验证,以及通过 etcd 加密来增强信息的安全性。


Kubernetes 1.13 中,对各大云服务提供商的集成与对接也是一大亮点,很大程度地提升了kubernetes 支持对云服务商的扩展性和灵活性。比如:集成了 kubernetes api 对象和 AWS 服务,为 Ultra SSD、Standard SSD、Premium Azure Files 添加额外的 Azure 磁盘支持等。同时,对cloud provider 的解耦分离也在持续进行,通过将 kubernetes 仓库中的 cloud provider 移至各个云服务商的仓库,并且逐步使用 cloud-controller-manger 来替代 kube-controller-manager。


在其它方面 Kubernetes 也有很多重要的更新,比如:在部署方面,kubeadm 愈加成熟,在集群的部署管理过程中,增加了许多可选配置参数,很好地解决了目前在部署过程中的一些痛点。比如可以选择自己的镜像仓库,避免访问官方仓库的网络问题;在存储方面,将 CSI 对 PersistentVolumes的支持迁移到 GA 版本;在网络方面,则重点增加了 Ipv6 的双栈支持以及将 CoreDNS 作为默认DNS。在各个开发者的贡献下,Kubernetes 1.13 版本在原来的基础上有了很大的提升。我们(Caicloud)也会持续对它进行贡献,欢迎关注。


参考文献:

[1]https://testgrid.k8s.io/

[2]https://github.com/kubernetes-sigs/aws-alb-ingress-controller/releases/tag/v1.0.0

[3]https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/CHANGELOG-0.1.md

[4]https://github.com/kubernetes/cloud-provider-aws/blob/master/changelogs/CHANGELOG-0.1.md

[5]https://kubernetes.io/docs/concepts/overview/object-management-kubectl/#how-to-create-objects

[6]https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/

[7]https://godoc.org/k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta1

[8]https://kubernetes.io/docs/concepts/storage/volumes/#csi

[9]https://kubernetes.io/blog/

[10]https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.13.md#major-themes



结合谷歌十年容器实践,基于国内大型企业落地经验打造 的容器集群智能云平台。

立即体验