kubernetes 1.22新特性预览

语言: CN / TW / HK

 

名词解释:
Alpha:是内部测试版,一般不向外部发布,会有很多Bug.一般只有测试人员使用。
Beta:也是测试版,这个阶段的版本会一直加入新的功能。在Alpha版之后推出。
RC:(Release Candidate) 顾名思义么 ! 用在软件上就是候选版本。系统平台上就是发行候选版本。RC版不会再加入新的功能了,主要着重于除错。
GA:General Availability,正式发布的版本,在国外都是用GA来说明release版本的。
RTM:(Release to Manufacture)是给工厂大量压片的版本,内容跟正式版是一样的,不过RTM版也有出限制、评估版的。但是和正式版本的主要程序代码都是一样的。
OEM:是给计算机厂商随着计算机贩卖的,也就是随机版。只能随机器出货,不能零售。只能全新安装,不能从旧有操作系统升级。包装不像零售版精美,通常只有一面CD和说明书(授权书)。 
RVL:号称是正式版,其实RVL根本不是版本的名称。它是中文版/英文版文档破解出来的。 
EVAL:而流通在网络上的EVAL版,与“评估版”类似,功能上和零售版没有区别。 
RTL:Retail(零售版)是真正的正式版,正式上架零售版。在安装盘的i386文件夹里有一个eula.txt,最后有一行EULAID,就是你的版本。比如简体中文正式版是EULAID:WX.4_PRO_RTL_CN,繁体中文正式版是WX.4_PRO_RTL_TW。其中:如果是WX.开头是正式版,WB.开头是测试版。_PRE,代表家庭版;_PRO,代表专业版。
α、β、λ常用来表示软件测试过程中的三个阶段,α是第一阶段,一般只供内部测试使用;β是第二个阶段,已经消除了软件中大部分的不完善之处,但仍有可能还存在缺陷和漏洞,一般只提供给特定的用户群来测试使用;λ是第三个阶段,此时产品已经相当成熟,只需在个别地方再做进一步的优化处理即可上市发行。


----删除一系列已弃用 API
All beta Ingress 等等一些列弃用api

----Kubernetes 发布周期变更
疫情影响  每年4版本转为3版本


----client-go 凭据插件 GA
client-go开发流程并不太好,逐渐完善,独立化云厂商插件开发

----Pod Security Policy 替代
Pod Security Policy 已在 1.21 版本中宣布弃用,作为替代,1.22 引入了内置的 Pod Security Admission 控制器以及新的 Pod Security Standards 标准。Pod Security Standards 应用在命名空间级,它支持三种不同的策略,即:

----服务器端应用 (Server-Side Apply) GA
服务端应用[7] 协助用户和控制器通过声明式配置的方式管理他们的资源。客户端可以发送完整描述的目标,声明式地创建和 / 或修改对象。
声明时api延展

----CSI 子特性 GA
CSI Windows 和 CSI Service Account Token 在 1.22 中 GA:
由于不支持特权容器,CSI Windows 通过 CSIProxy[8] 代理了 Linux 节点中需要特权的那部分操作,从而可以让 CSI 插件以非特权容器的方式部署到 Windows 节点中。
CSI Service Account Token 使得 CSI 插件可以使用与 Pod 绑定的服务帐户令牌,而不是更有特权的密钥。它还提供了对重新发布这些卷的控制,以便可以刷新令牌。

----Memory QoS (Alpha)
在 1.22 以前,由于 Kubernetes 使用了 cgroups v1 API,Pod 的 QoS 只能用于 CPU。而对于内存,只支持通过 memory.limit_in_bytes 限制内存的配额和通过 oom_scores 调整 OOM 事件发生时容器的杀死顺序。这就导致 Kubernetes 无法为 Guaranteed Pod 完全预留内存,而 Burstable Pod 在 OOM 发生时也有更大几率被内核杀死。
Kubernetes 1.22 引入了 cgroups v2 API 来控制内存的分配和隔离,借助 memory.min 和 memory.high 实现了内存的 QoS。


----Seccomp 默认安全策略(Alpha)
Kubelet 1.22 新增了一个 SeccompDefault 的 Alpha 特性,用于开启 Seccomp 默认策略。特性开启后,RuntimeDefault 将作为默认的 Seccomp 策略,应用到集群中所有的 Pod 中(特性未开启时,默认为 Unconfined)。这可以说是极大的提升了整个集群的安全。

----Windows 特权容器(Alpha)
自 Kubernetes 支持 Windows 以来,Windows 节点最大的一个缺陷可说是不支持特权容器,导致很多在 Linux 节点中可通过 Daemonset 来部署的扩展和插件在 Windows 节点中都需要放到 Kubernetes 之外管理(比如通过 Powershell 来安装、配置并通过主机服务来启动)。
1.22 新增了 Windows HostProcess 容器(需开启 WindowsHostProcessContainers 特性),正式让 Windows 节点也支持了特权容器。HostProcess 容器可用于在 Windows 节点上部署网络插件、存储配置、设备插件、kube-proxy 等组件,不需要专门的代理,也不需要直接安装主机服务。
HostProcess 容器需要在 Pod Spec 中的 securityContext 中开启,


其他重大特性
除了上述特性之外,以下这些特性也值得你特别留意:
etcd 迁移到 3.5.0[9],带来很多安全、性能、监控以及开发体验的提升;
StreamingProxyRedirects 弃用且默认关闭,将于 1.24 删除;
kubeadm 支持以非 root 用户部署控制平面(需开启 RootlessControlPlane 特性);
kubelet 支持以非 root 用户运行(即 Rootless kubelet[10]);
Pod Eviction 支持 policy/v1 API(policy/v1beta1 在 1.22 弃用);
DynamicKubeletConfig 弃用,该特性默认改为关闭状态;
当配置 externalTrafficPolicy: Local 的 Service 在某个节点中只有 Terminating 状态的 Pod 时, kube-proxy 会继续向 Terminating 状态的 Pod 转发请求(而以前是直接丢包);
CertificateSigningRequest.certificates.k8s.io API 新增 expirationSeconds 的支持;
Node 新增 Swap 内存的支持(Alpha);
新增 ExpandedDNSConfig 特性(Alpha)将 MaxDNSSearchPaths 扩展到 32,并将 MaxDNSSearchListChars 扩展到 2048。
MemoryManager、NetworkPolicyEndPort、PodDeletionCost、SuspendJob、ServiceLBNodePortControl 和 ServiceLoadBalancerClass 等一系列特性进入 Beta 版,默认开启。


总结:除了一些小的变更,主要停留在权限、以及更好的支持windows上。