太平洋时间 2022 年 12 月 8 号 Kubernetes 正式发布了主题为 `Electrifying` 的 v1.26。
此版本带来了 37 项增强功能,与 Kubernetes 1.25 中的 40 项 和 Kubernetes 1.24 中的 46 项相当。在这 37 项增强功能中,11 项正在升级为稳定版,10 项是不断改进的现有功能,16 项是全新的,1 项是已弃用的功能。
此版本中有两个突出的新功能,它们有可能改变用户与 Kubernetes 交互的方式:能够使用来自其他命名空间的快照来配置卷。
还有一些针对高性能工作负载的新功能,例如科学研究或机器学习:更好地运行您的工作负载的物理 CPU 内核。
此外,其他功能将使集群管理员的工作更轻松,例如对 OpenAPIv3 的支持。
现在让我们开始了解 Kubernetes 1.26 中的新功能。
Kubernetes 1.26 推荐功能
这些是在此版本中最令人兴奋的功能 (ymmv):
从跨命名空间快照配置卷
VolumeSnapshot 功能允许 Kubernetes
用户从卷快照中配置卷,为用户和应用程序带来巨大好处,例如使数据库管理员能够在任何关键操作之前对数据库进行快照,或者能够开发和实施备份解决方案。
从 Kubernetes 1.26 开始,作为 Alpha 功能,用户将能够跨命名空间从VolumeSnapshot
创建PersistentVolumeClaim
,打破了将两个对象放在同一命名空间的初始限制。
此增强功能旨在消除阻止用户和应用程序执行基本任务的限制,例如当应用程序和服务位于不同命名空间时保存数据库检查点。
CEL 用于准入控制
来自 Kubernetes 1.25 的验证表达式语言的实际实现!
通过将准入控制器的规则定义为 Kubernetes 对象,我们可以开始忘记管理 webhook,从而简化集群的设置。不仅如此,现在实施 Kubernetes 安全性也更容易一些。
这些用户友好的改进是保持 Kubernetes 采用率增长的关键。
Kubernetes 组件运行状况 SLI
从 Kubernetes 1.26 开始,您可以为 Kubernetes 组件二进制文件配置服务级别指标 (SLI) 指标。启用它们后,Kubernetes 将在/metrics/slis
端点中公开 SLI 指标。因此您将不需要 Prometheus exporter。这可以将 Kubernetes 监控提升到另一个级别,从而更容易创建健康仪表板和配置 PromQL 警报以确保集群的稳定性。
cAdvisor-less, CRI-full 容器和 Pod 统计
目前,要从容器收集指标,例如消耗的 CPU 或内存,Kubernetes 依赖于 cAdvisor。此功能提供了一种替代方案,丰富了 CRI API 以提供来自容器的所有指标,从而提供更大的灵活性和更高的准确性。毕竟,最了解容器行为的是容器运行时。
此功能代表着在从 Kubernetes 代码中删除 cAdvisor 的路线图上又迈出了一步。然而,在此过渡期间,cAdvisor 将被修改为不生成添加到 CRI API 的指标,避免具有可能不同和不连贯值的重复指标。
动态资源分配
这个 Kubernetes 版本引入了一个新的 Alpha 功能,它将为高级硬件提供扩展的资源管理。它带有一个用户友好的 API 来描述资源请求。随着处理不同硬件组件(如 GPU 或 FPGA)的需求不断增加,以及设置初始化和清理的需要,这一新功能将加速 Kubernetes 在科学研究或边缘计算等领域的采用。
改进了拓扑管理器中的多 numa 对齐
这是另一个针对高性能工作负载的功能,例如那些涉及科学计算的功能。我们看到自 Kubernetes 1.22 和 1.23 以来新的 CPU 管理器正在形成,使开发人员能够将他们的工作负载保持在靠近数据存储在内存中的位置,从而提高性能。Kubernetes 1.26 更进了一步,为进一步定制此功能打开了大门。毕竟,并非所有工作负载和 CPU 架构都是相同的。
事实上,Kubernetes 上的 HPC 的未来看起来很有希望。
允许 StatefulSet 控制开始副本序号
Kubernetes 中的 StatefulSets 通常是关键的后端服务,例如集群数据库或消息队列。
这种增强,看似微不足道的编号变化,允许更大的灵活性,并支持滚动跨命名空间甚至 StatefulSet
副本的跨集群迁移的新技术,而无需任何停机时间。
虽然这个过程可能看起来有点笨重,涉及到对 PodDisruptionBudgets 的仔细定义和相对于迁移副本的资源移动,但我们可以肯定有想象和实施空间(或现有的 operators 增强)可以自动化这些操作以实现无缝迁移,与目前可行的冷迁移策略(关机-备份-恢复)形成鲜明对比。
获取自我用户属性的 Auth API
alpha 版的这项新功能将简化集群管理员的工作,尤其是当他们管理多个集群时。它还将协助复杂的身份验证流程,因为它允许用户在集群内查询他们的用户信息或权限。
此外,这还包括是否使用代理( Kubernetes API server
在应用了所有身份验证机制后填写 userInfo
)或模拟(您将获得被模拟用户的详细信息和属性) ,因此您将以一种非常简单的方式获得用户信息。
聚合发现 Aggregated Discovery
这对于用户来说是一个很小的改变,但是在清洁 Kubernetes 内部结构和提高其性能方面又向前迈进了一步。通过聚合 API 调用(或者至少在发现部分)来减少 API 调用的数量是解决日益严重的问题的一个很好的办法。希望这将为集群管理员提供一个小小的突破。
弃用
Kubernetes 1.26 中删除了一些 beta API 和功能,包括:
不再提供的弃用 API 版本[1],您应该使用更新的版本:
- CRI
v1alpha2
已经弃用,使用v1
(不支持 containerd 1.5 及更早版本)。 flowcontrol.apiserver.k8s.io/v1beta1
已经弃用,使用v1beta2
。autoscaling/v2beta2
已经弃用,使用v2
。
已弃用。在下一个版本发布之前请实施替代方案:
- 树内 GlusterFS 驱动程序。
kubectl --prune-whitelist
,用--prune-allowlist
代替。kube-apiserver --master-service-namespace
.- 若干个未使用的选项
kubectl run
:--cascade
,--filename
,--force
,--grace-period
,--kustomize
,--recursive
,--timeout
,--wait
。 - CLI flag
pod-eviction-timeout
。 apiserver_request_slo_duration_seconds
指标,使用apiserver_request_sli_duration_seconds
代替.
已删除。在升级之前请实施替代方案:
- Azure 和 Google Cloud 的旧版身份验证已弃用。
userspace
proxy 模式。- 动态 kubelet 配置。
- 若干个与日志相关的命令行参数。
- in-tree OpenStack(
cinder
卷类型),使用CSI 驱动程序[2]代替。
其他更改: 应该调整配置
- Pod 安全准入:pod-security
warn
level 现在将默认为enforce
level。 - kubelet:启用 cpuCFSQuotaperiod 标志的默认 cpuCFSQuotaperiod 值现在是 100μs,而不是 100ms。
- kubelet:
--container-runtime-endpoint
标志不能再为空。 - kube-apiserver:gzip 压缩从级别 4 切换到级别 1。
- 指标:
preemption_victims
从LinearBuckets
更改为ExponentialBuckets
。 - 指标:
etcd_db_total_size_in_bytes
重命名为apiserver_storage_db_total_size_in_bytes
. - 指标:
kubelet_kubelet_credential_provider_plugin_duration
已更名为kubelet_credential_provider_plugin_duration
. - 指标:
kubelet_kubelet_credential_provider_plugin_errors
已更名为kubelet_credential_provider_plugin_errors
. - 从各种容器映像中删除了 Windows Server 版本 20H2 风格。
- e2e.test 二进制文件不再发出 JSON 结构来记录进度。
您可以在Kubernetes 1.26 发行说明[3]中查看完整的更改列表。此外,我们推荐Kubernetes Removals and Deprecations In 1.26[4]文章,并保留已弃用的 API 迁移指南[5]以备将来使用。
#281[6]动态 Kubelet 配置
功能组:节点
自 Kubernetes 1.11 以来处于测试阶段后,Kubernetes 团队决定[7]弃用DynamicKubeletConfig
而不是继续开发。
此功能在 1.21 中被标记为弃用,然后在 1.24 中从 Kubelet 中删除。现在在 1.26 中,它已经完全从 Kubernetes[8]中移除。
Kubernetes 1.26 API
#3352[9]聚合发现
阶段: Net new to Alpha
特性组: api-machinery
特性门: AggregatedDiscoveryEndpoint
默认值: false
每个 Kubernetes 客户端(例如:kubectl
)需要发现 kubernetes-apiserver
,为此,他们需要针对每个 API 和版本发出请求,这会导致请求风暴。
此增强功能旨在将所有这些调用减少到两个。
客户端可以将as=APIGroupDiscoveryList
包含到其请求的Accept
字段中,以请求/api
和/apis
端点。然后,服务器将返回一个包含所有可用 API 及其版本的聚合文档 (APIGroupDiscoveryList
)。
#3488[10] CEL 用于准入控制
阶段: Net new to Alpha
功能组: api-machinery
特征门: ValidatingAdmissionPolicy
默认值: false
从 Kubernetes 1.25 引入的 CRD 验证表达式语言,此增强功能提供了一种新的准入控制器类型 ( ValidatingAdmissionPolicy
),允许在不依赖 webhook 的情况下实现一些验证。
这些新政策可以定义如下:
代码语言:javascript复制 apiVersion: admissionregistration.k8s.io/v1alpha1
kind: ValidatingAdmissionPolicy
metadata:
name: "demo-policy.example.com"
Spec:
failurePolicy: Fail
matchConstraints:
resourceRules:
- apiGroups: ["apps"]
apiVersions: ["v1"]
operations: ["CREATE", "UPDATE"]
resources: ["deployments"]
validations:
- expression: "object.spec.replicas <= 5"
此策略将拒绝具有5
或更少副本的 deployments 请求。
在文档中[11]发现此功能的全部功能。
#1965[12] kube-apiserver 身份
阶段: Graduating to Beta
特性组: api-machinery
特性门: APIServerIdentity
默认值: true
为了更好地控制哪些 kube-apiservers 在高可用性集群中处于活动状态,已经实施了新的租用/心跳系统。
Kubernetes 1.26 中的应用程序
#3017[13] PodDisruptionBudget 的 PodHealthyPolicy
阶段: Net new to Alpha
功能组: apps
功能门: PDBUnhealthyPodEvictionPolicy
默认值: false
PodDisruptionBudget 允许您与集群管理员沟通一些最低要求,以简化[14]维护任务,例如“不要销毁其中一个以上”或“至少让其中两个保持活动状态”。
但是,这仅考虑 pod 是否正在运行,而不考虑它们是否健康。您的 pod 可能正在运行但未就绪,并且 PodDisruptionBudget 可能会阻止其被驱逐。
此增强功能使用 status.currentHealthy``status.desiredHealthy
和spec.unhealthyPodEvictionPolicy
字段扩展了这些预算定义,以帮助您定义如何管理不健康的 pod。
$ kubectl get poddisruptionbudgets example-pod
apiVersion: policy/v1
kind: PodDisruptionBudget
[...]
status:
currentHealthy: 3
desiredHealthy: 2
disruptionsAllowed: 1
expectedPods: 3
observedGeneration: 1
unhealthyPodEvictionPolicy: IfHealthyBudget
#3335[15]允许 StatefulSet 控制开始副本序号
阶段: Net new to Alpha
功能组: apps
功能门: StatefulSetStartOrdinal
默认值: false
Kubernetes 中的 StatefulSets 目前使用序号为它们的 pod 编号,第一个副本是0
,最后一个是spec.replicas
。
此增强功能向 StatefulSet 清单规范添加了一个具有单个字段的新结构 spec.ordinals.start
,它允许定义由 StatefulSet 控制的副本的起始编号。
这很有用,例如,在 StatefulSet 的跨命名空间或跨集群迁移中,巧妙地使用 PodDistruptionBudgets(和多集群服务)可以允许副本的受控滚动迁移,避免任何停机时间。
#3329[16] Jobs 的可重试和不可重试 Pod 失败
阶段: Graduating to Beta
功能组: apps
功能门: JobPodFailurePolicy
, 默认值: true
功能门: :PodDisruptionsCondition
,默认值: true
此增强功能允许我们在Jobs[17]的规范上配置.spec.podFailurePolicy
,确定在失败的情况下是否应重试 Job 的规范。这样,Kubernetes 可以提前终止作业,避免在基础设施故障或应用程序错误的情况下增加退避时间。
#2307[18] 无需遗留 Pod 来跟踪 Job
阶段: Graduating to Stable
功能组: apps
功能门: JobTrackingWithFinalizers
默认值: true
通过此增强功能,Jobs 将能够更早地删除已完成的 pod,从而释放集群中的资源。
Kubernetes 1.26 授权
#3325[19] 获取用户属性的 Auth API
阶段: Net new to Alpha
特性组: auth
特性门: APISelfSubjectAttributesReview
默认值: false
当在 Kubernetes 集群中使用复杂的身份验证流,并且在应用了所有身份验证机制之后希望了解所有 userInfo 时,这个新特性非常有用。
执行kubectl alpha auth whoami
将产生以下输出:
apiVersion: authentication.k8s.io/v1alpha1
kind: SelfSubjectReview
status:
userInfo:
username: jane.doe
uid: b79dbf30-0c6a-11ed-861d-0242ac120002
groups:
- students
- teachers
- system:authenticated
extra:
skills:
- reading
- learning
subjects:
- math
- sports
总之,一旦在集群中进行了身份验证,我们现在可以执行典型的 /me
操作来了解自己的权限。
#2799[20] 减少基于秘密的服务帐户令牌
阶段: Graduating to Beta
特性组: auth
特性门: LegacyServiceAccountTokenNoAutoGeneration
默认值: true
API 凭据现在通过TokenRequest API[21]获得,自 Kubernetes 1.22 以来稳定,并使用projected
卷安装到 Pod 中。当它们关联的 Pod 被删除时,它们将自动失效。
Kubernetes 1.26 中的网络
#3453[22]最小化 iptables-restore 输入大小
阶段: Net new to Alpha
特性组:网络
特性门: MinimizeIPTablesRestore
默认值: false
此增强功能旨在提高kube-proxy
. 它将通过仅发送调用时已更改的规则iptables-restore
而不是整套规则来实现。
#1669[23] 代理终止端点
阶段: Graduating to Beta
特性组: network
特性门: ProxyTerminatingEndpoints
默认值: true
此增强功能通过将所有外部流量发送到就绪和未就绪的终止端点(首选就绪端点)来防止滚动更新期间的流量丢弃。
#2595[24]扩展的 DNS 配置
阶段: Graduating to Beta
特性组: network
特性门: ExpandedDNSConfig
默认值: true
通过此增强功能,Kubernetes 允许在搜索路径中使用最多 32 个 DNS,并增加搜索路径的字符数(最多 2048 个),以跟上最新的 DNS 解析器。
#1435 在[25] type=LoadBalancer 的服务中支持混合协议
阶段: Graduating to Stable
特性组: network
特性门: MixedProtocolLBService
默认值: true
此增强功能允许 LoadBalancer 服务在同一端口为不同协议(UDP、TCP)提供服务。例如,在同一端口上为 DNS 或 SIP 服务器提供 UDP 和 TCP 请求。
#2086[26]服务内部流量策略
阶段: Graduating to Stable
特性组: network
特性门: ServiceInternalTrafficPolicy
默认值: true
您现在在Service
对象上设置spec.trafficPolicy
字段以优化集群流量:
- 使用
Cluster
,路由将照常运行。 - 当设置为
Topology
时,它将使用拓扑感知路由[27]。 - 使用
PreferLocal
,它将流量重定向到同一节点上的服务。 - 使用
Local
,它只会将流量发送到同一节点上的服务。
#3070[28]为动态和静态 IP 分配保留服务 IP 范围
阶段: Graduating to Stable
特性组: network
特性门: ServiceIPStaticSubrange
默认值: true
此--service-cluster-ip-range
标志更新将降低使用静态和动态 IP 分配的服务之间发生 IP 冲突的风险,同时保持向后兼容性。
Kubernetes 1.26 节点
#2371[29] cAdvisor-less, CRI-full 和 Pod 统计
阶段: Alpha
功能组的重大变化:节点
功能门: PodAndContainerStatsFromCRI
Default value: false
此增强功能总结了从容器运行时接口 (CRI)[30]检索有关正在运行的容器和 pod 的所有统计信息的工作,从 cAdvisor 中删除了依赖项。
从 1.26 开始,指标/metrics/cadvisor
由 CRI 而不是 cAdvisor 收集。
#3063[31]动态资源分配
阶段: Net new to Alpha
特性组: node
特性门: DynamicResourceAllocation
默认值: false
传统上,Kubernetes 调度程序只能考虑 CPU 和内存限制和请求。后来,调度程序得到扩展,也考虑了存储和其他资源。然而,这在许多情况下是有限制的。
例如,如果设备需要初始化和清理,就像 FPGA 一样;或者,如果您想限制对资源(如共享 GPU)的访问怎么办?
这个新的 API 涵盖了那些资源分配和动态检测的场景,使用了新的ResourceClaimTemplate
和ResourceClass
对象,以及 Pods 内部的resourceClaims
新变量。
apiVersion: v1
kind: Pod
# [...]
spec:
resourceClaims:
- name: resource0
source:
resourceClaimTemplateName: resource-claim-template
- name: resource1
source:
resourceClaimTemplateName: resource-claim-template
# [...]
调度器可以跟踪这些资源声明,并且只在那些具有足够可用资源的节点中调度 Pod。
#3386[32] Kubelet evented PLEG 以获得更好的性能
阶段: Net new to Alpha
特性组: node
特性门: EventedPLEG
默认值: false
此增强功能的目的是减少kubelet
跟踪所有 pod 状态时的 CPU 使用率。
它将部分减少kubelet
执行的定期轮询,而不是尽可能依赖来自容器运行时接口 (CRI) 的通知。
如果你对实现细节感兴趣,你可能想看看 KEP[33]。
#3545[34]改进了拓扑管理器中的多 NUMA 对齐
阶段: Net new to Alpha
功能组:节点
功能门: TopologyManagerPolicyOptions
默认值: false
功能门: TopologyManagerPolicyBetaOptions
,默认值:false
功能门: TopologyManagerPolicyAlphaOptions
,默认值: false
这是TopologyManager的一项改进,可以更好地处理非统一内存访问 ( NUMA[35] ) 节点。对于某些高性能工作负载,控制它们在哪些物理 CPU 内核中运行非常重要。如果避免同一芯片的高速缓存之间或套接字之间的内存跳转,则可以显着提高性能。
kubelet
的一个新标志topology-manager-policy-options
将允许您传递选项并修改拓扑管理器的行为。
目前,只有一个 alpha 选项可用:
- 传递时
prefer-closest-numa-nodes=true
,拓扑管理器将在单个 NUMA 节点或尽可能少的 NUMA 节点上对齐资源。
由于将来可能会添加新选项,因此添加了几个功能门控,因此您可以选择只关注稳定的功能门:
TopologyManagerPolicyOptions
: 将启用topology-manager-policy-options
标志和稳定选项。TopologyManagerPolicyBetaOptions
: 还将启用 beta 选项。TopologyManagerPolicyAlphaOptions
: 还将启用 alpha 选项。
#2133[36] Kubelet 凭证提供程序
阶段: Graduating to Stable
特性组: node
特性门: KubeletCredentialProviders
默认值: true
此增强功能用外部和可插入的新机制取代了树内容器镜像注册表凭证提供程序。
#3570[37]CPUManager 毕业到 GA
阶段: Graduating to Stable
特性组: node
特性门: CPUManager
默认值: true
CPUManager 是负责将 pod 容器分配给本地节点上的 CPU 集的 Kubelet 组件。
它在 Kubernetes 1.8 中引入,并在 1.10 版本中升级为 beta 版。对于 1.26,核心 CPUManager 被认为是稳定的,同时实验继续对其策略进行额外的工作。
#3573[38]DeviceManager 毕业到 GA
阶段: Graduating to Stable
特性组: node
特性门: DevicePlugins
默认值: true
Kubelet 中的 DeviceManager 是管理与不同设备插件交互的组件。
Device Plugin 框架最初在 Kubernetes 1.8 中引入,并在 1.10 版中进入 beta 阶段,得到广泛采用,最终在 1.26 中进入 GA。
该框架允许在不修改核心 Kubernetes 组件的情况下使用外部设备。例如, NVIDIA GPU[39]、AMD GPUS[40]、SR-IOV NIC [41]
Kubernetes 1.26 中的调度
#3521[42] Pod 调度就绪
阶段: Net new to Alpha
功能组: scheduling
特性门: PodSchedulingReadiness
默认值: false
此增强旨在通过让 Pod 定义它们何时准备好实际调度来优化调度。
并非所有待处理的 Pod[43]都已准备好进行调度。有些会在某种miss-essential-resources
状态下停留一段时间,这会导致调度程序进行额外的工作。
Pod 的新字段.spec.schedulingGates
允许识别它们何时准备好进行调度:
apiVersion: v1
kind: Pod
[...]
spec:
schedulingGates:
- name: foo
- name: bar
[...]
当存在任何调度门时,Pod 将不会被调度。
您可以使用以下方式检查状态:
代码语言:javascript复制$ kubectl get pod test-pod
NAME READY STATUS RESTARTS AGE
test-pod 0/1 SchedulingGated 0 7s
#3094 在计算[44]计算 PodTopologySpread 偏斜时考虑污点/容忍度
阶段: Graduating to Beta
Feature group: scheduling
Feature gate: NodeInclusionPolicyInPodTopologySpread
默认值: true
topologySpreadConstraints
字段以及maxSkew
允许您跨节点分散工作负载。一个新的NodeInclusionPolicies
字段允许在计算此 pod 拓扑分布偏差时考虑NodeAffinity
和NodeTaint
。
Kubernetes 1.26 存储
#3294[45]从跨命名空间快照配置卷
阶段: Net new to Alpha
特性组: storage
特性门: CrossNamespaceVolumeDataSource
默认值: false
在 Kubernetes 1.26 之前,由于 VolumeSnapshot 的特性,用户可以从快照中提供卷。虽然这是一个伟大的和超级有用的功能。它有一些局限性,比如无法将 PersisentVolumeClaim 绑定到来自其他名称空间的 VolumeSnapshot。
这种增强打破了这个限制,允许 Kubernetes 用户从跨名称空间的快照提供卷。
如果要使用跨名称空间的 VolumeSnapshot 特性,首先必须创建 ReferenceGrant 对象,然后创建一个到 VolumeSnapshot 的 PersisentVolumeClaim 绑定。在这里,您将找到一个简单的例子来说明这两个对象的学习目的。
代码语言:javascript复制---
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: ReferenceGrant
metadata:
name: test
namespace: default
spec:
from:
- group: ""
kind: PersistentVolumeClaim
namespace: nstest1
to:
- group: snapshot.storage.k8s.io
kind: VolumeSnapshot
name: testsnapshot
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: testvolumeclaim
namespace: nstest1
spec:
storageClassName: mystorageclass
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
dataSourceRef2:
apiGroup: snapshot.storage.k8s.io
kind: VolumeSnapshot
name: testsnapshot
namespace: default
volumeMode: Filesystem
#2268[46]非正常节点关闭
阶段: Graduating to Beta
特性组: storage
特性门: NodeOutOfServiceVolumeDetach
默认值: true
此增强解决了未正确检测到的节点关闭情况,其中属于StatefulSet的 pod 将停留在关闭节点上的终止状态,并且无法移动到新的运行节点。
在这种情况下,pod 将被强制删除,触发VolumeAttachments的删除,新的 pods 将在不同的运行节点上创建,以便应用程序可以继续运行。
#3333[47]追溯默认 StorageClass 分配
阶段: Graduating to Beta
特性组: storage
特性门: RetroactiveDefaultStorageClass
默认值: false
这种增强有助于管理集群管理员更改默认存储类时的情况。所有在更改发生时创建的没有 StorageClass 的 PVC 将追溯设置为新的默认 StorageClass。
#1491[48] vSphere 从树内迁移到 CSI 驱动程序
阶段: Graduating to Stable
特性组: storage
特性门: CSIMigrationvSphere
默认值: false
vSphere 的 CSI 驱动程序已经稳定了一段时间。现在,所有插件操作vspherevolume
现在都重定向到树外的 csi.vsphere.vmware.com 驱动程序[49]。
此增强功能是#625 In-tree 存储插件到 CSI 驱动程序迁移[50]工作的一部分。
#1885[51] Azure 文件从树内到 CSI 驱动程序迁移
阶段: Graduating to Stable
特性组: storage
特性门: InTreePluginAzureDiskUnregister
默认值: true
此增强功能总结了将 Azure 文件代码[52]移出主要 Kubernetes 二进制文件(树外)的工作。
#2317[53]允许 Kubernetes 在挂载时将 pod 的 fsgroup 提供给 CSI 驱动程序
阶段:毕业到稳定
功能组:存储
功能门: DelegateFSGroupToCSIDriver
Default value: false
这个增强建议将 pods 的 fsgroup 作为一个显式字段提供给 CSI 驱动程序,因此 CSI 驱动程序可以在挂载时本地应用这个组。
Kubernetes 1.26 中的其他增强功能
#3466[54] Kubernetes 组件运行状况 SLI
阶段: Net new to Alpha
特性组: instrumentation
特性门: ComponentSLIs
默认值: false
查询 Kubernetes 组件的健康数据没有标准格式。
从 Kubernetes 1.26 开始,一个新的 endpoint:/metrics/slis
将对每个组件可用,以 Prometheus 格式公开其服务水平指标 (SLI) 指标。
对于每个组件,将公开两个指标:
- 一个gauge,代表健康检查的当前状态。
- 一个计数器,记录每个健康检查状态观察到的累积计数。
使用此信息,您可以检查 Kubernetes 内部的超时状态,例如:
代码语言:javascript复制kubernetes_healthcheck{name="etcd",type="readyz"}
并在出现问题时创建警报,例如:
代码语言:javascript复制kubernetes_healthchecks_total{name="etcd",status="error",type="readyz"} > 0
#3498[55]扩展指标稳定性
阶段: Net new to Alpha 特性组: instrumentation 特性门: N/A
Kubernetes 中的指标分为alpha
或stable
。这些stable
保证会得到维护,为您提供信息来准备您的仪表板,这样它们就不会在您升级集群时意外中断。
在 Kubernetes 1.26 中,新增了两个类:
beta
:用于与测试版功能相关的指标。它们可能会改变或消失,但它们处于比 alpha 更高级的开发状态。internal
:您不必担心的内部使用指标,要么是因为它们没有为集群管理员提供有用的信息,要么是因为它们可能会更改而不另行通知。
您可以在文档中查看可用指标的完整列表[56]。
#3515 用于[57] kubectl 的 OpenAPI v3 说明
阶段: Net new to Alpha
特性组: cli
环境变量: KUBECTL_EXPLAIN_OPENAPIV3
默认值: false
此增强功能允许kubectl explain
从 OpenAPIv3 而不是 v2 收集数据。
在 OpenAPIv3 中,一些数据可以用更好的方式表示,例如CustomResourceDefinition (CDR)。
还正在进行内部工作以改进kubectl explain
打印输出的方式。
#1440[58] kubectl 事件
阶段:升级到 Beta 功能组: cli 功能门: N/A
一个新kubectl events
命令可用,它将增强kubectl get events
.
#3031[59]签署发布工件
阶段:升级到 Beta 功能组:发布 功能门: N/A
此增强功能引入了一种统一的方法来签署工件,以帮助避免供应链攻击[60]。它依赖于sigstore[61]项目工具,更具体地说cosign[62]。虽然它没有添加新功能,但它肯定有助于使我们的集群受到更多保护。
#3503[63] Windows pod 的主机网络支持
阶段: Net new to Alpha
功能组: windows
功能门: WindowsHostNetwork
默认值: false
Windows pod 中有一种奇怪的情况,您可以在其中为它们设置hostNetwork=true
,但它不会改变任何东西。没有任何平台障碍,只是缺少实现。
从 Kubernetes 1.26 开始,kubelet
现在可以请求 Windows pod 使用主机的网络命名空间,而不是创建新的 pod 网络命名空间。
这将很方便地避免有大量服务的端口耗尽。
#1981[64]支持 Windows 特权容器
阶段:毕业到稳定
功能组: windows
功能门: WindowsHostProcessContainers
默认值: true
此增强功能将 Linux 中可用的特权容器[65]功能引入到了 Windows 主机。
特权容器可以访问主机,就好像它们直接在主机上运行一样。尽管不建议将它们用于大多数工作负载,但它们对于管理、安全和监控目的非常有用。
参考资料
[1]
API 版本: https://kubernetes.io/docs/reference/using-api/deprecation-guide/#v1-25
[2]
CSI 驱动程序: https://github.com/kubernetes/cloud-provider-openstack
[3]
Kubernetes 1.26 发行说明: https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.26.md
[4]
Kubernetes Removals and Deprecations In 1.26: https://kubernetes.io/blog/2022/11/18/upcoming-changes-in-kubernetes-1-26/
[5]
已弃用的 API 迁移指南: https://kubernetes.io/docs/reference/using-api/deprecation-guide/
[6]
#281: https://github.com/kubernetes/enhancements/issues/281
[7]
决定: https://github.com/kubernetes/kubernetes/issues/100799
[8]
完全从 Kubernetes: https://github.com/kubernetes/enhancements/pull/3605/files#diff-138ec4a122ef9ea3b885191796faf63ca6511747e4be18840dd67ffa2a386d1d
[9]
#3352: https://github.com/kubernetes/enhancements/issues/3352
[10]
#3488: https://github.com/kubernetes/enhancements/issues/3488
[11]
在文档中: https://github.com/kubernetes/website/blob/9a8c421c1e18dd9485788f1ffc23944c41e91483/content/en/docs/reference/access-authn-authz/validating-admission-policy.md
[12]
#1965: https://github.com/kubernetes/enhancements/issues/1965
[13]
#3017: https://github.com/kubernetes/enhancements/issues/3017
[14]
简化: https://kubernetes.io/docs/tasks/run-application/configure-pdb/
[15]
#3335: https://github.com/kubernetes/enhancements/issues/3335
[16]
#3329: https://github.com/kubernetes/enhancements/issues/3329
[17]
Jobs: https://kubernetes.io/docs/concepts/workloads/controllers/job/
[18]
#2307: https://github.com/kubernetes/enhancements/issues/2307
[19]
#3325: https://github.com/kubernetes/enhancements/issues/3325
[20]
#2799: https://github.com/kubernetes/enhancements/issues/2799
[21]
TokenRequest API: https://kubernetes.io/docs/reference/kubernetes-api/authentication-resources/token-request-v1/
[22]
#3453: https://github.com/kubernetes/enhancements/issues/3453
[23]
#1669: https://github.com/kubernetes/enhancements/issues/1669
[24]
#2595: https://github.com/kubernetes/enhancements/issues/2595
[25]
#1435 在: https://github.com/kubernetes/enhancements/issues/1435
[26]
#2086: https://github.com/kubernetes/enhancements/issues/2086
[27]
拓扑感知路由: https://sysdig.com/blog/kubernetes-1-21-whats-new/#2433
[28]
#3070: https://github.com/kubernetes/enhancements/issues/3070
[29]
#2371: https://github.com/kubernetes/enhancements/issues/2371
[30]
容器运行时接口 (CRI): https://kubernetes.io/blog/2016/12/container-runtime-interface-cri-in-kubernetes/
[31]
#3063: https://github.com/kubernetes/enhancements/issues/3063
[32]
#3386: https://github.com/kubernetes/enhancements/issues/3386
[33]
看看 KEP: https://github.com/kubernetes/enhancements/blob/master/keps/sig-node/3386-kubelet-evented-pleg/README.md
[34]
#3545: https://github.com/kubernetes/enhancements/issues/3545
[35]
NUMA: https://en.wikipedia.org/wiki/Non-uniform_memory_access
[36]
#2133: https://github.com/kubernetes/enhancements/issues/2133
[37]
#3570: https://github.com/kubernetes/enhancements/issues/3570
[38]
#3573: https://github.com/kubernetes/enhancements/issues/3573
[39]
NVIDIA GPU: https://github.com/NVIDIA/k8s-device-plugin
[40]
AMD GPUS: https://github.com/RadeonOpenCompute/k8s-device-plugin
[41]
SR-IOV NIC : https://github.com/k8snetworkplumbingwg/sriov-network-device-plugin
[42]
#3521: https://github.com/kubernetes/enhancements/issues/3521
[43]
待处理的 Pod: https://sysdig.com/blog/kubernetes-pod-pending-problems/
[44]
#3094 在计算: https://github.com/kubernetes/enhancements/issues/3094
[45]
#3294: https://github.com/kubernetes/enhancements/issues/3294
[46]
#2268: https://github.com/kubernetes/enhancements/issues/2268
[47]
#3333: https://github.com/kubernetes/enhancements/issues/3333
[48]
#1491: https://github.com/kubernetes/enhancements/issues/1491
[49]
树外的 csi.vsphere.vmware.com 驱动程序: https://github.com/kubernetes-sigs/vsphere-csi-driver
[50]
#625 In-tree 存储插件到 CSI 驱动程序迁移: https://sysdig.com/blog/kubernetes-1-25-whats-new/#625
[51]
#1885: https://github.com/kubernetes/enhancements/issues/1885
[52]
Azure 文件代码: https://kubernetes.io/docs/concepts/storage/volumes/#azurefile
[53]
#2317: https://github.com/kubernetes/enhancements/issues/2317
[54]
#3466: https://github.com/kubernetes/enhancements/issues/3466
[55]
#3498: https://github.com/kubernetes/enhancements/issues/3498
[56]
列表: https://kubernetes.io/docs/reference/instrumentation/metrics/
[57]
#3515 用于: https://github.com/kubernetes/enhancements/issues/3515
[58]
#1440: https://github.com/kubernetes/enhancements/issues/1440
[59]
#3031: https://github.com/kubernetes/enhancements/issues/3031
[60]
供应链攻击: https://sysdig.com/blog/software-supply-chain-security/
[61]
sigstore: https://www.sigstore.dev/
[62]
cosign: https://github.com/sigstore/cosign
[63]
#3503: https://github.com/kubernetes/enhancements/issues/3503
[64]
#1981: https://github.com/kubernetes/enhancements/issues/1981
[65]
特权容器: https://kubernetes.io/docs/concepts/workloads/pods/#privileged-mode-for-containers