太平洋时间 2022 年 5 月 3 日,Kubernetes 1.24 正式发布,在新版本中,我们看到 Kubernetes 作为容器编排的事实标准,正愈发变得成熟,有 12 项功能都更新到了稳定版本

另外,讨论了很久的 “弃用 Dockershim” 也终于在这个版本画上了句号。虽然在新版本中,我们没有看到太多重磅的特性,但是还是引入了很多实用的功能,比如 StatefulSets 支持批量滚动更新NetworkPolicy 新增 NetworkPolicyStatus 字段方便进行故障排查等。接下来,让我们一起看一下!

01

重磅改动

Kubernetes 正式移除对 Dockershim 的支持,有状态应用 StatefulSets 支持批量滚动更新。

如何实现集群平滑过渡,可以参考 CRI-Dockerd

https://github.com/DaoCloud-OpenSource/docs/blob/main/kubernetes/sig-release/v1.24/cri-docker.md

02

升级提醒

ServiceAccount token 现在不会以 Secret 的方式自动生成,而是通过 TokenRequest API 的方式获取 token 信息,并以投射卷的方式保存,下面会详细介绍。

kubernetes 正式移除对 Dockershim 的支持,请使用其他容器运行时替代 。

拓扑调度 Filter 阶段目前会移除不符合节点选择和节点亲和性的节点,可能会导致原集群中不符合该要求但是成功调度的 Pod,重新调度时变成不可调度。

03

功能特性

API

默认开启 OpenAPI V3

  • Stage: Beta

  • FeatureGateName: OpenAPIv3Enabled

  • Default: On

默认开启 OpenAPI V3,新增端点  /openapi/v3/apis/{group}/{version}

ServerSideFieldValidation 升级至 Beta 版本

  • Stage: Beta

  • FeatureGateName: ServerSideFieldValidation

  • Default: On

当前版本我们可以使用 kubectl --validate=true 来校验请求中,字段是否合法,该特性将这种能力迁移到了 APIServer,避免多个客户端重复实现,同时规避了客户端升级比较慢的问题。

OpenAPI Enum 类型支持升级至 Beta 版本

  • Stage: Beta

  • FeatureGateName: OpenAPIEnum

  • Default: On

OpenAPI 支持识别 +enum,并自动生成文档。

Apps

IndexedJob 升级至稳定版本

IndexedJob 升级至稳定版本,该特性支持带有索引完成信息的 Job,使得每个 Pod 能识别出要处理整个任务的哪个部分。

  • Stage: GA

  • FeatureGateName: IndexedJob

  • Default: On

JobReadyPods 升级至稳定版本

  • Stage: GA

  • FeatureGateName: JobReadyPods

  • Default: On

JobReadyPods 升级至稳定版本,该特性在 JobStatus 原有字段的基础上新增 Ready 字段,用于记录所有处于 Ready 状态的 Pod 数量。

StatefulSets 增加 MaxUnavailable 段,支持同时下线多个 Pod 达到快速滚动更新的目的

  • Stage: Alpha

  • FeatureGateName: MaxUnavailableStatefulSet

  • Default: Off

该特性早在 2018 年就被提出,直到最近完成了 Alpha 版本的功能开发。主要用于 StatefulSet 滚动更新的时候,通过配置 maxUnavailable 字段,支持同时下线多个 Pod,达到快速滚动更新的目的。

新增 StatefulSet 非优雅故障转移功能

  • Stage: Alpha

  • FeatureGateName: NonGracefulFailover

  • Default: Off

当 kubelet 监测到节点关闭的事件,会进行优雅关机,但是在一些特殊场景下,如没有触发 kubelet inhibitor 的锁机制,或者用户错误配置了 ShutdownGracePeriod 和 ShutdownGracePeriodCriticalPods 的时长,kubelet 可能会遗漏掉该事件,此时 StatefulSet 的 Pod 会卡在 terminating 阶段。遇到此场景,NonGracefulFailover 会强制删除 Pod,并解绑存储卷,让 Pod 转移到其他节点。

CronJob 增加时区的支持

  • Stage: Alpha

  • FeatureGateName: CronJobTimeZone

  • Default: Off

