K8S 1.12 重磅发布|全面解读 15 个重大功能更新
技术
作者:K8sMeetup中国、stonesfour、七九天
译者:夏天、小君君
2018-09-28 07:44
技术翻译/评论:stonesfour、七九天
编辑:夏天、小君君

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

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

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

两大功能更新  

Kubelet TLS Bootstrap 达到 GA 阶段 

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 的方法,可将其提交到集群级证书签名过程中。目前,v1(GA)标识代表已达到生产级别的稳定性,并具有长期向下兼容的保证。

除此之外,Kubelet server certificate bootstrap 和轮询已发布 beta 版。目前,当 kubelet 首次启动时,会生成一个自签名证书/密钥对,用于接收传入的 TLS 连接。该功能引入了一个在本地生成密钥,然后向集群 API 服务器发出证书签名请求,以获取由集群的根证书颁发机构签名的关联证书的过程。此外,当证书临近过期时,可使用相同的机制来请求更新证书。

对 Azure 虚拟机规模集(VMSS)和 Cluster-Autoscaler 的支持现已稳定 

用户可以通过 Azure 虚拟机规模集(VMSS)创建和管理同类虚拟机资源池,它可以根据需求或预设计划自动增加或减少。用户可以实现轻松管理、扩展和负载均衡多套虚拟机,从而提供高可用性和应用程序弹性。这个功能非常适合为 Kubernetes workload 运行的大型应用程序。

借助这一新的稳定功能,Kubernetes 支持使用 Azure VMSS 扩展容器化应用程序,另外将其与 cluster- autoscaler 集成,还具备根据相同条件,自动调整 Kubernetes 集群大小的功能。
 

Release Note  15 个重要更新 

1. SIG API Machinery

SIG API 在此版本中开发了 “dry run” 功能,该功能使用户能够预览特定命令结果而无需真正使其生效。

2. SIG-autoscaling

SIG Autoscaling 专注于改进 HPA (Horizontal Pod Autoscaling)API 和算法:

  • 我们发布了 autoscaling / v2beta2,它可以清理和统一 API;
  • 我们改进了 readiness 检测和平滑扩缩容,以便在更多种类或使用场景中正常工作;

3. SIG-Azure

Sig Azure 主要精力放在了两个新的 alpha 功能:

  • 向云提供商添加 Azure 可用区域支持;
  • 支持跨 RG(Resource Group)资源(磁盘、Azure 文件和节点[实验]);
  • 除了上述新功能外,对 Azure VMSS (Virtual Machine Scale Sets)和 Cluster-Autoscaler 的支持现已稳定并被视为 GA:
  • Azure VMSS 允许你创建和管理,可根据需求或设置,自动增减相同负载均衡的 VMs;
  • 借助这一新的稳定功能,Kubernetes 支持扩展使用 Azure VMSS 容器化的应用程序,包括将其与 cluster-autoscaler 集成以根据相同条件自动调整 Kubernetes 集群的大小。

4. SIG-cli

SIG CLI 专注于实现新的插件机制,作者为插件提供了一个通用 CLI 工具库,并进一步重构了代码。

5. SIG-cloud-provider

这是 SIG Cloud Provider 的第一个 Kubernetes 版本。在 v1.12 中,SIG Cloud Provider 专注于构建流程和基础架构,以更好地支持现有和新的云提供商。 其中一些举措(其中许多仍在进行中)是:

  • 从每个云提供商向 TestGrid 报告 E2E (End-To-End)一致性测试结果(与 SIG Testing 和 SIG Release 合作);
  • 定义每个云提供商的最低要求文档,其中包括(与 SIG Docs 合作):
  • Kube-apiserver,kube-controller-manager,kube-schedule,kubelet 和 cloud-controller-manager 的 manifests 示例;
  • 任何特定云的 controllers 控制器使用的标签/注释(labels/annotations)。

除此之外,SIG Cloud Provider 一直致力于从 kubernetes / kubernetes 中删除云提供商代码。

6. SIG-cluster-lifecycle

在 1.12 中,SIG Cluster Lifecycle 通过修复一些 bugs 并添加一些新的重要功能,专注于改善 kubeadm 中的用户体验。

