Kubernetes v1.14 重磅发布 | 新版本四大亮点 & 紧急升级说明
技术
作者:才云科技
译者:Wshi、星空下的文仔、小君君、bot
2019-03-26 05:51

美国时间 3 月 25 日,Kubernetes 迎来了 2019 年的第一个新版本 1.14。与此前发布的各版本 Kubernetes 相比,本版本中的增强功能更趋于稳定。这对那些把 Kubernetes 视为重要战略支撑的企业和运营商而言,是个重要里程碑。 

Kubernetes v1.14 由 31 项功能强化构成:10 个功能已经稳定,12 个功能进入 Beta,7 个全新功能。这次更新延续了以往的主题——可扩展性,且能支持 Kubernetes 上的更多工作负载,其中三个主要功能转向一般可用性,一个重要安全功能转向 Beta。 

新版本四大主要特征

生产级 Windows 节点支持 

截至目前,Kubernetes 中的 Windows 节点支持已经处于 Beta 阶段,允许更多用户检验并查看 Kubernetes 对 Windows 容器的价值。Kubernetes 现在正式支持将 Windows 节点添加为工作节点并调度 Windows 容器,从而使 Windows 应用程序巨大的生态系统能够利用平台的强大功能。

对于那些使用基于 Windows 和 Linux 的应用程序企业,它们也不在需要单独寻找编排系统来管理它们的工作负载,也不用担心操作系统是什么,整个部署的操作效率大幅提高。为了实现这一目标,Kubernetes v1.14 做了以下重点更新:

  • 工作站节点和容器新增 Windows Server 2019 支持;
  • 使用 Azure-CNI、OVN-Kubernetes 和 Flannel 支持树外网络连接;
  • 改进了对 Pod、服务类型、工作负载控制器和 metrics/quotas 的支持,以更紧密的融合那些已经支持 Linux 容器的能力。

值得关注的 kubectl 更新 

新的 kubectl 文档和标志 

