Kubernetes Release Note 解读(1.15, 1.16)

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: Kubernetes 1.16版本相较于1.14版本有着众多演进和增强,本文将对其进行一一解读。

Release Note 解读(1.15, 1.16)

作者 | 张晓宇、黄珂、鲁金达、李传云、陈俊、高相林

前言

  • Kubernetes v1.15 由 25 个增强功能组成:2 个进入稳定,13 个进入 Beta,10 个进入 Alpha;
  • Kubernetes v1.16 由 31 个增强功能组成:8 个进入稳定,8 个进入 Beta,15 个进入 Alpha。

因此从 1.14 尽快升级至 1.16 非常必要,以下将一一进行解读。

Node

1.15

  • 已废弃的 kubelet 安全控制参数 AllowPrivileged、HostNetworkSources、HostPIDSources 和 HostIPCSources 已被移除。取而代之的是一些准入控制(例如 PodSecurityPolicy)来增强这些限制;
  • 已弃用的 kubelet 启动参数 --allow-privileged 已被删除,相关 kubelet 脚本需要同步进行清理;
  • kubelet 仅收集节点、container runtime、kubelet、Pod 和容器的 cgroups metrics。

1.16

  • Node 的 labels beta.kubernetes.io/metadata-proxy-ready, beta.kubernetes.io/metadata-proxy-ready 和 beta.kubernetes.io/kube-proxy-ds-ready 将不再打给新的 Node,而被以下 label 替换:

    • beta.kubernetes.io/masq-agent-ds-ready -> node.kubernetes.io/masq-agent-ds-ready
    • beta.kubernetes.io/kube-proxy-ds-ready -> node.kubernetes.io/kube-proxy-ds-ready
    • beta.kubernetes.io/metadata-proxy-ready -> cloud.google.com/metadata-proxy-ready
  • kubelet 的功能启动参数 HugePages, VolumeScheduling, CustomPodDNS 和 PodReadinessGates 已经被移除。
  • --containerized 在 1.14 被废弃,在 1.16 正式被移除;
  • Node 的 label beta.kubernetes.io/osbeta.kubernetes.io/arch 在 1.14 被废弃,在 v1.18 将正式被移除;
  • cadvisor metric 的 pod_name 字段 container_name 被 pod 和 container 替代,所有 Prometheus 相关的查询需要做相关更新升级。

scheduler

1.15

  • 当 QOS 为 Best effort 的 Pod 的 Tolerations 出现冲突时,即它的 key 和 effect 均相同,则用使用最后一个 Toleration 作为最终调度的依据;
  • PodAffinity 的性能优化,提升了约两倍。

1.16

  • 调度器使用 v1beta1 Event API。涉及改 API 的相关的工具需要同步更新;
  • Pod 打散限制已经进入 alpha 阶段。用户可以通过这些限制在整个集群对 Pod 进行打散部署。

CRD

1.16

  • Custom resources:CRD 作为对 Kubernetes 的扩展,被广泛运用。自 v1.7 版本起,CRD 已经在 Beta 版中可用。在 1.16 版本中,CRD 正式步入 GA 阶段(稳定阶段);
  • Admission webhook:Admission webhooks 作为 Kubernetes 扩展机制被广泛使用。自 v1.9 版本以来已经在 Beta 版中可用。在 1.16 版本中,Admission webhook 也正式步入 GA 阶段(稳定阶段);
  • Overhauled metrics:Kubernetes 广泛使用一个全局 metrics registry 来注册要公开的 metrics。通过实现 metrics registry,metrics 可以以更透明的方式注册。而在这之前,Kubernetes metrics 被排除在任何稳定性需求之外;
  • Volume Extension:新版本有大量和 Volume 及 Volume 修改相关的增强。CSI 规范中对 Volume 调整的支持正在转向 Beta 版,它允许任何 CSI spec Volume plugin 都可以调整大小。

API Server

1.16

  • PodPriority 默认为 true,相关 featuregate 将在 1.18 被废除;
  • WatchBookmark 特性进入 beta 阶段,并默认开启。该功能修复了长时间没有获得 event 的 Watch 请求在下一次 Watch 请求时需要重新 List 资源的问题。