以下列出了对 kubeadm 所做的一些更改:

  • Kubeadm 内部配置已升级为 v1alpha3:
    • V1alpha1 已被删除;
    • V1alpha3 将 MasterConfiguration 拆分为单独的组件;InitConfiguration,ClusterConfiguration,JoinConfiguration,KubeletConfiguration 和 KubeProxyConfiguration;
    • 可以用---作为分隔符,实现同一文件中提供不同的配置类型。
  • 改进的 CRI(Container Runtime Interface)处理
    • 在 docker-only 的设置中不再需要 crictl;
    • 更好地检测已安装的 CRI;
    • 更好地输出拉镜像(pull image)错误。
  • 改进了 air-gapped (未连接过网络的机器)和离线支持
    • Kubeadm 现在通过使用本地客户端版本作为后备处理 air-gapped 环境;
    • 现在允许一些 kubeadm 命令在完全脱机模式下工作。
  • 证书处理改进:
    • 升级时续订证书;
    • 新的 “kubeadm alpha phase certs renew” 命令用于续订证书;
    • 改进了使用 kubeadm 创建的证书的可分辨名称字段的唯一性。
  • HA 改进:
    • “kubeadm join --experimental-control-plane” 现在可用于将控制面实例连接到现有集群;
    • “kubeadm upgrade node experimental-control-plane” 现在可用于升级使用“kubeadm join --experimental-control-plane” 创建的辅助控制平面实例;
    • 多种体系结构(实验):kubeadm 现在添加了对 docker“schema 2” manifest 列表的支持。这是基于 kubeadm 的 Kubernetes 部署以支持多种体系结构的过程的初步部分;
    • 弃用功能:Alpha 阶段的 feature-gates HighAvailability,SelfHosting,CertsInSecrets 现已弃用,将在 Kubernetes v1.13.0 中删除。

7. SIG-ibmcloud

新增 ibmcloud 支持,SIG-ibmcloud 开始关注 SIG 的建立并与 SIG 成员共享 IBM Clouds 正在进行的 Kubernetes 工作,如可伸缩性测试、Kubernetes 升级策略等,并开始处理将云提供程序代码移动到公共 GitHub repo 的过程。

8. SIG-instrumentation

没有实现新的功能,主要在原功能基础上对 metrics-server 内部结构大量重构,以及对一些错误进行修复。

9. SIG-node

Node 方面推动了一些特性开发,并且在一些关键功能点上做了额外的提升。 

Node 将 PoStActoPrimeNAMSePosits 配置特性从 alpha 转换为 beta。该特性允许 Pod 规范请求 Pod 中的所有容器共享公共进程 Namespace。
其中添加了两个 alpha 特征:

  • RunTimeCas.alpha 让节点能够对多个运行时选项进行支持,以支持多种工作负载类型。包括 native linux containers 与 “sandboxed” containers,实现将容器与宿主内核隔离;
  • CustomCFSQuota.alpha 让节点管理员能够更改用于在节点上强制执行 CFS 配额的默认周期。提高某些工作负载的性能,工作负载在使用 CFS 配额和默认测量周期时经历延迟。

同时,SIG 继续致力于通过修复 bug 来提高可靠性,同时制定未来特性的设计和实现。

10. SIG-OpenStack

OpenStack 继续在修复 bug 和不断完善自身功能。新功能主要在 OpenStack 自身开发完成,并继续推动 OpenStack 与 Kubernetes 之间集成。

内部错误修复和改进包括:

  • 修复在没有 VIP 的情况下负载均衡器状态;
  • 修复服务器状态过滤;
  • 修复 Cinder volum 的 PVC 大小;
  • 添加在云配置中未定义负载均衡器配置,则禁用该负载均衡器配置;
  • 添加对节点关闭 taint 的支持。

OpenStack bug 修复和新功能:

  • 修复错误以防止现有浮动 IP 的分配;
  • 修复当未指定 OS_DOMAIN_NAME 名称时,Cinder 身份验证错误;
  • 修复通过跳过未受作用的令牌同步,来 KestStand 身份验证错误;
  • 修复 client-auth-plugin 身份验证错误;
  • 修复 in-tree-provider 指向 external provider 错误;
  • 添加通过提供程序 ID 关闭实例;
  • 添加注释以保存服务删除后的浮动 IP;
  • 添加将一致性测试到稳定开发分支中;
  • 添加对 Manilla 提供支持,用于托管认证和提供自定义 CAS;
  • 添加更新文档;
  • 添加对 Manilla 提供存在的共享支持;
  • 添加集群名称对负载均衡器描述;
  • 添加 Kubernetes 和 Keystone 项目之间的同步;
  • 添加使用内部 DNS 名称为节点的 “hostname”;
  • 添加 CSI  规格 v0.3.0 对 Cinder 和 Manilla 支持;
  • 添加对 Octavia 负载均衡器增加“级联删除”支持,以提高性能;
  • 添加改进的负载均衡器命名。

11. SIG-scheduling

Scheduling 方面主要集中提高调度器性能和可靠性方面开发,主要体现在以下几方面:

  • 通过对算法优化,提高 Pod 亲和/反亲和特性,性能提升超过 100X;
  • DaemonSet pods,以前由 DaemonSet 控制器调度,在 1.12 中将由默认调度程序调度,此更改允许 DaemonSet pod 享受默认调度程序的所有调度特性;
  • 调度器的图像局域优先级函数得到了改进,现在默认启用。启用此特性后,具有运行 Pod 所需的全部或部分映像集的节点比其他节点更受青睐,这将提高 Pod 启动时间;
  • 在大型集群(>2000 节点)中,调度程序吞吐量提高了约 50%。