kubectl 的文档已经从头开始重写,重点是使用声明性 Resource Config 来管理资源。该文档目前以独立站点的形式发布,采用电子书格式,并在 k8s.io 文档中提供对应链接(详情见:https://kubectl.docs.kubernetes.io)。 

新的 kubectl 徽标和吉祥物(音为 kubee-cuddle)也会在新的文档站点中展示出来。 

kustomize Integration 

kustomize 的声明性 Resource Config 创作功能现在可通过 -k 标志(如用于命令 apply、get 等命令)和 kustomize 子命令在 kubectl 中获得。kustomize 帮助用户使用 Kubernetes 原生概念创建和重用 Resource Config。用户现在能够利用 kubectl apply -k dir/ 将拥有 kustomization.yaml 的目录适用于集群。此外,用户还可以向 stdout 发出自定义的 Resource Config,而无需通过 kubectl kustomize dir/ 加以应用。新功能记录,见 https://kubect.docs.kubernetes.io。 

社区还将继续通过 Kubernetes 的 kustomize repo 对 kustomize 子命令进行开发。最新的 kustomize 功能将以独立的 kustomize 二进制文件(发布到 kustomize repo)的形式更改为频率的发布,并将在每次 Kubernetes 发布之前在 kubectl 中更新。 

kubectl 插件机制逐渐稳定 

kubectl 插件机制允许开发人员以独立二进制文件的形式发布自己的自定义 kubectl 子命令。这些成果将可帮助 kubectl 与附加 porcelain 实现更多新的高级功能(如添加 set-ns 命令)。 

插件必须具有 kubectl- 为命名的前缀,并保存于用户的 $PATH 中。在 GA 中,插件机制已经大幅简化。目前,其形式类似于 git 插件系统。 

持久化本地存储进入 GA 阶段 

新版本下,持久化本地存储更加稳定,使用户可以把本地连接存储用作持久存储源。由于性能和成本的考量,分布式文件系统和数据库一直是持久性本地存储的主要用例。相比云提供商,本地 SSD 提供的性能远比远程磁盘优秀。而相比裸机,除了性能,本地存储通常更便宜,并且使用它是配置分布式文件系统的必要条件。 

PID 限制 Beta 预告 

进程 ID(PID)是 Linux 主机上的基本资源。在不遇到任何其他资源限制的情况下,用户无法接受因为进程 ID 不足而影响任务运行,甚至导致主机稳定性降低。管理员需要一些机制来确保 Pod 中的 PID 不被耗尽,从而阻止主机守护程序(运行时、kubelet 等)运行。此外,管理员还需要确保在各 Pod 之间限制 PID,以确保它们不会影响到运行在节点上的其他工作负载。 

在 Beta 版中,管理员可以通过预定义每个 Pod 的 PID 数量,实现 Pod 之间的  PID 隔离。此外,管理员也可以通过节点可分配的方式为用户 Pod 保留大量可分配的 PID,这是 Alpha 版中实现 Pod 间的 PID 隔离的方法。在下一版本中,开发团队希望能把 Beta 版带给开发者。

 其他值得注意的功能更新 

Pod 优先级和抢占使 Kubernetes 调度程序能够首先调度更重要的 Pod,当集群资源不足时,它会删除不太重要的 Pod,以便为更重要的 Pod 创建空间。重要性由优先级指定。 

Pod Readiness Gates 现在为 Pod 就绪情况提供了外部反馈的扩展点。 

加强默认 RBAC 的 clusterrolebindings 发现能力。移除了原本默认可通过未授权访问的 API 集发现功能,旨在提升 CRD 隐私性以及默认集群的总体安全水平。 

可用性

Kubernetes v1.14 可从 GitHub 下载。要开始使用 Kubernetes,请查看各类交互式教程。你也可以使用 kubeadm 轻松安装 1.14 版本 。 

紧急升级说明

kube-apiserver 

  • 默认的 RBAC 策略已不再授予未经身份验证的用户使用发现和权限检查的 APIs 的权限(通过 kubectl auth can-i)。升级后的集群会保留先前的行为,但是如果集群管理员希望授予未身份验证的用户访问新集群,则必须明确指定 discovery 或者权限检查的 APIs;
  • --storage-versions 标志已经被移除。storage version 会一直以默认值方式编译到 kube-apiserver 里;
  • --repair-malformed-updates 标志被移除;
  • Kube-apiserver 现在只聚合来自 /openapi/v2 聚合 API 服务器端点的 openapi 模式。聚合的后备 /swagger.json 已被删除。确保聚合 API server 通过 /openapi/v2(自 v1.10 起可用)提供架构信息;
  • 已删除前缀为“io.k8s.kubernetes.pkg”(自 v1.9 已弃用)的 OpenAPI 定义;
  • 该 ValidateProxyRedirects 功能已升级为 Beta 并默认启用。此功能限制从 apiserver 到同一主机重定向的重定向跟踪。如果节点配置为响应不同于 apiserver 请求的主机接口上的 CRI 流请求(仅在不使用内置 dockershim 和设置 kubelet 标志的情况下 --redirect-container-streaming=true),则这些请求将被破坏。在这种情况下,可以暂时禁用该功能,直到更正节点配置。我们建议设置 --redirect-container-streaming=false 以避免问题。

kubectl  

  •  已弃用的 kubectl get 的 --show-all 标记已被删除。

kubelet 

  • 已弃用的 --experimental-fail-swap-on 标志已被删除;
  • 使用 HTTPGetAction 的运行状况检查(活动性和就绪性)探测将不再遵循重定向到原始探测请求的不同主机名。相反,这些非本地重定向将被视为成功(记录的行为)。在这种情况下,将生成具有“ProbeWarning”原因的事件,指示重定向被忽略。如果你以前依赖重定向对不同的端点运行状况检查,则需要在 kubelet 外部执行运行状况检查逻辑,例如通过代理外部端点而不是重定向到它。

client-go 

  • 已弃用的无版本 API 组访问(如 clientset.Apps())已被删除。使用显式版本(如 clientset.AppsV1());
  • 磁盘缓存的发现客户端从 k8s.io/client-go/discovery 移至 k8s.io/client-go/discovery/cached/disk。内存缓存的发现客户端从 k8s.io/client-go/discovery/cached 移至 k8s.io/client-go/discovery/cached/memory。

kubeadm 

  • kubeadm alpha preflight 和 kubeadm alpha preflight node 被移除;你现在可以使用 kubeadm join phase preflight;
  • 弃用的污点 node.alpha.kubernetes.io/notReady 和 node.alpha.kubernetes.io/unreachable 不再支持或调整。应将这些替换为node.kubernetes.io/not-ready 和 node.kubernetes.io/unreachable;
  • 任何匹配 pod_name 和 container_name 标签的 Prometheus 查询(例如 cadvisor 或 kubelet 探测指标)都应该更新为 Pod 和 Container。pod_name 和 container_name 标签将与一个过渡版本一起存在,并在将来删除。

 1.14 更新细节 

Windows 节点支持已进入稳定阶段 

  • 支持 Windows Server 2019 作为 worker nodes 和容器使用;
  • 支持使用 Azure-CNI、OVN-Kubernetes 和 Flannel 组成树外网络连接;
  • 改进了对 Pods、service types、workload controllers 和 metrics/quotas 的支持,以更紧密的融合那些已经支持 Linux 容器的能力。

 kubectl 的插件机制逐步趋于稳定

  •   kubectl 扩展性功能,支持添加新命令,还可以覆写指定的子命令。 

本地存储管理达到 GA  

  • 使本地(非网络)存储可用作持久卷源;
  • 允许用户利用本地持久存储通常更便宜且性能更好的优点。

Kubernetes 中的 Pod 优先级和抢占 

  • Pod 优先级和抢占使 Kubernetes 调度程序能够首先调度更重要的 Pod,当集群资源不足时,它会删除不太重要的 Pod,以便为更重要的 Pod 创建空间。重要性由优先级指定。 

Pod Ready ++ 

  •  介绍了有关 Pod 准备就绪的外部反馈的扩展点。 

kubeadm:在 HA 设置中自动执行控制平面之间的证书复制 

  • 现在,通过启用现有控制平面节点的可选自动证书副本,可以简化将控制平面节点连接到 HA 群集的过程;
  • 你现在可以使用 kubeadm init --experimental-upload-certs 和 kubeadm join --experimental-control-plane --certificate-key。

kubeadm:将 kubeadm join 工作流程公开为阶段

  • 该 kubeadm join 命令现在可以分阶段使用。与 kubeadm init 在 1.13 中完成的工作类似,在 1.14 中,join 现在可以使用 kubeadm join phase 子命令逐步/有选择地执行阶段。这使得可以进一步定制将节点加入集群的工作流程。 

新版本评论

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

从 Kubernetes v1.13 开始,我们渐渐发现 Kubernetes 在趋于稳定,并没有太多新功能的增加,更多的是在稳定性,安全性和扩展性等功能方面的加强。在今天发布的 v1.14 中,这点也可以得到体现。

Kubernetes v1.14 依然延续 v1.13 在扩展性上做了很多工作,尤其对 Windows 的支持。在官方声明中, 新版本可以添加 Windows 节点作为工作节点,并且调度 Windows 容器。 其实,Kubernetes 对 Windows 的支持可以追溯到 1.5 版本,历经这么长时间的努力,现在用户终于可以配置使用 Linux + Windows 集群环境,并且同时运行 Windows 容器应用和 Linux 容器应用。这给想要使用 Kubernetes 编排系统而又基于 Windows 开发的企业带来了福音。

参考文献: 

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

2.https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG-1.14.md#kubernetes-v114-release-notes 



274 comCount 0