该特性允许用户在创建 CronJob 时可以定义时区。

SuspendJob 升级至稳定版本

  • Stage: GA

  • FeatureGateName: SuspendJob

  • Default: On

该特性为 Job 增加了暂停/恢复执行功能。

Auth

CSRDuration 升级至稳定版本

  • Stage: GA

  • FeatureGateName: CSRDuration

  • Default: On

CertificateSigningRequestSpec 新增了一个字段 ExpirationSeconds 来定义证书过期时间而不是默认一年。

StatefulSetsLegacyServiceAccountTokenNoAutoGeneration 升级至 Beta 版本

  • Stage: Beta

  • FeatureGateName: LegacyServiceAccountTokenNoAutoGeneration

  • Default: On

现在,Pod 的 ServiceAccount token 可以通过 TokenRequest API 获取,并以投射卷的方式保存下来。放弃了以往为 ServiceAccount 自动创建 Secret 来保存 token 信息这种不安全的方式。

Network

NetworkPolicy 新增 NetworkPolicyStatus 字段

  • Stage: Alpha

  • FeatureGateName:NetworkPolicyStatus

  • Default: Off

NetworkPolicy 增加 status 状态字段,允许 Network Policy providers 添加相应状态信息供终端用户进行查看和定位问题。

ServiceLBNodePortControl 升级至稳定版本

  • Stage: GA

  • FeatureGateName: ServiceLBNodePortControl

  • Default: On

在 Kubernetes 中类型为 LoadBalancer 的 Service 总是会为每一个 Service 分配一个 NodePort,但这并不总是必要的,如 MetalLB,该特性将这种功能变成用户可选的。

新增 Service 动态、静态 IP 预留功能

  • Stage: Alpha

  • FeatureGateName: ServiceIPStaticSubrange

  • Default: Off

当前 ClusterIP 可以通过动态和静态两种方式配置 IP 地址,但是配置静态 IP 存在 IP 地址冲突的风险,因为现在无法在分配静态 IP 地址之前获知该 IP 是否被动态分配了。该特性引入 --service-cluster-ip-range 标志将 IP 分为静态和动态 IP 地址集,静态 IP 地址集最少有 16 个 IP 地址,最多不超过 256 个。当动态 IP 地址集消耗完了仍然会消耗静态 IP 地址集。通过该机制减少 IP 冲突问题。

Node

KubeletCredentialProvider 升级至 Beta 版本

  • Stage: Beta

  • FeatureGateName: KubeletCredentialProvider

  • Default: On

Kubernetes 正致力于将内置的特定云提供商的相关代码剥离出去。KubeletCredentialProvider 希望通过灵活可拓展的插件机制动态接入任何云提供商的镜像注册认证,并将目前内置的 ACR、ECR、GCR 相关实现移除。

IdentifyPodOS 升级至 Beta 版本

  • Stage: Beta

  • FeatureGateName: IdentifyPodOS

  • Default: On

该特性为 PodSpec 增加一个表示当前操作系统的字段 OS,以满足调度的需求。

GRPCContainerProbe 升级至 Beta 版本

  • Stage: Beta

  • FeatureGateName: GRPCContainerProbe

  • Default: On

支持原生的 gRPC 探针。

AnyVolumeDataSource 升级至 Beta 版本

  • Stage: Beta

  • FeatureGateName: AnyVolumeDataSource

  • Default: On

该特性允许使用任何自定义的资源来做作为 PVC 中的 DataSource。

基于 Pod 优先级的节点优雅关机功能升级至 Beta 版本

  • Stage: Beta

  • FeatureGateName: PodPriorityBasedGracefulNodeShutdown

  • Default: Off

当节点进入优雅关机流程,该特性会将 Pod 的优先级纳入考虑,高优先级的 Pod 将会有更多的时间来终止运行。

Pod Overhead 功能升级至稳定版本

  • Stage: GA

  • FeatureGateName: PodOverhead

  • Default: On

沙箱容器运行时会有一些不容忽视的资源消耗,比如 Kata 容器运行时会包括一个 kernel 内核,一个 kata 客户端,以及一些初始化程序,它们所消耗的资源已经无法忽视。Pod Overhead 提供了一种机制,可以为特定运行时设置它们所需要的资源,并在调度、资源限额、资源约束时将它们考虑在内,实现更精确的管控。

