《中国AI Agent应用研究报告 2024》开放下载 >>> 了解详情
写点什么

Kubernetes Release Note 解读(1.15, 1.16)

  • 2020-03-13
  • 本文字数:3405 字

    阅读完需:约 11 分钟

Kubernetes 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, CustomPodDNSPodReadinessGates 已经被移除。

  • --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=trueapps/v1beta2=trueextensions/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 替代。


本文转载自云栖社区。


原文链接


https://yq.aliyun.com/articles/748085


2020-03-13 10:001675

评论

发布
暂无评论
发现更多内容

C++ 自增、自减运算符的重载和性能分析

小林coding

c++ 编程 运算符

高效程序员的45个习惯:敏捷开发修炼之道(2)

石云升

读书笔记 敏捷开发 对事不对人 欲速则不达

Go语言专家测试,80%的人第一题就挂了!

博文视点Broadview

云原生 评测 Go 语言

C++ 一篇搞懂继承的常见特性

小林coding

c++ 编程 继承

C++ 赋值运算符‘=‘的重载(浅拷贝、深拷贝)

小林coding

c++ 编程 浅拷贝和深拷贝

职教黄金时代,河南如何继续“乘风破浪”?

InfoQ_967a83c6d0d7

2. 整体把握 CocoaPods 核心组件

Edmond

ruby ios swift CocoaPods 包管理工具

超超超全递归技巧讲解,这次带你拿下递归

多选参数

数据结构 算法 递归 数据结构与算法

区块链:在发展的同时,准备好你的产品。

石云升

区块链 DCEP 创新

C++ 运算符重载的基本概念

小林coding

c++ 编程

Java-技术专题-final关键字

洛神灬殇

SpringCloud(Netflix)-技术专题-Ribbon的基本使用

洛神灬殇

Java 技术 SpringCloud

微服务-技术专题-初步介绍服务发现

洛神灬殇

Java 技术 微服务

大数据技术发展(一):大数据技术的起源

cristal

Java 大数据 hadoop

C++ 流插入和流提取运算符的重载

小林coding

c++ 编程

经济优势再显,江苏如何通过职教打造人才高地?

InfoQ_967a83c6d0d7

最佳实践:使用阿里云CDN加速OSS访问

阿里云Edge Plus

CDN

排序算法一(冒泡排序、选择排序、插入排序)

xcbeyond

Java 算法 冒泡排序 选择排序 插入排序

Java NIO 是 NIO么?

soolaugust

Java io nio

C++ this指针的理解和作用

小林coding

c c++ 指针

SpreadJS 纯前端表格控件应用案例:铭天预算执行系统

葡萄城技术团队

SpreadJS 预算执行系统

C++ 模板常见特性(函数模板、类模板)

小林coding

c++ 编程 模板方法

Linux 平均负载高了怎么办?

小林coding

Linux 问题处理 linux命令

云计算的可信新边界:边缘计算与协同未来——【两万五千字长文】

华为云开发者联盟

云计算 云原生 5G 边缘计算 云服务

Volcano:带你体验容器与批量计算的碰撞的火花

华为云开发者联盟

Kubernetes 容器 分布式 Volcano 批量计算

C++ 一篇搞懂多态的实现原理

小林coding

c++ 编程 封装、继承、多态

使用 Golang 和 HTML5 开发一个 MacOS App

郭旭东

macos Go 语言

C++ static 与 const 的认识

小林coding

c++ 编程 static关键字

白鹭引擎助力《迷你世界》研发团队开发3D小游戏版

DT极客

央行发行的数字货币会带来哪些变化?

石云升

区块链 数字货币 DECP

C++ 手把手教你实现可变长的数组

小林coding

c++ 编程 数组

Kubernetes Release Note 解读(1.15, 1.16)_安全_阿里云容器平台_InfoQ精选文章