12. SIG-service-catalog

service-catalog 方面推动了一些特性开发,并且在一些关键特性上做了额外的提升。

  • Originating Identity 特性让代理知道哪个用户执行了某个操作,已经 GA;
  • Namespace 代理,允许操作人员将代理安装到 Namespace 而不是集群级别,这个 feature 已经 GA;
  • 服务计划默认功能在 alpha 中,正在积极开发中。该特性能使操作人员在提供服务时定义默认值;
  • 已经提供支持过滤哪些服务通过服务目录公开;
  • 通过改进输出格式和添加更多命令,我们还改进了 kubectl 和 svcat 的 CLI 体验。

13. SIG-storage

我们将 Kubernetes volume topology 特性提升为 beta 版,该功能使 Kubernetes 能够理解并智能化处理 volume 可访问信息。(如: the “zone” a cloud volume is provisioned in, the “rack” that a SAN array is accessible from, 等等)

dynamic maximum volume count 升级为 beta 版。该功能指定每个节点的给定卷类型的最大数量作为节点特征的函数(如:较大节点的较大限制,较小节点的较小限制)。
我们本季度还做了许多容器存储接口(CSI)功能,预计在下一个 Kubernetes 版本中将 CSI 从 beta 升级到 GA。这包括将依赖的 “mount namespace propagation” 功能逐渐转换为 GA,将 Kubelet 插件注册机制转移到 beta,为新的 CSI 驱动程序注册表添加 alpha 支持以及拓扑,并添加一些 alpha 功能以支持使用 “local ephemeral volumes” 的 CSI(即,在 Pod 的生命周期中存在的卷,包含一些注入的信息,如 token 或 secret)。
Kubernetes v1.12 版本还为 volume snapshotting 引入了 alpha 支持。此功能引入了使用 Kubernetes API 创建/删除卷快照和从快照创建新卷的功能。

14. SIG-vmware

VMware 开发主要致力于修复 in-tree cloud provider 中的 bug,开始 external cloud provider 的开发,以及获取 vSphere 中 cluster-api 的拥有权。

In-tree cloud provider 错误修复与改进包括:

  • 使用 vSphere 标记向提供程序添加初始区域支持;
  • external cloud provider 已经建立并与 in-tree 在一定程度上完成集成,我们在进一步稳定完善它并将其作为首选部署模型 1.13。同时开始在 CSI 插件中外部化 vSphere 卷功能,以完全重现当前的存储功能;
  • 通过引入 vcsim 进行自动化测试,改进云提供商的测试工具;
  • 修复了阻止从 1.10 更新到 1.11 的错误。

The external cloud provider 已经建立并与 in-tree 在一定程度上开始特性验证,我们期望稳定它并将其作为首选部署模型 1.13。我们也开始在 CSI 插件中外部化 vSphere 卷功能,以完全重现当前 in-tree 内存储功能。
Cluster API 工作目前正在对现有代码库进行全面改造,将 Terraform 移除并直接使用 govmomi。

15. SIG-windows

Windows 在继续完善现有功能的稳定性和可靠性。主要修复错误和充分测试工作,在不久将来会提供一个稳定发行版。
 

新版本技术评论 

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


Kubernetes 1.12 版本在安全性、稳定性、扩展性以及灵活性方面做了很多工作,也取得了很多成果。比如安全方面,初衷是为 kubelet 启用 TLS 客户端证书的配置,更为重要的是可实现签名证书的自动提供与分发;同时关于 Kubernetes 支持使用 Azure VMSS 扩展容器化应用程序,另外将其与 cluster-autoscaler 集成,还具备在相同条件下自动调整 Kubernetes 集群大小的功能。


Kubernetes 1.12 中,存储团队继续对 CSI 特性做了很多工作,比如:Kubernetes volume topology 与 dynamic maximum volume count 特性提升为 beta 版,同时将 volume snapshotting 引入 alpha 支持等,让 Kubernetes 的存储更加好用。


同样在其它方面 Kubernetes 也有很多重要的更新,比如:SIG-Cloud-Provider 专注于构建流程和基础架构,使得 Kubernetes 的架构更加的合理,对支持云服务商的扩展性和灵活性都能得到很大的提高;

SIG-Cloud-Scheduling 对调度器中算法、图像、节点优化与性能提升等;“dry-run” 功能,使用户能够在命令不生效的情况下预览特定命令的结果。在各个公司的贡献下,Kubernetes1.12 版本在原来的基础上有了很大的提升。我们(Caicloud)也会持续对它进行贡献,欢迎关注。

参考文献:

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

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

297 comCount 0