API changes

  1. extensions/v1beta1, apps/v1beta1, and apps/v1beta2 APIs 均不再被默认支持
  • 所有 apps/v1beta1 和 apps/v1beta1 下的资源,使用 apps/v1 替代
  • 位于 extensions/v1beta1 下的资源 daemonsets, deployments, replicasets, etc. 使用 apps/v1 替代
  • 位于 extensions/v1beta1 下的资源 networkpolicies,使用 http://networking.k8s.io/v1 替代
  • 位于 extensions/v1beta1 下的资源 podsecuritypolicies,使用 policy/v1beta1 替代

使用 --runtime-config 标志可以临时启用这些资源(不建议使用,建议切换到更稳定的 Scheme 版本):

  • apps/v1beta1=true
  • apps/v1beta2=true
  • extensions/v1beta1/daemonsets=true,extensions/v1beta1/deployments=true,extensions/v1beta1/replicasets=true,extensions/v1beta1/networkpolicies=true,extensions/v1beta1/podsecuritypolicies=true

这些资源的 API 将在 1.18 中被完全删除。

  1. Aggregated discovery requests 现在会 timeout. Aggregated API servers 必须在 5 秒内完成 discovery calls。(其他请求可以长一些)

使用启动参数 EnableAggregatedDiscoveryTimeout=false 可以将超时时间延长至之前的 30 秒。但是 EnableAggregatedDiscoveryTimeout 将会在 1.17 时被移除。

storage

1.15

之前要想使用 CSI,只能通过 PV 和 PVC 组合的方式。有了 Inline CSI volume 这个能力,可以在定义 Pod 的时候,声明一个与其密切相关的 CSI Volume。Volume 随着 Pod 的创建而创建,Pod 的销毁而销毁。

在新建 PVC 时,可以克隆已经存在的一个 PVC,包括卷的规格以及卷的数据。可用于数据迁移,构建模拟线上环境等场景。需要注意的是该能力只会支持 CSI,In-tree 插件和 FlexVolume 不会有支持。

过去 kubelet 通过定期扫描文件方式采集 ephemeral-storage 空间使用情况。在 1.15 中引入了 project quotas。project quota 相比定期扫描方式,拥有更快的速度和准确性。如果文件被打开,后来删除了,扫描的方式是无法追踪到它,实际文件还占着空间,点击了解更多

未来,还可以利用 project quotas 的能力,来强制限制每个 Volume 可使用的空间(拒绝达到空间后的 IO 写操作)。这样可以避免因为某个不重要的容器的存储写满,导致整个 Pod 被驱逐的情况,也更加贴近 "isolation" 的语义。

Feature 稳定性变化

  • PVs 在线容量调整进入 Beta 阶段。

在线容量调整,可以在 Pod 不进行重建的情况下,完成容量的扩容。

  • SubPath 支持使用环境变量进入 Beta 阶段。