Scheduling

DefaultPodTopologySpread 升级至稳定版本

  • Stage: GA

  • FeatureGateName: DefaultPodTopologySpread

  • Default: On

该特性为使用功能 (.Spec.TopologySpreadConstraints) 的用户提供默认的 PodTopologySpread 配置,配置如下:

​​​​​​​

  defaultConstraints:  - maxSkew: 3      topologyKey: "kubernetes.io/hostname"      whenUnsatisfiable: ScheduleAnyway  - maxSkew: 5      topologyKey: "topology.kubernetes.io/zone"      whenUnsatisfiable: ScheduleAnyway

PodAffinityNamespaceSelector 升级至稳定版本

  • Stage: GA

  • FeatureGateName: PodAffinityNamespaceSelector

  • Default: On

默认情况下,Pod 亲和性和反亲和性都是作用在 Pod 所在的命名空间,该特性提供了跨命名空间的能力。

拓扑调度新增 MinDomains 字段约束拓扑域数量

  • Stage: Alpha

  • FeatureGateName: MinDomainsInPodTopologySpread

  • Default: Off

调度插件 PodTopologySpreadPlugin 新增 MinDomains 字段约束拓扑调度时的最小拓扑域数量,默认值为 1。

NonPreemptingPriority 升级至稳定版本

  • Stage: Beta

  • FeatureGateName: NonPreemptingPriority

  • Default: On

该特性为 PriorityClass 增加 Preempting 字段,来控制设置为该 PriorityClass 的 Pods 是否进行抢占调度。

PreferNominatedNode 升级至稳定版本

  • Stage: GA

  • FeatureGateName: PreferNominatedNode

  • Default: On

PreferNominatedNode 优化了调度流程,被 Pod 提名的节点会优先被评估,如果评估不通过,则继续走标准的调度流程。

Storage

HonorPVReclaimPolicy 升级至 Beta 版本

  • Stage: Beta

  • FeatureGateName: HonorPVReclaimPolicy

  • Default: On

PV 可以指定 Reclaim Policy 回收策略,当 PVC 优先删除,PV 回收策略会生效,但是当 PV 先于 PVC 被删除,回收策略则不会生效,该特性修复了这个 bug,使得回收策略永远都生效。

CSIMigrationAzureDisk 升级至 Beta 版本

  • Stage: GA

  • FeatureGateName: CSIMigrationAzureDisk

  • Default: On

该特性主要是将 Azure Disk 相关代码移出 Kubernetes 主库。

ExpandInUsePersistentVolumes 升级至稳定版本

  • Stage: GA

  • FeatureGateName: ExpandInUsePersistentVolumes

  • Default: On

该特性允许用户修改 PV 大小。

Cli

Kubectl 增加对子资源的支持

  • Stage: Alpha

  • FeatureGateName: N/A

  • Default: N/A

Kubectl 的 get,patch,edit 命令增加了一个新的 --subresource 标志以支持获取和更新资源的 status 和 scale 字段。

Instrumentation

引入带有上下文信息的日志库

  • Stage: Alpha

  • FeatureGateName: StructuredLogging

  • Default: Off

引入可以传递上下文信息的日志库,如输出格式,日志信息级别,额外携带的值,名字等。

Cloud Provider

Leader Migration 升级至稳定版本

  • Stage: GA

  • FeatureGateName: ControllerManagerLeaderMigration

  • Default: On

Kubernetes 正致力于将特定云厂商的代码移出 Kubernetes 主库,该功能实现了一种在 kube-controller-manager 和 cloud-controller-manager 之间安全迁移特定云厂商控制器的机制。

Cluster Lifecycle

Kubeadm UnversionedKubeletConfigMap 升级至 Beta 版本,并默认开启

  • Stage: Beta

  • FeatureGateName: UnversionedKubeletConfigMap

  • Default: On

Kubeadm 使用新的格式来命名保存 KubeletConfiguration 的 ConfigMap。

其他

Golang 升级到1.18;

