1.26 changes since 1.24
重大更新
PodSecurityPolicy 被删除,Pod Security Admission 进入 stable:PodSecurityPolicy 在1.21版本被弃用,在1.25版本中被彻底移除。提高其可用性所需要的更新会带来破坏性的变化,因此有必要删除它,用更友好的 Pod Security Admission 来替代,如果当前已经使用了 PodSecurityPolicy,请参见 从 PodSecurityPolicy 迁移到内置的 Pod Security admission。
Ephemeral Containers 进入 stable:ephemeral containers 在1.23为 beta 版本,在1.25进入 stable 版本。对于 container 因为 crash 或者镜像中缺少调试工具无法有效的 kubectl exec 时,可以在 pod 中使用 ephemeral containers 来进行检查和排障。
Cgroups v2 在1.25进入 stable:cgroups v2 相较于 cgroups v1 提供了许多改进。虽然将继续支持 cgroups v1,但此 cgroups v2 增强功能使 Kubernetes 准备好最终弃用并替换为 v2。
Windows 在1.25继续优化支持,例如支持单元测试、一致性测试和为 Windows Operational Readiness 创建新的仓库。
镜像仓库从 k8s.gcr.io 迁移到 registry.k8s.io。
SeccompDefault 在1.25进入 beta 阶段。
NetWorkPolicy 的 endPort 在1.25进入 stable,之前每个 NetworkPolicy 只支持单一端口,而 endPort 字段可以指定一个端口范围。
Local Ephemeral Storage Capacity Isolation 在1.25进入 stable,提供了 pod 之间本地临时容器存储容量隔离,例如 EmptyDir,如果 pod 对本地临时容量存储的消耗超过限制,可以通过驱逐来强制限制其对共享资源的消耗。
CSI Migration 在1.25进入 stable,CSI 迁移是 SIG Storage 之前在多个版本中做出的持续努力,目的是把 in-tree 卷插件迁移到 out-of-tree CSI 驱动。
CSI Ephemeral Volume 在1.25进入 stable,CSI 临时卷功能允许在 Pod 规范中直接指定 CSI 卷,用于临时使用场景。它们可以用于将任意状态(如配置、秘密、身份、变量或类似信息)通过挂载的卷直接注入到 Pod 内。这最初在1.15版本作为 alpha 功能引入,并已升级为正式版。一些 CSI 驱动程序(如 secret-store CSI 驱动程序)使用了此功能。
CRD Validation Expression Language 在1.25进入 beta 阶段。
Server Side Unknown Field Validation 在1.25进入 beta 阶段,默认启用,apiserver 支持对未知字段的校验,使得后边可以按计划依次移除 kubectl 中的 client 端的校验功能。
KMS v2 alpha1 api 在1.25引入来增强性能、实现轮替和可观察改进。使用 AES-GCM 替代 AES-CBC,通过 DEK 实现静态数据加密,无需用户做额外操作,继续允许使用 AES-GCM 和 AES-CBC 进行读取。
CRI v1alpha2 API 在1.26中移除,推荐使用 CRI v1 版本。在1.26中将不支持 containerd 1.5及更早的版本,如果您使用 containerd, 则需要升级到 containerd v1.6.0 或更高版本,然后才能将该节点升级到 Kubernetes v1.26。
在1.26中 v1beta1 流量控制 API 组:FlowSchema 和 PriorityLevelConfiguration 的 flowcontrol.apiserver.k8s.io/v1beta1 API 版本将不在v1.26中提供。自 v1.23 起可用的 flowcontrol.apiserver.k8s.io/v1beta2 API 版本。
1.25开始不再提供 autoscaling/v2beta1 API 版本的 HorizontalPodAutoscaler,autoscaling/v2beta2 API 版本的 HorizontalPodAutoscaler 将不在 v1.26 中提供。推荐使用自 v1.23 起可用的 autoscaling/v2 API 版本。
树内凭证管理代码,原来作为 Kubernetes 一部分的、特定于供应商 Azure 和 Google Cloud 的身份验证代码将从 client-go 和 kubectl 中移除。作为替代方案,Kubernetes 在发布 v1.26 之前已提供了供应商中立的身份验证插件机制。
废弃和移除
参数
kubectl 命令行参数:作为包容性命名倡议(Inclusive Naming Initiative)的实现工作的一部分,在1.26中 --prune-whitelist 标志将被弃用,并替换为 --prune-allowlist。
kube-apiserver 命令行参数:--master-service-namespace 命令行参数对 kube-apiserver 没有任何效果,并且已经被非正式地被弃用。该命令行参数将在 v1.26 中正式标记为弃用,准备在未来某个版本中移除。Kubernetes 项目预期不会因此项弃用和移除受到任何影响。
kubectl run 命令行参数:1.26 针对 kubectl run 子命令若干未使用的选项参数将被标记为弃用,这包括:cascade、filename、force、grace-period、kustomize、recursive、timeout、wait。
kube-proxy userspace 模式在1.26中被移除,Linux 用户应使用 iptables 或 ipvs,Windows 用户应使用 kernelspace,现在使用 --mode userspace 会失败。
API 版本
1.25
batch/v1beta1 被移除,使用 batch/v1 替代。
discovery.k8s.io/v1beta1 被移除,使用 discovery.k8s.io/v1 替代。
events.k8s.io/v1beta1 被移除,使用 events.k8s.io/v1 替代。
policy/v1beta1 被移除,使用 policy/v1 替代。
node.k8s.io/v1beta1 被移除,使用 node.k8s.io/v1 替代。
autoscaling/v2beta1 被移除,使用 autoscaling/v2 替代。
1.26
autoscaling/v2beta2 被移除,使用 autoscaling/v2 替代。
flowcontrol.apiserver.k8s.io/v1beta1 被移除,可以使用 flowcontrol.apiserver.k8s.io/v1beta2 和 flowcontrol.apiserver.k8s.io/v1beta3 替代。
其他
1.25 弃用 GlusterFS 和 Portworx in-tree 卷插件。虽然为 GlusterFS 构建了 CSI 驱动,但未曾得到维护。社区曾讨论迁移到一个兼容 CSI 驱动的可能性,但最终决定开始从树内驱动中弃用 GlusterFS 插件。
1.25 移除 PodSecurityPolicy、Flocker、Quobyte、StorageOS。
1.25 对 vSphere 版本支持的变更:树内 vSphere 卷驱动将不支持任何早于 7.0u2 的 vSphere 版本。
1.25 清理 IPTables 链的所有权:Kubelet 将逐渐迁移为不在 nat 表中创建以下 iptables 链:KUBE-MARK-DROP、KUBE-MARK-MASQ、KUBE-POSTROUTING,此项变更将通过 IPTablesCleanup 特性门控分阶段完成。
1.26 移除 GlusterFS in-tree 驱动,移除已弃用的 OpenStack in-tree 存储集成(Cinder卷类型)。
Changelogs
1.24 changes since 1.22
注意:
1. Kubernetes 1.24通过 Dockershim 对 Docker 的支持已移除,TKE 新建节点的容器运行时仅支持 Containerd 1.6.9。
2. 针对集群1.22 升级1.24场景,运行时为 docker、containerd 1.4 版本以下(不包含 1.4)的节点,仅支持通过重装滚动升级模式进行节点升级。
重大更新
从 kubelet 中删除 Dockershim
kubelet 内置的 dockershim 在 v1.20 中被废弃,从 v1.24 开始被移除。从 v1.24 开始,使用 docker 运行时的节点,需要迁移到其运行时,如 containerd 或 CRI-O,更多信息可参考 Is Your Cluster Ready for v1.24。
EphemeralContainers 升级到 Beta
临时容器特性在 1.23 进入 Beta,临时容器是在现有的 Pod 中存在有限时间的容器。当需要检查另一个容器,但因为该容器已经崩溃或其镜像缺乏调试工具不能使用 kubectl exec 时,使用临时容器对故障排除特别有用。
默认关闭 Beta 版本的 API
新增的 beta 版本 API,从 1.24 开始默认被关闭。已存在的 beta 版本 API 以及升级的 Beta 版本,不受影响。
存储容量和卷扩展升级到 GA
NonPreemptingPriority 特性 GA
NonPreemptingPriority 特性在 1.24 GA,默认开启且不可关闭。
基于 gRPC 的探测升级到 Beta
GRPCContainerProbe 特性在 1.24 升级到 beta,并默认开启。
IdentifyPodOS 特性升级到 Beta
1.23 引入 IdentifyPodOS 特性,在 1.24 升级到 Beta。开启后,podSpec 可以指定 os 字段,表示希望 Pod 运行的 OS 类型 (linux/windows),在创建 Pod 时,将根据该字段验证 Pod 的其他设置,如 SecurityContext 字段。注意,仍然需要通过 nodeSelector kubernetes.io/os 来选择 Pod 预期的 OS 类型的节点。当调度到的节点 OS 与该字段指定的 OS 不匹配时,kubelet 将拒绝运行该 Pod。
JobReadyPods 特性进入 Beta
1.23 引入的 JobReadyPods 特性,在 1.24 升级到 Beta。开启后,Job 状态中将显示 Ready 的 Pod 数量。
KubeletCredentialProviders 特性升级到 Beta
该特性在 1.24 Beta,并默认开启,允许 kubelet 使用 exec 插件动态获取容器镜像仓库的凭据,而不是将凭据存储在节点的文件系统上。
ServiceIPStaticSubrange alpha 特性
1.24 引入 ServiceIPStaticSubrange 特性,开启后,可以有效避免分配给 service 的 ClusterIP 发生冲突。
动态 Kubelet 配置被移除
动态 Kubelet 配置在 1.22 中废弃后,在 1.24 中被移除。
CNI 版本相关的不兼容更改
以下版本的运行时已经验证与 1.24 兼容:
containerd v1.6.4+,v1.5.11+
CRI-O 1.24+
对于 v1.6.0~v1.6.3 版本的 containerd,需要升级 CNI 插件或者声明 CNI 配置版本,否则会碰到“Incompatible CNI versions” 或 “Failed to destroy network for sandbox” 的错误。
CSI 快照 v1beta1 被移除
VolumeSnapshot v1beta1 在 v1.20 中被弃用,在 1.24 中被移除。
废弃 FlexVolume
从 1.23 开始废弃 FlexVolume,推荐使用 CSI 来开发 volume 驱动。
废弃 klog 相关的参数
从 1.23 开始废弃除
--v
及--vmodule
之外的 klog 参数:--log-dir, --log-file, --log-flush-frequency, --logtostderr, --alsologtostderr, --one-output, --stderrthreshold, --log-file-max-size, --skip-log-headers, --add-dir-header, --skip-headers, --log-backtrace-atIPv4/IPv6 双栈支持升级为 Stable
k8s 1.21 开始默认开启双栈支持,1.23 进入 GA,并移除了 IPv6DualStack 特性。虽然集群默认支持双栈网络,pod 和 service 默认还是单一网络。要使用双栈,节点必须有可路由的 IPv4/IPv6 网络接口,并使用支持双栈的 CNI 网络插件,同时 Service 必须配置使用双栈:Service 的
.spec.ipFamilyPolicy
字段需要设置为PreferDualStack
或者RequireDualStack
。更多信息可参考 IPv4/IPv6 dual-stack。HorizontalPodAutoscaler v2 进入 GA
autoscaling/v2
API 在 1.23 进入 GA,废弃 autoscaling/v2beta2
API。Generic Ephemeral Volume 进入 GA
临时卷特性在 1.23 进入 GA,允许使用所有支持动态创建的存储插件给 Pod 提供临时卷。
忽略卷所有权变更进入 GA
该特性在 1.23 进入 GA,允许把
.securityContext.fsGroupChangePolicy
字段设置为OnRootMismatch
,只有根目录的 Owner 与访问权限与卷所期望的权限不一致时, 才改变其中内容的 Owner 和访问权限,否则可以在挂载 volume 时,跳过递归设置文件权限,加速 Pod 启动。PodSecurity 升级为 Beta
PodSecurity 用来替代已经废弃的
PodSecurityPolicy
准入控制器,在 1.23 进入 Beta 阶段。默认使用 CRI v1
从 1.23 开始,kubelet 支持并默认使用 CRI v1 API。在运行时不支持 v1 时,会回退到 v1alpha2 版。
结构化日志升级为 Beta
结构化日志在 1.23 升级为 Beta,kubelet 和 kube-scheduler 的大部分日志都以结构化的 JSON 格式记录。
简化调度器 plugin 配置
从 1.23 开始,在调度器 Plugins 配置中引入 MultiPoint 项,在其中配置的插件,会自动注册到它所支持的所有的扩展点插件集合中,简化了 plugin 配置。
CustomResourceValidationExpressions alpha 特性
1.23 引入了 CustomResourceValidationExpressions 特性,开启后,可以使用 Common Expression Language (CEL) 编写的规则验证 CRD。
ServerSideFieldValidation alpha 特性
1.23 引入 ServerSideFieldValidation 特性,开启后,在包含未知或者重复字段时,apiserver 可以返回警告信息。可以在请求中指定 fieldValidation 参数:
Ignore:1.23 之前及开启 ServerSideFieldValidation 特性的默认行为,未知或重复字段将(除重复字段的最后一个)被忽略。
Warn:开启 ServerSideFieldValidation 特性的默认行为。
Strict:请求失败,返回 Invalid Request 错误。
OpenAPIV3 特性进入 Beta 阶段
1.23 进入的 OpenAPIV3 特性,在 1.24 进入 Beta,用户可以获取所有 k8s 类型的 OpenAPI v3.0 规范:
$cluster/openapi/v3/apis/<group>/<version>
:某个类型$cluster/openapi/v3
:所有类型PodAndContainerStatsFromCRI alpha 特性
1.23 引入 PodAndContainerStatsFromCRI alpha 特性,开启后,Pod 指标将通过 CRI 接口获取,而不是从 cAdvisor 获取。
其他更新
进入 GA 的特性
1.23:TTLAfterFinished,CSIVolumeFSGroupPolicy,IngressClassNamespacedParams,
1.24:DefaultPodTopologySpread,PodOverhead,IndexedJob,PodAffinityNamespaceSelector,SuspendJob,CSRDuration,ServiceLBNodePortControl,PreferNominatedNode,ControllerManagerLeaderMigration(更多信息可参考 Migrate Replicated Control Plane To Use Cloud Controller Manager)
升级到 Beta 的特性
1.23:JobTrackingWithFinalizers,StatefulSetMinReadySeconds
1.24:AnyVolumeDataSource,MixedProtocolLBService,GracefulNodeShutdownBasedOnPodPriority
废弃和移除
参数
kube-apiserver:1.24 废弃 --master-count 参数 --endpoint-reconciler-type=master-count 选项,默认使用 apiserver 创建的 lease 对象来同步 apiserver service 的 endpoint; 1.24 移除以下参数:--address, --insecure-bind-address, --port,--insecure-port
1.24 移除 kube-controller-manager 参数:--address,--port,--deployment-controller-sync-period
kube-controller-manager 及 kube-scheduler 的 --port 及 --address 参数,在 1.23 中废弃,不再生效,在 1.24 中移除。
遗留的调度器配置方式及相关参数 policy-config-file, policy-configmap, policy-configmap-namespace 和 use-legacy-policy-config 在 1.23 中被移除,必须使用 KubeSchedulerConfiguration 配置文件。
1.23 移除 kubelet experimental-bootstrap-kubeconfig 参数,使用--bootstrap-kubeconfig 参数代替。
1.23 移除 kubelet --seccomp-profile-root 参数及 seccompProfileRoot 配置项。
1.24 废弃 kubelet --pod-infra-container-image 参数。这个参数指定的 sandbox 镜像,不会被回收。以后镜像回收进程从 CRI 接口获取 sandbox 镜像信息。
API 版本
1.23
rbac.authorization.k8s.io/v1alpha1 及 scheduling.k8s.io/v1alpha1 被移除,分别使用 rbac.authorization.k8s.io/v1 及 scheduling.k8s.io/v1 代替。
v1beta1 版本的调度器配置被移除,请使用 v1beta2 或者 v1beta3 版本的配置文件。
1.24
移除 client.authentication.k8s.io/v1alpha1 ExecCredential,使用 client.authentication.k8s.io/v1 代替。
移除 node.k8s.io/v1alpha1 RuntimeClass,使用 node.k8s.io/v1 代替。
移除 audit.k8s.io/v1alpha1,audit.k8s.io/v1beta1,使用 audit.k8s.io/v1 代替。
废弃 CSIStorageCapacity storage.k8s.io/v1beta1 版本,使用 storage.k8s.io/v1 代替。
其他
1.24 移除 1.11 开始废弃的 Service tolerate-unready-endpoints 标注,使用 Service.spec.publishNotReadyAddresses 代替。
1.24 移除废弃的特性:ValidateProxyRedirects,StreamingProxyRedirects
metadata.clusterName 字段在 1.24 被废弃。这个只读字段内容永远为空,容易带来误解。
Changelogs
1.22 changes since 1.20
重大更新
PodSecurityPolicy 被废弃
PodSecurityPolicy 在1.21被废弃,未来会在1.25中移除。可以评估和迁移到 Pod Security Admission 或者第三方的准入插件。
不可变 Secrets 和 ConfigMaps GA
Secret 或者 ConfigMap 被设置为不可变后(
immutable: true
),kubelet 不再 watch 这些对象的变化并重新挂载到容器内,可以降低 apiserver 的负载。该特性在1.21进入 GA。CronJobs GA
CronJobs 在1.21进入 GA(batch/v1),并且默认启用性能更好的新版本控制器 CronJobControllerV2。
IPv4/IPv6 双栈支持进入 Beta
双栈网络允许 Pod、服务和节点可以获得 IPv4 及 IPv6 地址,在1.21中,双栈网络从 alpha 升级到 beta,并默认启用。
优雅节点关闭
该特性1.21进入 beta 阶段,允许在关闭节点时,通知 kubelet,优雅终止节点上的 Pod。
持久卷健康监控
1.21引入该 alpha 特性,允许对 PV 进行监视,掌握卷的运行状况,在卷变得不健康时进行标记,此时工作负载可以作出反应,避免数据从不健康的卷上写入或读取。
Server-side Apply GA
Server-side Apply 通过声明式配置帮助用户及控制器管理资源,包括以声明方式创建或修改对象等。Server-side Apply 在1.22进入 GA 阶段。
外部凭证 GA
ETCD 更新至3.5.0
1.22默认使用 ETCD 3.5.0版本,该版本改进了安全性、性能、监控以及开发者体验,修复了多个 bug,以及结构化日志记录、内置日志轮转等重要新功能。
MemoryQoS
1.22开始支持 alpha 版本的 MemoryQoS 特性,开启后,将使用 Cgroups v2 API 管理和控制内存分配与隔离,在内存资源发生竞争时,保障工作负载的内存使用,提高工作负载与节点的可用性。该特性由腾讯云提出并贡献给社区。
集群的 seccomp 默认配置
1.22为 kubelet 引入了
SeccompDefault
alpha 特性,结合 --seccomp-default
参数及配置,kubelet 将使用 RuntimeDefault
seccomp 配置,而不是 Unconfined
,从而提高工作负载的安全性。其他更新
GA 的特性:
1.21: EndpointSlice,Sysctls,PodDisruptionBudget
1.22: CSIServiceAccountToken
进入 Beta 的特性:
1.21: TTLAfterFinished
1.22: SuspendJob,PodDeletionCost,NetworkPolicyEndPort
1.22引入了新的调度器打分插件
NodeResourcesFit
,用于代替 NodeResourcesLeastAllocated
, NodeResourcesMostAllocated
,RequestedToCapacityRatio
这三个插件。从1.22起,开启 alpha 特性
APIServerTracing
后,apiserver 支持分布式追踪;支持通过--service-account-issuer
参数设置多个 issuer,在变更 issuer 时,可以提供不间断服务。废弃和移除
移除的参数及功能
1. Service TopologyKeys 被废弃,可以使用 Topology Aware Hints。
2. kube-proxy
从1.21开始,在 ipvs 模式时,不再自动设置
net.ipv4.conf.all.route_localnet=1
。升级的节点会保留 net.ipv4.conf.all.route_localnet=1
,但是新节点继承系统默认值(一般为0)。删除了
--cleanup-ipvs
参数;可以使用 --cleanup
参数。3. kube-controller-manager
从1.22开始,
--horizontal-pod-autoscaler-use-rest-clients
参数被移除。--port
及--address
参数不再起作用,将在 1.24 版本中被移除。4. kube-scheduler:
--hard-pod-affinity-symmetric-weight
及--scheduler-name
参数从1.22开始被移除,可使用 config 文件进行配置。5. kubelet:
DynamicKubeletConfig
特性被废弃,并被默认关闭,启动 kubelet 如配置了--dynamic-config-dir
参数,将收到告警。移除或废弃的版本
1. CronJob batch/v2alpha1 版本从1.21开始被移除
2. 从1.22开始以下类型的 Beta API 被移除:详情请参见 Kubernetes 官网文档。
rbac.authorization.k8s.io/v1beta1
admissionregistration.k8s.io/v1beta1
apiextensions.k8s.io/v1beta1
apiregistration.k8s.io/v1beta1
authentication.k8s.io/v1beta1
authorization.k8s.io/v1beta1
certificates.k8s.io/v1beta1
coordination.k8s.io/v1beta1
extensions/v1beta1 及 networking.k8s.io/v1beta1 ingress API
Changelogs
1.20 changes since 1.18
重大更新
新版 CronJob 控制器
1.20 引入了新版的 CronJob 控制器,使用 informer 机制来代替原来的轮询,优化了性能。可以在
kube-controller-manager
指定 --feature-gates="CronJobControllerV2=true"
来开启。在以后的版本中,会默认使用新版的控制器。弃用 dockershim
Dockershim 已经正式被弃用。kubernetes 对 Docker 的支持已弃用,将在将来的版本中删除。Docker 生成的遵循 OCI 规范的镜像可以继续在兼容 CRI 的运行时中运行。
更多信息可以参考:Don't Panic: Kubernetes and Docker , Dockershim Deprecation FAQ
结构化日志
对日志消息和 k8s 对象引用的结构都进行了标准化,让日志解析,处理,存储,查询和分析变得更加简单。klog 增加了两个方法来支持结构化日志:
InfoS
, ErrorS
。
所有组件增加 --logging-format
参数,默认值是 text
,保持之前的格式。设置为 json
支持结构化日志,此时这些参数不再起作用:--add_dir_header, --alsologtostderr, --log_backtrace_at, --log_dir, --log_file, --log_file_max_size, --logtostderr, --skip_headers, --skip_log_headers, --stderrthreshold, --vmodule, --log-flush-frequency。Exec 探测的超时处理
有关 Exec 探测超时的一个长期存在的 bug 已修复,该 bug 可能会影响现有 Pod 定义。在此修复之前,timeoutSeconds 字段指定的超时并未被遵从,相反,探测器将无限期地运行,甚至超过其配置的截止时间,直到返回结果。在本次更改之后,如果未指定值,则探针仅默认应用 1 秒。如果执行探针耗费的时间超过 1 秒,那么现有的 Pod 定义就可能需要修改,显示指定 timeoutSeconds 字段。本次修复还添加了名为
ExecProbeTimeout
的开关,允许保留之前的行为(在后续发行版中,此功能将被锁定及删除)。要保留之前的行为,需要把 ExecProbeTimeout
设置为 false
。
更多信息,可以参考 Configure Liveness, Readiness and Startup Probes - Configure Probes。卷快照操作功能 GA
此功能提供了一种触发卷快照操作的标准方法,并允许用户以可移植的方式在任何 Kubernetes 环境和支持的存储 provider 上进行合并快照的操作。
此外,这些 Kubernetes 快照原语可以作为基础,解锁为 Kubernetes 开发高级企业级存储管理功能(包括应用程序或集群级备份解决方案)的能力。
请注意,快照支持需要 Kubernetes 集群部署快照控制器、快照 CRD 和验证 Webhook,以及支持快照功能的 CSI 驱动。
kubectl debug 进入 beta 阶段
kubectl alpha debug
命令进入 beta 阶段,并被替换为 kubectl debug
。该功能支持直接从 kubectl 进行常见的调试工作,包括:使用其他容器镜像或命令来创建 Pod 的副本,对启动时崩溃的工作负载进行故障排除。
通过在 Pod 新副本中或临时容器中,添加包含调试工具的新容器的方式,对 distroless 等不包含调试工具的容器进行故障排除。(临时容器
EphemeralContainers
是 Alpha 功能,默认未启用)通过创建在主机命名空间中运行的容器并访问主机的文件系统,就可以在节点上排除故障。
请注意,作为新的内置命令,kubectl debug 优先于任何名为 "debug" 的 kubectl 插件,必须重命名受影响的插件。
kubectl alpha debug
已弃用,并将在随后的版本中删除,需要替换为 kubectl debug
。更多信息,可以参考 Debug Running PodsAPI 优先级和公平性功能(API Priority and Fairness)进入 beta 阶段
1.18 引入的 API Priority and Fairness 功能,将在 1.20 版本默认启用,允许
kube-apiserver
按优先级对传入的请求进行分类。PID 资源限制功能 GA
SupportNodePidsLimit
(节点到 Pod 的 PID 隔离)和 SupportPodPidsLimit
( 限制每个 Pod 的 PID 的能力)都已经到了 GA 阶段。alpha 功能:节点优雅关机
用户和集群管理员都希望 Pod 将遵循预期的 Pod 生命周期,包括 Pod 的终止。但是当节点关机时,Pod 不遵循预期的 Pod 终止生命周期,并且不会正常终止,这可能会导致工作负载的某些问题。1.20 增加了 alpha 的
GracefulNodeShutdown
功能,使得 kubelet 能 监听到节点的系统关机事件,从而在系统关闭期间优雅终止 Pod。CSIVolumeFSGroupPolicy 进入 beta 阶段
CSIDrivers 可以使用
fsGroupPolicy
字段来控制是否支持在 mount 时修改属主和权限。(ReadWriteOnceWithFSType,File,None)ConfigurableFSGroupPolicy 进入 beta 阶段
支持非递归设置 fsgroup -
PodFSGroupChangePolicy
= OnRootMismatch
其他更新
新增 cloud controller manager 组件。
达到 GA 的特性:
RuntimeClass
node.k8s.io/v1beta1
被废弃,请使用 node.k8s.io/v1
。SCTPSupport
Windows containerd 支持
Ingress
废弃
networking.k8s.io/v1beta1
(计划在 1.22 版本移除),由 networking.k8s.io/v1
代替。seccomp
seccomp 相关的注解
seccomp.security.alpha.kubernetes.io/pod
及 container.seccomp.security.alpha.kubernetes.io/...
被废弃(计划在 1.22 版本移除),可以直接在 Pod 及 container spec 中指定如下字段:securityContext:seccompProfile:type: RuntimeDefault|Localhost|Unconfined ## choose one of the threelocalhostProfile: my-profiles/profile-allow.json ## only necessary if type == Localhost
K8s 会自动转换注解和字段,不需要采取额外的操作来进行转换。
限制节点 API 访问权限
Node 认证模式相关的特性全部实现。
重构 Event API
为了缓解 Event 对系统性能的影响,以及增加更多字段以提供更有用的信息,对 Event API 进行了重新设计。这项工作在 1.19 完成。
CertificateSigningRequest API
除了之前的
certificates.k8s.io/v1beta1
,为 CertificateSigningRequest 新增版本 certificates.k8s.io/v1
。在使用 certificates.k8s.io/v1
时,必须指定
spec.signerName
,并且不可再使用 kubernetes.io/legacy-unknown
。必须指定
spec.usages
,不能包含重复值,并且取值只能是已知 usage。必须指定
status.conditions[*].status
。status.certificate
必须是 PEM 编码,并且只包含 CERTIFICATE
块。进入 Beta 的特性:
以下特性进入 Beta 阶段,并默认启用。
EndpointSliceProxying
kube-proxy 从 EndpointSlices 读取信息,而不再是 Endpoints,这可以很大程度上改善大集群的扩展性,并且为以后增加新特性提供了方便(例如拓扑感知路由)
KubeSchedulerConfiguration
HugePageStorageMediumSize
ImmutableEphemeralVolumes
Secret 和 ConfigMap 卷可以标记为 immutable,在有大量 Secret 和 ConfigMap 卷时,可以大大减少对 apiserver 的压力。
NodeDisruptionExclusion
NonPreemptingPriority
ServiceNodeExclusion
ServiceAccountIssuerDiscovery
废弃和移除
废弃版本
废弃版本 | 新版本 |
apiextensions.k8s.io/v1beta1 | apiextensions.k8s.io/v1 |
apiregistration.k8s.io/v1beta1 | apiregistration.k8s.io/v1 |
authentication.k8s.io/v1beta1 | authentication.k8s.io/v1 |
authorization.k8s.io/v1beta1 | authorization.k8s.io/v1 |
autoscaling/v2beta1 | autoscaling/v2beta2 |
coordination.k8s.io/v1beta1 | coordination.k8s.io/v1 |
storage.k8s.io/v1beta1 | storage.k8s.io/v1 |
kube-apiserver
1.
componentstatus
API 被废弃。这个 API 用来提供 etcd, kube-scheduler, 和 kube-controller-manager 的运行状态,但只在这些条件下才能工作:这些组件跟 apiserver 运行在一个节点,并且 kube-scheduler 和 kube-controller-manager 暴露了非安全的健康检查端口。
废弃这个 API 后,etcd 的健康检查被包含在 kube-apiserver 的健康检查中,kube-scheduler/kube-controller-manager 可以检查各自的健康检查接口。2. apiserver 不再监听非安全端口。
--address
及 --insecure-bind-address
参数可以设置但无效果; --port
及 --insecure-port
参数只能设置为 0。这些参数将在 1.24 版本移除。3.
TokenRequest
及 TokenRequestProjection
进入 GA,kube-apiserver 需要设置以下参数:--service-account-issuer
, 标识该集群 API Server 的固定的 URL。--service-account-key-file
, 一个或者多个验证 token 的公钥。--service-account-signing-key-file
, 签发 service account 的私钥,可以与 kube-controller-manager
的 --service-account-private-key-file
参数使用相同的文件。kubelet
1. 以下参数被移除:
--seccomp-profile-root
--cloud-provider
, --cloud-config
,使用 config 来代替。--really-crash-for-testing
, --chaos-chance
2. 已废弃的
metrics/resource/v1alpha1
endpoint 被移除,请使用 metrics/resource
。其他移除
failure-domain.beta.kubernetes.io/zone
及 failure-domain.beta.kubernetes.io/region
标签被废弃,请使用 topology.kubernetes.io/zone
及 topology.kubernetes.io/region
来代替。所有以 failure-domain.beta...
前缀的标签都需要使用对应的 topology...
开头的标签来代替。PodPreset 被移除,可以使用 webhook 来实现该功能。
不再支持 basic auth 鉴权方式。
不再支持在工作负载中直接使用腾讯云硬盘存储 (cbs inline) 挂载。
说明
Changelogs
1.18 changes since 1.16
重大更新
cloud provider 标签功能达到稳定(GA)阶段
废弃标签及新标签如下表所示:
废弃标签 | 新标签 |
beta.kubernetes.io/instance-type | node.kubernetes.io/instance-type |
failure-domain.beta.kubernetes.io/region | topology.kubernetes.io/region |
failure-domain.beta.kubernetes.io/zone | topology.kubernetes.io/zone |
卷快照(Volume Snapshot)功能进入 Beta 阶段
CSI Migration 进入 Beta 阶段
Kubernetes 拓扑管理器迎来 Beta 版
拓扑管理器功能(TopologyManager)在1.18中进入 Beta,可以让 CPU 与其他设备(例如 SR-IOV-VF)实现 NUMA 对齐,使工作负载能够支持低延迟的工作场景。
在引入拓扑管理器之前,CPU 与设备管理器只能彼此独立地做出资源分配决策,可能导致在多插座 CPU 系统中无法获取理想的资源分配结果,影响延迟敏感应用的性能。
Serverside Apply 进入 Beta 2阶段
Server-side Apply 在 Kubernetes 1.16版本被提升到 Beta 版,1.18引入第二个 Beta 版本(ServerSideApply),此版本会记录和管理所有新 Kubernetes 对象字段的变化,确保用户了解资源动态。
IngressClass 资源
IngressClass
资源描述在 Kubernetes 集群内的一种 Ingress 控制器类型。Ingress
资源新增 ingressClassName
字段,用于设置使用 IngressClass
的控制器名称,替代废弃的 kubernetes.io/ingress.class
标注。其他更新
Node Local DNSCache 达到 GA。
IPv6进入 Beta 阶段。
kubectl debug
,Alpha 特性。Windows CSI support
,Alpha 特性。ImmutableEphemeralVolumes
,Alpha 特性(支持不可变 ConfigMap 和 Secret,不刷新对应的 volume)。以下特性达到 GA:
ScheduleDaemonSetPods
TaintNodesByCondition
WatchBookmark
NodeLease
CSINodeInfo
VolumeSubpathEnvExpansion
AttachVolumeLimit
ResourceQuotaScopeSelectors
VolumePVCDataSource
TaintBasedEvictions
BlockVolume
、CSIBlockVolume
Windows RunAsUserName
进入 Beta 的特性:
EndpointSlices
:默认关闭CSIMigrationAWS
:默认关闭StartupProbe
EvenPodsSpread
废弃和移除
移除的特性
以下特性被移除,默认开启且不可配置:
GCERegionalPersistentDisk
EnableAggregatedDiscoveryTimeout
PersistentLocalVolumes
CustomResourceValidation
CustomResourceSubresources
CustomResourceWebhookConversion
CustomResourcePublishOpenAPI
CustomResourceDefaulting
其他移除
移除内置的 cluster role:
system:csi-external-provisioner
system:csi-external-attacher
废弃的特性开关和参数
废弃默认的 service IP CIDR(
10.0.0.0/24
),必须通过 kube-apiserver 的 --service-cluster-ip-range
参数进行设置。废弃 API 组
rbac.authorization.k8s.io/v1alpha1
和 rbac.authorization.k8s.io/v1beta1
,计划在1.20版本中移除。请迁移到 rbac.authorization.k8s.io/v1
。废弃
CSINodeInfo
特性,该特性已经达到 GA 并默认开启。参数及其他变更
kube-apiserver
--encryption-provider-config
:如果配置文件中指定 cacheSize: 0
,则1.18之前的版本会自动设置为缓存1000个 key,1.18版本会报告配置验证错误。可通过设置 cacheSize 为负值来关闭缓存。--feature-gates
:以下特性默认开启,并不再支持通过命令行设置。PodPriority
TaintNodesByCondition
ResourceQuotaScopeSelectors
ScheduleDaemonSetPods
不再支持以下资源版本(group version):
apps/v1beta1
及 apps/v1beta2
,请使用 apps/v1
。其中,
extensions/v1beta1
下的:daemonsets
、deployments
及 replicasets
,请使用 apps/v1
。networkpolicies
请使用 networking.k8s.io/v1
。podsecuritypolicies
请使用 policy/v1beta1
。kubelet
--enable-cadvisor-endpoints
:这个参数默认关闭。如果需要访问 cAdvisor v1 Json API,需要明确开启。废弃参数
--redirect-container-streaming
,并将在后续版本中移除。1.18只支持默认行为(通过 kubelet 代理 streaming 请求)。如果设置了 --redirect-container-streaming=true
则必须移除。废弃 metrics endpoint
/metrics/resource/v1alpha1
,请使用 /metrics/resource
。kube-proxy
废弃以下参数:
废弃
--healthz-port
,请使用 --healthz-bind-address
。废弃
--metrics-port
,请使用 --metrics-bind-address
。增加特性开关
EndpointSliceProxying
(默认关闭)来控制是否在 kube-proxy 中启用 EndpointSlices。特性开关 EndpointSlice
不再影响 kube-proxy 的行为。增加以下参数配置 ipvs 连接的超时:
--ipvs-tcp-timeout
--ipvs-tcpfin-timeout
--ipvs-udp-timeout
iptables 模式增加 IPv4/IPv6双协议栈支持。
kube-scheduler
废弃
scheduling_duration_seconds
指标:废弃
scheduling_algorithm_predicate_evaluation_seconds
,替代为 framework_extension_point_duration_seconds[extension_point="Filter"]
废弃
scheduling_algorithm_priority_evaluation_seconds
,替代为 framework_extension_point_duration_seconds[extension_point="Score"]
在调度器 Policy API 中废弃
AlwaysCheckAllPredicates
。-enable-profiling 参数
为了对齐
kube-apiserver
、kube-controller-manager
和 kube-scheduler
,默认开启 profiling。如需关闭 profiling,需指定参数 --enable-profiling=false
。kubectl
移除已废弃的
--include-uninitialized
参数。kubectl
和 k8s.io/client-go
不再默认使用 http://localhost:8080 作为 apiserver 的地址。kubectl run
支持创建 Pod,不再支持使用之前已废弃的 generator 创建其他类型的资源。移除已废弃的
kubectl rolling-update
命令,请使用 rollout
命令。–dry-run
支持3个参数值 client
、server
和 none
。–dry-run=server
支持命令:apply
、patch
、create
、run
、annotate
、label
、set
、autoscale
、 drain
、rollout undo
和 expose
。新的
kubectl alpha debug
命令,可以 在 Pod 中附临时的容器进行调试和排查问题(需要启用1.16引入的 EphemeralContainers
特性)。hyperkube
Hyperkube 从 Go 代码修改为 bash 脚本。
Changelogs
1.16 changes since 1.14
重大更新
集群稳定性和可用性改进
裸金属集群工具及 HA 等生产可用的特性都得到了改进和加强。
kubeadm 对 HA 的支持进入 beta 阶段,用户可以使用
kubeadm init
和 kubeadm join
命令部署高可用的控制面。证书管理更加稳定和健壮,kubeadm 可以在 update 集群时,在证书到期前无缝更新所有的证书。详情请参阅 pr357 和 pr970。CSI 持续改进
存储 SIG 继续致力于内建存储插件迁移到 CSI 接口,支持内建存储插件的大小调整,内联存储卷等特性,还引入了一些原本 Kuebernetes 存储子系统中不存在的 alpha 功能,例如存储卷克隆。
存储卷克隆允许用户在配置新存储卷时,指定另一 PVC 为 “DataSource”。如果底层存储系统支持此项功能并在其 CSI 驱动程序实现了 “CLONE_VOLUME” 功能,则新存储卷将成为源存储卷的克隆。详情请参见 pr625。
特性
达到 GA 的特性:
CRD
Admission Webhook
GCERegionalPersistentDisk
CustomResourcePublishOpenAPI
CustomResourceSubresources
CustomResourceValidation
CustomResourceWebhookConversion
CSI 规范中支持调整卷大小的功能进入 Beta。
一般更新
Kubernetes 核心代码支持 Go 模块。
继续为 cloud-provider 代码提取和组织进行准备。cloud-provider 代码已经被移动至 kubernetes/legacy-cloud-providers,以便后续删除与外部使用。
发布新的 alpha 版调度框架,用于开发和管理插件,扩展调度器功能。详情请参见 pr624。
继续弃用 extensions/v1beta1、apps/v1beta1以及 apps/v1beta2的API,这些扩展将在1.16版本中被彻底淘汰。
Kubelet 增加 Topology Manager 组件,旨在协调资源分配决策,优化资源分配。
支持 IPv4/IPv6双栈,可同时给 Pod 与服务分配 v4和 v6的地址。
alpha 特性 API Server 网络代理。
面向云控制器管理器迁移提供更多扩展选项。
弃用 extensions/v1beta1、apps/v1beta1以及 apps/v1beta2 API。
已知问题
更新须知
集群
以下标签不再在节点上设置:
beta.kubernetes.io/metadata-proxy-ready
、 beta.kubernetes.io/metadata-proxy-ready
及 beta.kubernetes.io/kube-proxy-ds-ready
。ip-mask-agent
使用 node.kubernetes.io/masq-agent-ds-ready
作为 node 选择器,不再使用 beta.kubernetes.io/masq-agent-ds-ready
。kube-proxy
使用 node.kubernetes.io/kube-proxy-ds-ready
作为 node 选择器,不再使用 beta.kubernetes.io/kube-proxy-ds-ready
。 metadata-proxy
使用 cloud.google.com/metadata-proxy-ready
作为 node 选择器,不再使用 beta.kubernetes.io/metadata-proxy-ready
。API Machinery
k8s.io/kubernetes 和其他发布的组件,包括 k8s.io/client-go 和 k8s.io/api 等,现在包含 Go 模块文件,包括依赖库的版本信息。在以 Go 模块方式使用 k8s.io/client-go 时可以参考 go-modules 以及 pr74877。
Appshyperkube 短别名已从代码中移除,在编译 hyperkube docker 镜像时会创建这些别名,详情请参见 pr76953。
Lifecycle
废弃的 kubeadm
v1alpha3
配置被全部移除。kube-up.sh 不再支持 centos 和 local。
Storage
CSI 卷不再设置
Node.Status.Volumes.Attached.DevicePath
字段,需要更新此字段的外部控制器。alpha 版本的 CRD 被移除。
默认启用
StorageObjectInUseProtection
admission 插件。如果之前没有启用该插件,集群的行为可能会发生变化。CSI driver 启用 PodInfoOnMount 后,在 volume 上下文会增加一个新的参数:
csi.storage.k8s.io/ephemeral
,允许 driver 在实现 NodePublishVolume 时,逐个判断当前 volume 是短暂存储还是持久的,详情请参见 pr79983。VolumePVCDataSource(存储卷克隆功能) 进入 beta,详情请参见 pr81792。
把内建以及 CSI volume 的 limit 合为一个调度器 predicate,详情请参见 pr77595。
kube-apiserver
废弃参数
--enable-logs-handler
,计划在 v1.19移除。废弃
--basic-auth-file
及相应的认证模式,未来计划移除。废弃默认的 service IP CIDR(10.0.0.0/24),计划半年后或者2个 release 后移除。必须使用
--service-cluster-ip-range
参数来制定 service 的 IP 段。kube-scheduler
使用
v1beta1
Events API。消费 scheduler 事件的工具需要使用 v1beta1 Event API。kube-proxy
移除参数
--conntrack-max
(可使用--conntrack-min
和--conntrack-max-per-core
来代替)。移除参数
--cleanup-iptables
。移除
--resource-container
。kubelet
移除参数
--allow-privileged
、--host-ipc-sources
、--host-pid-sources
和 --host-network-sources
(可以使用 PodSecurityPolicy
的准入控制器来代替)。废弃 cAdvisor JSON 接口。
移除
--containerized
。不再支持通过
--node-labels
参数设置 kubernetes.io-
或 k8s.io-
为前缀的不被允许的标签 。kubectl
移除
kubectl scale job
。移除
kubectl exec
命令的 --pod/-p
参数。移除
kubectl convert
命令。移除
--include-uninitialized
。kubectl cp
不再支持复制容器中的符号链接,可以使用如下命令代替:local to pod
:tar cf - /tmp/foo | kubectl exec -i -n <some-namespace> <some-pod> -- tar xf - -C /tmp/bar
pod to local
:kubectl exec -n <some-namespace> <some-pod> -- tar cf - /tmp/foo | tar xf - -C /tmp/bar
kubeadm
废弃命令
kubeadm upgrade node config
和 kubeadm upgrade node experimental-control-plane
,使用 kubeadm upgrade node
代替。废弃参数
--experimental-control-plane
,使用 --control-plane
代替。废弃参数
--experimental-upload-certs
,使用 --upload-certs
代替。废弃命令
kubeadm config upload
,使用 kubeadm init phase upload-config
代替。CoreDNS 使用 ready 插件进行就绪检查。
废弃
proxy
插件,使用 forward
插件来代替。kubernetes
插件移除 resyncperiod
选项。废弃
upstream
选项,如果指定,将被忽略。Changelogs
1.14 changes since 1.12
重大更新
使用 kubeadm 简化集群管理。
一般更新
dry-run 进入 beta(dry-run 使用户可以模拟真实 API 请求,而不实际改变集群状态)。
kubectl diff 进入 beta。
kubectl 插件注册进入 stable。
kubelet 插件机制进入 beta。
CSIPersistentVolume 进入 GA。
TaintBasedEviction 进入 beta。
kube-scheduler 可感知 volume topology,进入 stable。
支持 out-of-tree CSI Volume plugins,进入 stable。
支持第三方设备监控插件。
kube-scheduler subnet feasibility 进入 beta。
Pod Ready 支持自定义探测条件。
Node 内存支持 HugePage。
RuntimeClass 进入 beta。
Node OS/Arch labels 进入 GA。
node-leases 进入 beta。
kubelet resource metrics endpoint 进入 alpha,支持通过 prometheus 采集数据。
runAsGroup 进入 beta。
kubectl apply server-side 进入 alpha,可在服务端执行 apply 操作。
kubectl 支持 kustomize。
支持在 Pod 中配置 resolv.conf。
CSI volumes 支持 resizing。
CSI 支持 topology。
volume mount 支持设定子路径参数。
CSI 支持裸块设备。
CSI 支持本地 ephemeral volume。
更新须知
kube-apiserver
不再支持
etcd2
,默认 --storage-backend=etcd3
。废弃参数
--etcd-quorum-read
。废弃参数
--storage-versions
。废弃参数
--repair-malformed-updates
。kube-controller-manager
废弃参数
--insecure-experimental-approve-all-kubelet-csrs-for-group
。kubelet
废弃参数
--google-json-key
。废弃参数
--experimental-fail-swap-on
。kube-scheduler
不再支持
componentconfig/v1alpha1
。kubectl
不再支持命令
run-container
。 taints
不再支持
node.alpha.kubernetes.io/notReady
和 node.alpha.kubernetes.io/unreachable
,改为 node.kubernetes.io/not-ready
和 node.kubernetes.io/unreachable
。Changelogs
1.12 changes since 1.10
重大更新
API
CustomResources 子资源现在进入 beta 阶段,并默认开启,可以对
/status
子资源更新除了 .status
字段(之前只允许对 .spec 和 .metadata 进行更新)。在启用 /status
子资源时,required
和 description
可用于 CRD OpenAPI 验证 schema。另外,用户可以创建多个版本的 CustomResourceDefinitions,不需进行自动转换。可以通过 CustomResourceDefinitions 的 spec.additionalPrinterColumns
字段让 kubectl get
的输出包含额外的列。支持
dry run
功能,允许用户可以看到某些命令的执行结果,而不需要真正提交相关的更改。认证授权
RBAC 聚合 ClusterRoles 进入 GA 阶段,client-go credentials 插件进入 Beta 阶段,支持从外部插件获取 TLS 认证信息。
审计事件增加了如下注解,用户可以更清晰的了解审计决策的过程:
Authorization 组件会设置
authorization.k8s.io/decision
(authorization 决定 allow 或 forbid),及 authorization.k8s.io/reason
(做出这个决定的原因)。PodSecurityPolicy 准入控制器会设置
podsecuritypolicy.admission.k8s.io/admit-policy
和 podsecuritypolicy.admission.k8s.io/validate-policy
,包含允许 Pod 准入相关的策略名称(PodSecurityPolicy 同时可以限制 hostPath 类型的挂载点为只读模式)。NodeRestriction 准入控制器会禁止节点修改其对应的 Node 对象的污点信息,让用户更容易控制和追踪节点的污点设置情况。
CLI 命令行
CLI 实现了新的插件机制,并提供了包含通用 CLI 工具的开发库方便插件开发者进行插件开发。
网络
ipvs 模式进入 GA。
CoreDNS 进入 GA,代替 kube-dns。
节点
DynamicKubeletConfig 进入 Beta 阶段。
cri-tools GA。
PodShareProcessNamespace 进入 Beta 阶段。
新增 Alpha 特性:RuntimeClass,CustomCFSQuotaPeriod。
调度器
Pod Priority 及 Preemption 进入 Beta 阶段。
DaemonSet Pod 的调度不再由 DaemonSet 控制器管理,而由默认调度器管理。
TaintNodeByCondition 进入 Beta 阶段。
默认开启本地镜像优选功能。在调度 Pod 时,本地已经拉取全部或者部分 Pod 所需镜像的节点会有更高的优先级,这样可以加速 Pod 启动。
一般更新
进入 GA 的特性:ClusterRole,StorageObjectInUseProtection。
进入 Beta 的特性:外部 Cloud Provider。
更新须知
kube-apiserver
--storage-version
参数被移除,由 --storage-versions
代替。同时 --storage-versions
也被废弃。--endpoint-reconciler-type
默认值改为 lease
。使用
--enable-admission-plugins
时,默认包含。使用 --admission-control
参数时,需要显示指定。kubelet
废弃
--rotate-certificates
参数,由配置文件的 .RotateCertificates 字段代替。kubectl
除
run-pod/v1
外,其他 kubectl run
的 generator 已废弃。kubectl logs
移除 --interactive
参数。--use-openapi-print-columns
已废弃,由 --server-print
代替。