利用 subPath 可以实现多个 Pod 使用同一 Volume 的子路径。使用 subPathExpr 参数,可以使用 Downward API 环境变量来为每个 Pod 构建独特的子路径。比如以每个 Pod 的 Name(subPathExpr: $(POD_NAME) 将 Volume 的子路径绑定到 Pod 的同一个挂载点,实现 Pod 间数据的隔离。

1.16

  • CSI 支持 Windows。Windows 用户福音,从 1.16 开始,CSI 也支持 Windows node 了;
  • 克隆 PVC 进入 Beta 阶段;
  • Ephemeral Inline CSI volumes 支持进入 Beta 阶段;
  • CSI Volume resizing 支持进入 Beta 阶段。

Network

1.15

  • kube-proxy 允许在使用 ipvs 时无感重启、切换模式时不再自动清理规则、禁用 UDP 平滑终止;
  • service.spec.externalName 允许结尾有个 dot;
  • 其它一些小的 bugfix

1.16

IPv4/IPv6双栈(alpha)

可以将 IPv4 和 IPv6 地址分配给 Pods 和 Services,为 IPv6 化进程迈出重要的一步,在 Kubernetes 集群上启用 IPv4/IPv6 双协议栈可提供下面的功能:

  • 每个 pod 分配一个 IPv4 和 IPv6 地址
  • 可使用支持 IPv4 or IPv6 的 Service
  • Pod 的出站流量可通过 IPv4 和 IPv6 路由

EndpointSlice API(alpha)

当前的一个 Service 对象在实现上对应了一个 K8s Endpoints 对象,该对象包含了所有的 backend Pods 信息,随着 backend Pods 的规模的增大,单个 backend Pod 的 Add/Update/Delete 对管控组件 (apiserver, etcd, endpoints-controller, kube-proxy) 会造成很大的压力。

通过引入 EndpointSlice API,将 backend Pods 信息分片放入不同 EndpointSlice (一个 Service 包含多个 EndpointSlice 对象,一个 EndpointSlice 包含多个 Endpoint <一个 Endpoint 对应一个backend实例信息> - 默认最多 100 个) 解决性能问题的同时也为提供其他网络特性保留了高度的扩展性,如在 Endpoint 中包含了 backend 服务实例的拓扑位置信息 (region, zone,hostname 等) 可以用来帮助就近路由访问 Service 的请求。

对于 Service LoadBalancers 的 Finalizer Protection 进入 beta 阶段

这个功能确保 Service 资源对象不会被彻底删除直到相关的 load balancer 被删除。

API Changes

  • NetworkPolicy: extensions/v1beta1 弃用,用 networking.k8s.io/v1 API 替代;
  • Ingress: extensions/v1beta1 弃用,用 networking.k8s.io/v1beta1 API 替代。
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
SQL Kubernetes Cloud Native
|
域名解析 存储 Kubernetes
Kubernetes Release Note 解读
本文主要为大家解读 Kubernetes v1.15、Kubernetes v1.16 的不同功能。分别从 Node、scheduler、CRD、API Server 等5个方面进行详细讲解。
798 0
Kubernetes Release Note 解读
|
调度 容器 Perl
分类解读:寻找 K8s 1.14 Release 里的“蚌中之珠”
作者| 张磊、心贵、临石、徙远、衷源、浔鸣 Kubernetes 1.14.0 Release 已经于3月25日正式发布。相信你也已经注意到,相比于1.13 和 1.12 版本,这次发布包含的重要变非常多,其对应的 Release Note 的篇幅长度也创下了“新高”。
2366 0
|
调度 容器 Perl
寻找 K8s 1.14 Release 里的“蚌中之珠”
K8s 1.14 发布了,Release Note那么长,我们该从何读起?
9600 0
|
容器 Kubernetes Perl
分类解读 | 寻找 K8s 1.14 Release Note 里的“蚌中之珠”
Kubernetes 1.14.0 Release 已经于 3 月 25 日正式发布。相信你也已经注意到,相比于 1.13 和 1.12 版本,这次发布包含的重要变更非常多,其对应的 Release Note 的篇幅长度也创下了“新高”。
604 0
|
Kubernetes 调度 Windows
K8s 1.14 发布了,Release Note 该怎么读?
在本篇文章中,我们将 1.14 的Release Note 按照主题进行了重新归纳和梳理,按照类别对重要变更进行了技术剖析和讨论。希望这种“分类解读”的方式,能够帮助大家更好的理解 1.14 这个发布的核心内容。
1258 0
|
21天前
|
Kubernetes 监控 Cloud Native
Kubernetes集群的高可用性与伸缩性实践
Kubernetes集群的高可用性与伸缩性实践
56 1
|
2月前
|
JSON Kubernetes 容灾
ACK One应用分发上线:高效管理多集群应用
ACK One应用分发上线,主要介绍了新能力的使用场景
|
2月前
|
Kubernetes 持续交付 开发工具
ACK One GitOps:ApplicationSet UI简化多集群GitOps应用管理
ACK One GitOps新发布了多集群应用控制台,支持管理Argo CD ApplicationSet,提升大规模应用和集群的多集群GitOps应用分发管理体验。
|
2月前
|
Kubernetes Ubuntu Linux
Centos7 搭建 kubernetes集群
本文介绍了如何搭建一个三节点的Kubernetes集群,包括一个主节点和两个工作节点。各节点运行CentOS 7系统,最低配置为2核CPU、2GB内存和15GB硬盘。详细步骤包括环境配置、安装Docker、关闭防火墙和SELinux、禁用交换分区、安装kubeadm、kubelet、kubectl,以及初始化Kubernetes集群和安装网络插件Calico或Flannel。
194 4

相关产品

  • 容器服务Kubernetes版