调度框架 PreFilter 接口修改了返回值,不仅返回 Status,同时返回 PreFilterResult。

04

废弃功能

DynamicKubeletConfig 功能从 kubelet 中移除;

移除 CCM 已经废弃的不安全的服务;

废弃 metadata.clusterName,并将在下个 release 移除;

VSphere 废弃低于 7.0u2 的版本,vSphere CSI Driver 要求最低使用 vSphere 7.0u2,vSphere 6.7 将在 2022 年 10 月 15 日后放弃支持;

Kubelet 废弃 --pod-infra-container-image 标志 ,并会在未来某个版本完全移除;

ExecCredential 的 Client.authentication.k8s.io/v1Alpha1 版本已经移除,使用 v1Alpha1 版本的 client-go 需要升级到 v1 版本;

移除已经废弃的 ValidateProxyRedirects 和 StreamingProxyRedirects 特性门控;

RuntimeClass API 版本 node.k8s.io/v1Alpha1 不再使用,v1.20 及之后的版本请使用 node.k8s.io/v1 API;

移除 dashboard 的 Cluster addon;

Kube apiserver 移除了对 --master-count 和 --endpoint-reconciler-type=master-count 的支持;

Service 的 annotation tolerate-unready-endpoints 在 v1.11 被废弃,此版本将该注释完全移除,替代方案为 Service.spec.publishNotReadyAddresses;

废弃 azure 内置插件,取而代之使用外置插件 kubelogin;

Kubeadm 废弃 API 版本 kubeadm.k8s.io/v1beta2,并会在未来某个版本完全移除;

废弃 Service.Spec.LoadBalancerIP 字段,鼓励使用 annotations 字段;

kube apiserver 移除了一些不安全的标志 支持,如 --address,--insecure-bind-address,--port,--insecure-port;

实验性的动态日志清理功能被移除;

Kube controller manager 移除了一些不安全的标志支持,如 --address,--port;

CSIStorageCapacity.storage.k8s.io 废弃了 v1beta1 版本,并将在未来某个版本废弃,鼓励使用 v1 版本;

Kube scheduler 移除了不安全的标志,--address 和 --port。

05

社区贡献

「DaoCloud 道客」 作为 Kubernetes 社区的活跃贡献者,在 v1.24 版本开发过程中,参与了诸多贡献,如PodPriorityBasedGracefulNodeShutdown,PodOverhead,DefaultPodTopologySpread 等功能的迭代,Kube-Scheduler Framework 框架的优化,kubelet、kubeadm 等组件多个 bug 修复等等,共计参与了 43 个 PR 的贡献,详见贡献榜单。

榜单地址

https://www.stackalytics.io/cncf?project_type=cncf-group&release=all&metric=commits&start_date=1641744000&end_date=1649692800&module=github.com/kubernetes/kubernetes

也正是因为「DaoCloud 道客」在 Kubernetes 社区的持续耕耘,在过去的几个月中,先后有 2 名同学成为了 sig/node 小组的 Reviewer,有 1 名同学成为了 Kubernetes website 的 Approver

未来,「DaoCloud 道客」会继续在 Kubernetes 开源社区,贡献自己的力量,也欢迎有志之士加入我们,一起驶向星辰大海!

Kubernetes 1.24 - 走向成熟的 Kubernetes相关推荐

  1. Kubernetes 学习总结(35)—— Kubernetes 1.25 正式发布,多方面重大突破

    前言 美国时间 2022 年 8 月 23 日,Kubernetes 1.25 正式发布.此版本更新距离上版本发布时隔 4 个月,是 2022 年的第二个版本.受新冠疫情和国际形势变化影响以及发布团队 ...

  2. centos8 + kubernetes 1.24 master/node 节点

    目标 使用 centos8 安装 kubernetes 1.24 版本 注意, kubernetes 1.24 已经不再支持 dockerd 软件版本 名称 版本 作用 containerd.io 1 ...

  3. 如何使用 cri-docker 解决 Kubernetes 1.24 不支持 Docker 的问题

    从 Kubernetes 1.24 开始,dockershim 已经从 kubelet 中移除,但因为历史问题 Docker 却不支持 Kubernetes 主推的 CRI(容器运行时接口)标准,所以 ...

  4. kubespray v2.21.0 部署 kubernetes v1.24.0 集群

    文章目录 1. 前言 2. 创建7台虚拟机 3. 部署 git 3.1 dnf 安装 3.2 tar 安装 4. 下载 kubespray 介质 5. 配置 zsh 终端 6. 配置互信 7. 安装 ...

  5. kubespray v2.21.0 在线定制部署升级 kubernetes v1.24.0 集群【2】

    文章目录 简介 创建 虚拟机模板 虚拟机名称 配置静态地址 配置代理 yum 配置 配置主机名 安装 git 安装 docker 安装 ansible 配置内核参数 安装 k8s 定制安装 kuber ...

  6. 中国开源正在走向成熟!

    作者 | 唐小引.陈利鑫.屠敏 出品 | CSDN(ID:CSDNnews) 2020 年 7 月 15 日,由中国开源软件推进联盟(COPU)主办,赛迪传媒.<软件和集成电路>杂志社联合 ...

  7. 中国开源正在走向成熟

    作者 | 唐小引.陈利鑫.屠敏 出品 | CSDN(ID:CSDNnews) 2020 年 7 月 15 日,由中国开源软件推进联盟(COPU)主办,赛迪传媒.<软件和集成电路>杂志社联合 ...

  8. Kubernetes弃用Docker?关于Kubernetes、Docker和containerd的那些事

    00 前情提要 作为后端研发工程师,之前的工作中还是涉及到一部分K8S的工作.在当时的工作场景下,我们通过使用Kubernetes(简称k8s)+docker编排部署的架构方案来提供云原生的在线服务. ...

  9. Kubernetes学习总结(8)—— Kubernetes Pod 资源管理 和 Pod 服务质量

    一.Pod 资源管理 1.1.resource 的定义 容器运行过程中需要分配所需的资源,如何与 cggroup 联动配合呢?答案是通过定义resource来实现资源的分配,资源的分配单位主要是 cp ...

最新文章

  1. nvm npm不是内部命令_npm作弊表-最常见的命令和nvm
  2. CVPR 2019 | 实体零售场景下密集商品的精确探测
  3. 关系数据库NoSQL数据库
  4. Twitch未来五年的视频编码战略:从H.264到 AV1
  5. C++primer第二章2.4节对于const限定符相关内容进行详解
  6. 写出float x 与“零值”比较的if语句——一道面试题分析
  7. 一、PHP基础——表单传值、上传文件
  8. UVM序列篇之一:新手上路
  9. 和屌丝一起学cocos2dx-CCScrollView
  10. 23-新建maven 项目
  11. linux在VM下分辨率的问题
  12. 基于SSM实现的在线音乐网站【附源码】(毕设)
  13. 修正的判定条件覆盖例题_语句覆盖、判断覆盖、条件覆盖、条件判定组合覆盖、多条件覆盖、修正条件覆盖...
  14. 马化腾:这一类中层干部,我最多忍你半年
  15. 淮阴工学院计算机网络题库,淮阴工学院计算机导论题库.doc
  16. 佳能eosr控制环能否计算机控制,EOS R有哪些隐藏功能
  17. opencv读取视频及打不开视频的解决方法
  18. 《C Primer Plus》第六章---C控制语句:循环(while for do while 嵌套循环 真值 逗号运算符 复习题编程题)
  19. Praat:强大的语音处理工具。
  20. SAP中注意区分采购合同中的订单单位和价格单位

热门文章

  1. android x5 webview mixed content,关于 Webview 的混合模式(华为 P30 出现问题)
  2. 设计模式(八)Abstract Factory模式
  3. 人工智能在对冲基金的崛起
  4. WAVE SUMMIT 2022 定档520 飞桨又双叒有大动作
  5. c语言是面向对象程序设计,C语言面向对象程序设计.ppt
  6. python turtle画熊猫_Python数据可视化--Pandas plot绘图
  7. Toolbar的介绍和使用
  8. 文献综述的写作原则有哪些?
  9. php调用云打印,打印小票
  10. 【2021】联易融秋招提前批Java后端面经(已OC)